OpenCores
URL https://opencores.org/ocsvn/w11/w11/trunk

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.7/] [rtl/] [bplib/] [nexys2/] [tb/] [tb_nexys2_fusp.vhd] - Blame information for rev 36

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 30 wfjm
-- $Id: tb_nexys2_fusp.vhd 666 2015-04-12 21:17:54Z mueller $
2 2 wfjm
--
3 30 wfjm
-- Copyright 2010-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
4 2 wfjm
--
5
-- This program is free software; you may redistribute and/or modify it under
6
-- the terms of the GNU General Public License as published by the Free
7
-- Software Foundation, either version 2, or at your option any later version.
8
--
9
-- This program is distributed in the hope that it will be useful, but
10
-- WITHOUT ANY WARRANTY, without even the implied warranty of MERCHANTABILITY
11
-- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12
-- for complete details.
13
-- 
14
------------------------------------------------------------------------------
15
-- Module Name:    tb_nexys2_fusp - sim
16
-- Description:    Test bench for nexys2 (base+fusp)
17
--
18 17 wfjm
-- Dependencies:   simlib/simclk
19
--                 simlib/simclkcnt
20
--                 xlib/dcm_sfs
21
--                 rlink/tb/tbcore_rlink
22 2 wfjm
--                 tb_nexys2_core
23 30 wfjm
--                 serport/serport_master
24 2 wfjm
--                 nexys2_fusp_aif [UUT]
25
--
26
-- To test:        generic, any nexys2_fusp_aif target
27
--
28
-- Target Devices: generic
29 29 wfjm
-- Tool versions:  xst 11.4-14.7; ghdl 0.26-0.31
30 8 wfjm
--
31 2 wfjm
-- Revision History: 
32
-- Date         Rev Version  Comment
33 30 wfjm
-- 2015-04-12   666   3.3    use serport_master instead of serport_uart_rxtx
34 17 wfjm
-- 2011-12-23   444   3.2    new system clock scheme, new tbcore_rlink iface
35 15 wfjm
-- 2011-11-26   433   3.1.1  remove O_FLA_CE_N from tb_nexys2_core
36
-- 2011-11-21   432   3.1    update O_FLA_CE_N usage
37 13 wfjm
-- 2011-11-19   427   3.0.1  now numeric_std clean
38 9 wfjm
-- 2010-12-29   351   3.0    use rlink/tb now
39 8 wfjm
-- 2010-11-13   338   1.0.2  now dcm aware: add O_CLKSYS, use rritb_core_dcm
40
-- 2010-11-06   336   1.0.1  rename input pin CLK -> I_CLK50
41 2 wfjm
-- 2010-05-28   295   1.0    Initial version (derived from tb_s3board_fusp)
42
------------------------------------------------------------------------------
43
 
44
library ieee;
45
use ieee.std_logic_1164.all;
46 13 wfjm
use ieee.numeric_std.all;
47 2 wfjm
use ieee.std_logic_textio.all;
48
use std.textio.all;
49
 
50
use work.slvtypes.all;
51 9 wfjm
use work.rlinklib.all;
52
use work.rlinktblib.all;
53 19 wfjm
use work.serportlib.all;
54 17 wfjm
use work.xlib.all;
55 2 wfjm
use work.nexys2lib.all;
56
use work.simlib.all;
57
use work.simbus.all;
58 17 wfjm
use work.sys_conf.all;
59 2 wfjm
 
60
entity tb_nexys2_fusp is
61
end tb_nexys2_fusp;
62
 
63
architecture sim of tb_nexys2_fusp is
64
 
65 8 wfjm
  signal CLKOSC : slbit := '0';
66 17 wfjm
  signal CLKCOM : slbit := '0';
67 2 wfjm
 
68 17 wfjm
  signal CLK_STOP : slbit := '0';
69
  signal CLKCOM_CYCLE : integer := 0;
70
 
71 2 wfjm
  signal RESET : slbit := '0';
72
  signal CLKDIV : slv2 := "00";         -- run with 1 clocks / bit !!
73
  signal RXDATA : slv8 := (others=>'0');
74
  signal RXVAL : slbit := '0';
75
  signal RXERR : slbit := '0';
76
  signal RXACT : slbit := '0';
77
  signal TXDATA : slv8 := (others=>'0');
78
  signal TXENA : slbit := '0';
79
  signal TXBUSY : slbit := '0';
80
 
81
  signal RX_HOLD : slbit := '0';
82
 
83
  signal I_RXD : slbit := '1';
84
  signal O_TXD : slbit := '1';
85
  signal I_SWI : slv8 := (others=>'0');
86
  signal I_BTN : slv4 := (others=>'0');
87
  signal O_LED : slv8 := (others=>'0');
88
  signal O_ANO_N : slv4 := (others=>'0');
89
  signal O_SEG_N : slv8 := (others=>'0');
90
 
91
  signal O_MEM_CE_N  : slbit := '1';
92
  signal O_MEM_BE_N  : slv2 := (others=>'1');
93
  signal O_MEM_WE_N  : slbit := '1';
94
  signal O_MEM_OE_N  : slbit := '1';
95
  signal O_MEM_ADV_N : slbit := '1';
96
  signal O_MEM_CLK   : slbit := '0';
97
  signal O_MEM_CRE   : slbit := '0';
98
  signal I_MEM_WAIT  : slbit := '0';
99
  signal O_MEM_ADDR  : slv23 := (others=>'Z');
100
  signal IO_MEM_DATA : slv16 := (others=>'0');
101 15 wfjm
  signal O_FLA_CE_N  : slbit := '0';
102 2 wfjm
 
103
  signal O_FUSP_RTS_N : slbit := '0';
104
  signal I_FUSP_CTS_N : slbit := '0';
105
  signal I_FUSP_RXD : slbit := '1';
106
  signal O_FUSP_TXD : slbit := '1';
107
 
108
  signal UART_RESET : slbit := '0';
109
  signal UART_RXD : slbit := '1';
110
  signal UART_TXD : slbit := '1';
111
  signal CTS_N : slbit := '0';
112
  signal RTS_N : slbit := '0';
113
 
114 30 wfjm
  signal R_PORTSEL_SER : slbit := '0';       -- if 1 use alternate serport
115
  signal R_PORTSEL_XON : slbit := '0';       -- if 1 use xon/xoff
116 2 wfjm
 
117 13 wfjm
  constant sbaddr_portsel: slv8 := slv(to_unsigned( 8,8));
118 2 wfjm
 
119 17 wfjm
  constant clock_period : time :=  20 ns;
120
  constant clock_offset : time := 200 ns;
121 2 wfjm
 
122
begin
123
 
124 17 wfjm
  CLKGEN : simclk
125 2 wfjm
    generic map (
126 17 wfjm
      PERIOD => clock_period,
127
      OFFSET => clock_offset)
128 2 wfjm
    port map (
129 17 wfjm
      CLK      => CLKOSC,
130
      CLK_STOP => CLK_STOP
131 2 wfjm
    );
132 17 wfjm
 
133
  DCM_COM : dcm_sfs
134
    generic map (
135
      CLKFX_DIVIDE   => sys_conf_clkfx_divide,
136
      CLKFX_MULTIPLY => sys_conf_clkfx_multiply,
137
      CLKIN_PERIOD   => 20.0)
138
    port map (
139
      CLKIN   => CLKOSC,
140
      CLKFX   => CLKCOM,
141
      LOCKED  => open
142
    );
143 2 wfjm
 
144 17 wfjm
  CLKCNT : simclkcnt port map (CLK => CLKCOM, CLK_CYCLE => CLKCOM_CYCLE);
145
 
146
  TBCORE : tbcore_rlink
147
    port map (
148
      CLK      => CLKCOM,
149
      CLK_STOP => CLK_STOP,
150
      RX_DATA  => TXDATA,
151
      RX_VAL   => TXENA,
152
      RX_HOLD  => RX_HOLD,
153
      TX_DATA  => RXDATA,
154
      TX_ENA   => RXVAL
155
    );
156
 
157 2 wfjm
  RX_HOLD <= TXBUSY or RTS_N;           -- back preasure for data flow to tb
158
 
159
  N2CORE : entity work.tb_nexys2_core
160
    port map (
161
      I_SWI       => I_SWI,
162
      I_BTN       => I_BTN,
163
      O_MEM_CE_N  => O_MEM_CE_N,
164
      O_MEM_BE_N  => O_MEM_BE_N,
165
      O_MEM_WE_N  => O_MEM_WE_N,
166
      O_MEM_OE_N  => O_MEM_OE_N,
167
      O_MEM_ADV_N => O_MEM_ADV_N,
168
      O_MEM_CLK   => O_MEM_CLK,
169
      O_MEM_CRE   => O_MEM_CRE,
170
      I_MEM_WAIT  => I_MEM_WAIT,
171
      O_MEM_ADDR  => O_MEM_ADDR,
172
      IO_MEM_DATA => IO_MEM_DATA
173
    );
174
 
175
  UUT : nexys2_fusp_aif
176
    port map (
177 8 wfjm
      I_CLK50      => CLKOSC,
178 2 wfjm
      I_RXD        => I_RXD,
179
      O_TXD        => O_TXD,
180
      I_SWI        => I_SWI,
181
      I_BTN        => I_BTN,
182
      O_LED        => O_LED,
183
      O_ANO_N      => O_ANO_N,
184
      O_SEG_N      => O_SEG_N,
185
      O_MEM_CE_N   => O_MEM_CE_N,
186
      O_MEM_BE_N   => O_MEM_BE_N,
187
      O_MEM_WE_N   => O_MEM_WE_N,
188
      O_MEM_OE_N   => O_MEM_OE_N,
189
      O_MEM_ADV_N  => O_MEM_ADV_N,
190
      O_MEM_CLK    => O_MEM_CLK,
191
      O_MEM_CRE    => O_MEM_CRE,
192
      I_MEM_WAIT   => I_MEM_WAIT,
193
      O_MEM_ADDR   => O_MEM_ADDR,
194
      IO_MEM_DATA  => IO_MEM_DATA,
195 15 wfjm
      O_FLA_CE_N   => O_FLA_CE_N,
196 2 wfjm
      O_FUSP_RTS_N => O_FUSP_RTS_N,
197
      I_FUSP_CTS_N => I_FUSP_CTS_N,
198
      I_FUSP_RXD   => I_FUSP_RXD,
199
      O_FUSP_TXD   => O_FUSP_TXD
200
    );
201
 
202 30 wfjm
  SERMSTR : serport_master
203 2 wfjm
    generic map (
204
      CDWIDTH => CLKDIV'length)
205
    port map (
206 30 wfjm
      CLK     => CLKCOM,
207
      RESET   => UART_RESET,
208
      CLKDIV  => CLKDIV,
209
      ENAXON  => R_PORTSEL_XON,
210
      ENAESC  => '0',
211
      RXDATA  => RXDATA,
212
      RXVAL   => RXVAL,
213
      RXERR   => RXERR,
214
      RXOK    => '1',
215
      TXDATA  => TXDATA,
216
      TXENA   => TXENA,
217
      TXBUSY  => TXBUSY,
218
      RXSD    => UART_RXD,
219
      TXSD    => UART_TXD,
220
      RXRTS_N => RTS_N,
221
      TXCTS_N => CTS_N
222 2 wfjm
    );
223
 
224 30 wfjm
  proc_port_mux: process (R_PORTSEL_SER, UART_TXD, CTS_N,
225 2 wfjm
                          O_TXD, O_FUSP_TXD, O_FUSP_RTS_N)
226
  begin
227
 
228 30 wfjm
    if R_PORTSEL_SER = '0' then           -- use main board rs232, no flow cntl
229 2 wfjm
      I_RXD        <= UART_TXD;           -- write port 0 inputs
230
      UART_RXD     <= O_TXD;              -- get port 0 outputs
231
      RTS_N        <= '0';
232
      I_FUSP_RXD   <= '1';                -- port 1 inputs to idle state
233
      I_FUSP_CTS_N <= '0';
234
    else                                -- otherwise use pmod1 rs232
235
      I_FUSP_RXD   <= UART_TXD;           -- write port 1 inputs
236
      I_FUSP_CTS_N <= CTS_N;
237
      UART_RXD     <= O_FUSP_TXD;         -- get port 1 outputs
238
      RTS_N        <= O_FUSP_RTS_N;
239
      I_RXD        <= '1';                -- port 0 inputs to idle state
240
    end if;
241
 
242
  end process proc_port_mux;
243
 
244
  proc_moni: process
245
    variable oline : line;
246
  begin
247
 
248
    loop
249 17 wfjm
      wait until rising_edge(CLKCOM);
250 2 wfjm
 
251
      if RXERR = '1' then
252 17 wfjm
        writetimestamp(oline, CLKCOM_CYCLE, " : seen RXERR=1");
253 2 wfjm
        writeline(output, oline);
254
      end if;
255
 
256
    end loop;
257
 
258
  end process proc_moni;
259
 
260
  proc_simbus: process (SB_VAL)
261
  begin
262
    if SB_VAL'event and to_x01(SB_VAL)='1' then
263
      if SB_ADDR = sbaddr_portsel then
264 30 wfjm
        R_PORTSEL_SER <= to_x01(SB_DATA(0));
265
        R_PORTSEL_XON <= to_x01(SB_DATA(1));
266 2 wfjm
      end if;
267
    end if;
268
  end process proc_simbus;
269
 
270
end sim;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.