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

Subversion Repositories w11

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

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

Line No. Rev Author Line
1 15 wfjm
-- $Id: tb_nexys2_fusp.vhd 433 2011-11-27 22:04:39Z mueller $
2 2 wfjm
--
3 13 wfjm
-- Copyright 2010-2011 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 9 wfjm
-- Dependencies:   vlib/rlink/tb/tbcore_rlink_dcm
19 2 wfjm
--                 tb_nexys2_core
20
--                 vlib/serport/serport_uart_rxtx
21
--                 nexys2_fusp_aif [UUT]
22
--
23
-- To test:        generic, any nexys2_fusp_aif target
24
--
25
-- Target Devices: generic
26 13 wfjm
-- Tool versions:  xst 11.4, 12.1, 13.1; ghdl 0.26-0.29
27 8 wfjm
--
28 2 wfjm
-- Revision History: 
29
-- Date         Rev Version  Comment
30 15 wfjm
-- 2011-11-26   433   3.1.1  remove O_FLA_CE_N from tb_nexys2_core
31
-- 2011-11-21   432   3.1    update O_FLA_CE_N usage
32 13 wfjm
-- 2011-11-19   427   3.0.1  now numeric_std clean
33 9 wfjm
-- 2010-12-29   351   3.0    use rlink/tb now
34 8 wfjm
-- 2010-11-13   338   1.0.2  now dcm aware: add O_CLKSYS, use rritb_core_dcm
35
-- 2010-11-06   336   1.0.1  rename input pin CLK -> I_CLK50
36 2 wfjm
-- 2010-05-28   295   1.0    Initial version (derived from tb_s3board_fusp)
37
------------------------------------------------------------------------------
38
 
39
library ieee;
40
use ieee.std_logic_1164.all;
41 13 wfjm
use ieee.numeric_std.all;
42 2 wfjm
use ieee.std_logic_textio.all;
43
use std.textio.all;
44
 
45
use work.slvtypes.all;
46 9 wfjm
use work.rlinklib.all;
47
use work.rlinktblib.all;
48 2 wfjm
use work.serport.all;
49
use work.nexys2lib.all;
50
use work.simlib.all;
51
use work.simbus.all;
52
 
53
entity tb_nexys2_fusp is
54
end tb_nexys2_fusp;
55
 
56
architecture sim of tb_nexys2_fusp is
57
 
58 8 wfjm
  signal CLKOSC : slbit := '0';
59
  signal CLKSYS : slbit := '0';
60 2 wfjm
 
61
  signal RESET : slbit := '0';
62
  signal CLKDIV : slv2 := "00";         -- run with 1 clocks / bit !!
63
  signal RXDATA : slv8 := (others=>'0');
64
  signal RXVAL : slbit := '0';
65
  signal RXERR : slbit := '0';
66
  signal RXACT : slbit := '0';
67
  signal TXDATA : slv8 := (others=>'0');
68
  signal TXENA : slbit := '0';
69
  signal TXBUSY : slbit := '0';
70
 
71
  signal RX_HOLD : slbit := '0';
72
 
73
  signal I_RXD : slbit := '1';
74
  signal O_TXD : slbit := '1';
75
  signal I_SWI : slv8 := (others=>'0');
76
  signal I_BTN : slv4 := (others=>'0');
77
  signal O_LED : slv8 := (others=>'0');
78
  signal O_ANO_N : slv4 := (others=>'0');
79
  signal O_SEG_N : slv8 := (others=>'0');
80
 
81
  signal O_MEM_CE_N  : slbit := '1';
82
  signal O_MEM_BE_N  : slv2 := (others=>'1');
83
  signal O_MEM_WE_N  : slbit := '1';
84
  signal O_MEM_OE_N  : slbit := '1';
85
  signal O_MEM_ADV_N : slbit := '1';
86
  signal O_MEM_CLK   : slbit := '0';
87
  signal O_MEM_CRE   : slbit := '0';
88
  signal I_MEM_WAIT  : slbit := '0';
89
  signal O_MEM_ADDR  : slv23 := (others=>'Z');
90
  signal IO_MEM_DATA : slv16 := (others=>'0');
91 15 wfjm
  signal O_FLA_CE_N  : slbit := '0';
92 2 wfjm
 
93
  signal O_FUSP_RTS_N : slbit := '0';
94
  signal I_FUSP_CTS_N : slbit := '0';
95
  signal I_FUSP_RXD : slbit := '1';
96
  signal O_FUSP_TXD : slbit := '1';
97
 
98
  signal UART_RESET : slbit := '0';
99
  signal UART_RXD : slbit := '1';
100
  signal UART_TXD : slbit := '1';
101
  signal CTS_N : slbit := '0';
102
  signal RTS_N : slbit := '0';
103
 
104
  signal R_PORTSEL : slbit := '0';
105
 
106 13 wfjm
  constant sbaddr_portsel: slv8 := slv(to_unsigned( 8,8));
107 2 wfjm
 
108 8 wfjm
  constant clockosc_period : time :=  20 ns;
109
  constant clockosc_offset : time := 200 ns;
110 2 wfjm
  constant setup_time : time :=  5 ns;
111 8 wfjm
  constant c2out_time : time :=  9 ns;
112 2 wfjm
 
113
begin
114
 
115 9 wfjm
  TBCORE : tbcore_rlink_dcm
116 2 wfjm
    generic map (
117 8 wfjm
      CLKOSC_PERIOD => clockosc_period,
118
      CLKOSC_OFFSET => clockosc_offset,
119 2 wfjm
      SETUP_TIME => setup_time,
120
      C2OUT_TIME => c2out_time)
121
    port map (
122 8 wfjm
      CLKOSC  => CLKOSC,
123
      CLKSYS  => CLKSYS,
124 2 wfjm
      RX_DATA => TXDATA,
125
      RX_VAL  => TXENA,
126
      RX_HOLD => RX_HOLD,
127
      TX_DATA => RXDATA,
128
      TX_ENA  => RXVAL
129
    );
130
 
131
  RX_HOLD <= TXBUSY or RTS_N;           -- back preasure for data flow to tb
132
 
133
  N2CORE : entity work.tb_nexys2_core
134
    port map (
135
      I_SWI       => I_SWI,
136
      I_BTN       => I_BTN,
137
      O_MEM_CE_N  => O_MEM_CE_N,
138
      O_MEM_BE_N  => O_MEM_BE_N,
139
      O_MEM_WE_N  => O_MEM_WE_N,
140
      O_MEM_OE_N  => O_MEM_OE_N,
141
      O_MEM_ADV_N => O_MEM_ADV_N,
142
      O_MEM_CLK   => O_MEM_CLK,
143
      O_MEM_CRE   => O_MEM_CRE,
144
      I_MEM_WAIT  => I_MEM_WAIT,
145
      O_MEM_ADDR  => O_MEM_ADDR,
146
      IO_MEM_DATA => IO_MEM_DATA
147
    );
148
 
149
  UUT : nexys2_fusp_aif
150
    port map (
151 8 wfjm
      I_CLK50      => CLKOSC,
152
      O_CLKSYS     => CLKSYS,
153 2 wfjm
      I_RXD        => I_RXD,
154
      O_TXD        => O_TXD,
155
      I_SWI        => I_SWI,
156
      I_BTN        => I_BTN,
157
      O_LED        => O_LED,
158
      O_ANO_N      => O_ANO_N,
159
      O_SEG_N      => O_SEG_N,
160
      O_MEM_CE_N   => O_MEM_CE_N,
161
      O_MEM_BE_N   => O_MEM_BE_N,
162
      O_MEM_WE_N   => O_MEM_WE_N,
163
      O_MEM_OE_N   => O_MEM_OE_N,
164
      O_MEM_ADV_N  => O_MEM_ADV_N,
165
      O_MEM_CLK    => O_MEM_CLK,
166
      O_MEM_CRE    => O_MEM_CRE,
167
      I_MEM_WAIT   => I_MEM_WAIT,
168
      O_MEM_ADDR   => O_MEM_ADDR,
169
      IO_MEM_DATA  => IO_MEM_DATA,
170 15 wfjm
      O_FLA_CE_N   => O_FLA_CE_N,
171 2 wfjm
      O_FUSP_RTS_N => O_FUSP_RTS_N,
172
      I_FUSP_CTS_N => I_FUSP_CTS_N,
173
      I_FUSP_RXD   => I_FUSP_RXD,
174
      O_FUSP_TXD   => O_FUSP_TXD
175
    );
176
 
177
  UART : serport_uart_rxtx
178
    generic map (
179
      CDWIDTH => CLKDIV'length)
180
    port map (
181 8 wfjm
      CLK    => CLKSYS,
182 2 wfjm
      RESET  => UART_RESET,
183
      CLKDIV => CLKDIV,
184
      RXSD   => UART_RXD,
185
      RXDATA => RXDATA,
186
      RXVAL  => RXVAL,
187
      RXERR  => RXERR,
188
      RXACT  => RXACT,
189
      TXSD   => UART_TXD,
190
      TXDATA => TXDATA,
191
      TXENA  => TXENA,
192
      TXBUSY => TXBUSY
193
    );
194
 
195
  proc_port_mux: process (R_PORTSEL, UART_TXD, CTS_N,
196
                          O_TXD, O_FUSP_TXD, O_FUSP_RTS_N)
197
  begin
198
 
199
    if R_PORTSEL = '0' then             -- use main board rs232, no flow cntl
200
      I_RXD        <= UART_TXD;           -- write port 0 inputs
201
      UART_RXD     <= O_TXD;              -- get port 0 outputs
202
      RTS_N        <= '0';
203
      I_FUSP_RXD   <= '1';                -- port 1 inputs to idle state
204
      I_FUSP_CTS_N <= '0';
205
    else                                -- otherwise use pmod1 rs232
206
      I_FUSP_RXD   <= UART_TXD;           -- write port 1 inputs
207
      I_FUSP_CTS_N <= CTS_N;
208
      UART_RXD     <= O_FUSP_TXD;         -- get port 1 outputs
209
      RTS_N        <= O_FUSP_RTS_N;
210
      I_RXD        <= '1';                -- port 0 inputs to idle state
211
    end if;
212
 
213
  end process proc_port_mux;
214
 
215
  proc_moni: process
216
    variable oline : line;
217
  begin
218
 
219
    loop
220 13 wfjm
      wait until rising_edge(CLKSYS);
221 2 wfjm
      wait for c2out_time;
222
 
223
      if RXERR = '1' then
224
        writetimestamp(oline, SB_CLKCYCLE, " : seen RXERR=1");
225
        writeline(output, oline);
226
      end if;
227
 
228
    end loop;
229
 
230
  end process proc_moni;
231
 
232
  proc_simbus: process (SB_VAL)
233
  begin
234
    if SB_VAL'event and to_x01(SB_VAL)='1' then
235
      if SB_ADDR = sbaddr_portsel then
236
        R_PORTSEL <= to_x01(SB_DATA(0));
237
      end if;
238
    end if;
239
  end process proc_simbus;
240
 
241
end sim;

powered by: WebSVN 2.1.0

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