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

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.7/] [rtl/] [bplib/] [nexys4/] [tb/] [tb_nexys4_cram.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_nexys4_cram.vhd 666 2015-04-12 21:17:54Z mueller $
2 29 wfjm
--
3
-- Copyright 2013-2015 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
4
--
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_nexys4_cram - sim
16
-- Description:    Test bench for nexys4 (base+cram)
17
--
18
-- Dependencies:   simlib/simclk
19
--                 simlib/simclkcnt
20
--                 rlink/tb/tbcore_rlink
21
--                 xlib/s7_cmt_sfs
22
--                 tb_nexys4_core
23 30 wfjm
--                 serport/serport_master
24 29 wfjm
--                 nexys4_cram_aif [UUT]
25
--                 vlib/parts/micron/mt45w8mw16b
26
--
27
-- To test:        generic, any nexys4_cram_aif target
28
--
29
-- Target Devices: generic
30
-- Tool versions:  ise 14.5-14.7; viv 2014.4; ghdl 0.29-0.31
31
--
32
-- Revision History: 
33
-- Date         Rev Version  Comment
34 30 wfjm
-- 2015-04-12   666   1.2    use serport_master instead of serport_uart_rxtx
35 29 wfjm
-- 2015-02-01   641   1.1    separate I_BTNRST_N
36
-- 2013-09-28   535   1.0.1  use proper clock manager
37
-- 2013-09-21   534   1.0    Initial version (derived from tb_nexys3)
38
------------------------------------------------------------------------------
39
 
40
library ieee;
41
use ieee.std_logic_1164.all;
42
use ieee.numeric_std.all;
43
use ieee.std_logic_textio.all;
44
use std.textio.all;
45
 
46
use work.slvtypes.all;
47
use work.rlinklib.all;
48
use work.rlinktblib.all;
49
use work.serportlib.all;
50
use work.xlib.all;
51
use work.nexys4lib.all;
52
use work.simlib.all;
53
use work.simbus.all;
54
use work.sys_conf.all;
55
 
56
entity tb_nexys4_cram is
57
end tb_nexys4_cram;
58
 
59
architecture sim of tb_nexys4_cram is
60
 
61
  signal CLKOSC : slbit := '0';         -- board clock (100 Mhz)
62
  signal CLKCOM : slbit := '0';         -- communication clock
63
 
64
  signal CLK_STOP : slbit := '0';
65
  signal CLKCOM_CYCLE : integer := 0;
66
 
67
  signal RESET : slbit := '0';
68
  signal CLKDIV : slv2 := "00";         -- run with 1 clocks / bit !!
69
  signal RXDATA : slv8 := (others=>'0');
70
  signal RXVAL : slbit := '0';
71
  signal RXERR : slbit := '0';
72
  signal RXACT : slbit := '0';
73
  signal TXDATA : slv8 := (others=>'0');
74
  signal TXENA : slbit := '0';
75
  signal TXBUSY : slbit := '0';
76
 
77
  signal I_RXD : slbit := '1';
78
  signal O_TXD : slbit := '1';
79
  signal O_RTS_N : slbit := '0';
80
  signal I_CTS_N : slbit := '0';
81
  signal I_SWI : slv16 := (others=>'0');
82
  signal I_BTN : slv5 := (others=>'0');
83
  signal I_BTNRST_N : slbit := '1';
84
  signal O_LED : slv16 := (others=>'0');
85
  signal O_RGBLED0 : slv3 := (others=>'0');
86
  signal O_RGBLED1 : slv3 := (others=>'0');
87
  signal O_ANO_N : slv8 := (others=>'0');
88
  signal O_SEG_N : slv8 := (others=>'0');
89
  signal O_MEM_CE_N  : slbit := '1';
90
  signal O_MEM_BE_N  : slv2 := (others=>'1');
91
  signal O_MEM_WE_N  : slbit := '1';
92
  signal O_MEM_OE_N  : slbit := '1';
93
  signal O_MEM_ADV_N : slbit := '1';
94
  signal O_MEM_CLK   : slbit := '0';
95
  signal O_MEM_CRE   : slbit := '0';
96
  signal I_MEM_WAIT  : slbit := '0';
97
  signal O_MEM_ADDR  : slv23 := (others=>'Z');
98
  signal IO_MEM_DATA : slv16 := (others=>'0');
99
 
100 30 wfjm
  signal R_PORTSEL_XON : slbit := '0';       -- if 1 use xon/xoff
101
 
102
  constant sbaddr_portsel: slv8 := slv(to_unsigned( 8,8));
103
 
104 29 wfjm
  constant clock_period : time :=  10 ns;
105
  constant clock_offset : time := 200 ns;
106
 
107
begin
108
 
109
  CLKGEN : simclk
110
    generic map (
111
      PERIOD => clock_period,
112
      OFFSET => clock_offset)
113
    port map (
114
      CLK      => CLKOSC,
115
      CLK_STOP => CLK_STOP
116
    );
117
 
118
  CLKGEN_COM : s7_cmt_sfs
119
    generic map (
120
      VCO_DIVIDE   => sys_conf_clkser_vcodivide,
121
      VCO_MULTIPLY => sys_conf_clkser_vcomultiply,
122
      OUT_DIVIDE   => sys_conf_clkser_outdivide,
123
      CLKIN_PERIOD => 10.0,
124
      CLKIN_JITTER => 0.01,
125
      STARTUP_WAIT => false,
126
      GEN_TYPE     => sys_conf_clksys_gentype)
127
    port map (
128
      CLKIN   => CLKOSC,
129
      CLKFX   => CLKCOM,
130
      LOCKED  => open
131
    );
132
 
133
  CLKCNT : simclkcnt port map (CLK => CLKCOM, CLK_CYCLE => CLKCOM_CYCLE);
134
 
135
  TBCORE : tbcore_rlink
136
    port map (
137
      CLK      => CLKCOM,
138
      CLK_STOP => CLK_STOP,
139
      RX_DATA  => TXDATA,
140
      RX_VAL   => TXENA,
141
      RX_HOLD  => TXBUSY,
142
      TX_DATA  => RXDATA,
143
      TX_ENA   => RXVAL
144
    );
145
 
146
  N4CORE : entity work.tb_nexys4_core
147
    port map (
148
      I_SWI       => I_SWI,
149
      I_BTN       => I_BTN,
150
      I_BTNRST_N  => I_BTNRST_N
151
    );
152
 
153
  UUT : nexys4_cram_aif
154
    port map (
155
      I_CLK100    => CLKOSC,
156
      I_RXD       => I_RXD,
157
      O_TXD       => O_TXD,
158
      O_RTS_N     => O_RTS_N,
159
      I_CTS_N     => I_CTS_N,
160
      I_SWI       => I_SWI,
161
      I_BTN       => I_BTN,
162
      I_BTNRST_N  => I_BTNRST_N,
163
      O_LED       => O_LED,
164
      O_RGBLED0   => O_RGBLED0,
165
      O_RGBLED1   => O_RGBLED1,
166
      O_ANO_N     => O_ANO_N,
167
      O_SEG_N     => O_SEG_N,
168
      O_MEM_CE_N  => O_MEM_CE_N,
169
      O_MEM_BE_N  => O_MEM_BE_N,
170
      O_MEM_WE_N  => O_MEM_WE_N,
171
      O_MEM_OE_N  => O_MEM_OE_N,
172
      O_MEM_ADV_N => O_MEM_ADV_N,
173
      O_MEM_CLK   => O_MEM_CLK,
174
      O_MEM_CRE   => O_MEM_CRE,
175
      I_MEM_WAIT  => I_MEM_WAIT,
176
      O_MEM_ADDR  => O_MEM_ADDR,
177
      IO_MEM_DATA => IO_MEM_DATA
178
    );
179
 
180
  MEM : entity work.mt45w8mw16b
181
    port map (
182
      CLK   => O_MEM_CLK,
183
      CE_N  => O_MEM_CE_N,
184
      OE_N  => O_MEM_OE_N,
185
      WE_N  => O_MEM_WE_N,
186
      UB_N  => O_MEM_BE_N(1),
187
      LB_N  => O_MEM_BE_N(0),
188
      ADV_N => O_MEM_ADV_N,
189
      CRE   => O_MEM_CRE,
190
      MWAIT => I_MEM_WAIT,
191
      ADDR  => O_MEM_ADDR,
192
      DATA  => IO_MEM_DATA
193
    );
194
 
195 30 wfjm
  SERMSTR : serport_master
196 29 wfjm
    generic map (
197
      CDWIDTH => CLKDIV'length)
198
    port map (
199 30 wfjm
      CLK     => CLKCOM,
200
      RESET   => RESET,
201
      CLKDIV  => CLKDIV,
202
      ENAXON  => R_PORTSEL_XON,
203
      ENAESC  => '0',
204
      RXDATA  => RXDATA,
205
      RXVAL   => RXVAL,
206
      RXERR   => RXERR,
207
      RXOK    => '1',
208
      TXDATA  => TXDATA,
209
      TXENA   => TXENA,
210
      TXBUSY  => TXBUSY,
211
      RXSD    => O_TXD,
212
      TXSD    => I_RXD,
213
      RXRTS_N => I_CTS_N,
214
      TXCTS_N => O_RTS_N
215 29 wfjm
    );
216
 
217
  proc_moni: process
218
    variable oline : line;
219
  begin
220
 
221
    loop
222
      wait until rising_edge(CLKCOM);
223
 
224
      if RXERR = '1' then
225
        writetimestamp(oline, CLKCOM_CYCLE, " : seen RXERR=1");
226
        writeline(output, oline);
227
      end if;
228
 
229
    end loop;
230
 
231
  end process proc_moni;
232
 
233
end sim;

powered by: WebSVN 2.1.0

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