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

Subversion Repositories w11

[/] [w11/] [tags/] [w11a_V0.74/] [rtl/] [bplib/] [nexys4/] [tb/] [tb_nexys4.vhd] - Blame information for rev 38

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 37 wfjm
-- $Id: tb_nexys4.vhd 805 2016-09-03 08:09:52Z mueller $
2 29 wfjm
--
3 35 wfjm
-- Copyright 2013-2016 by Walter F.J. Mueller <W.F.J.Mueller@gsi.de>
4 29 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_nexys4 - sim
16
-- Description:    Test bench for nexys4 (base)
17
--
18
-- Dependencies:   simlib/simclk
19
--                 simlib/simclkcnt
20 35 wfjm
--                 rlink/tbcore/tbcore_rlink
21
--                 xlib/tb/s7_cmt_sfs_tb
22 29 wfjm
--                 tb_nexys4_core
23 35 wfjm
--                 serport/tb/serport_master_tb
24 29 wfjm
--                 nexys4_aif [UUT]
25
--
26
-- To test:        generic, any nexys4_aif target
27
--
28
-- Target Devices: generic
29 37 wfjm
-- Tool versions:  ise 14.5-14.7; viv 2014.4-2016.2; ghdl 0.29-0.33
30 29 wfjm
--
31
-- Revision History: 
32
-- Date         Rev Version  Comment
33 37 wfjm
-- 2016-09-02   805   1.3.4  tbcore_rlink without CLK_STOP now
34 35 wfjm
-- 2016-02-20   734   1.3.3  use s7_cmt_sfs_tb to avoid xsim conflict
35
-- 2016-02-13   730   1.3.2  direct instantiation of tbcore_rlink
36
-- 2016-01-03   724   1.3.1  use serport/tb/serport_master_tb
37 30 wfjm
-- 2015-04-12   666   1.3    use serport_master instead of serport_uart_rxtx
38 29 wfjm
-- 2015-02-06   643   1.2    factor out memory
39
-- 2015-02-01   641   1.1    separate I_BTNRST_N
40
-- 2013-09-28   535   1.0.1  use proper clock manager
41
-- 2013-09-21   534   1.0    Initial version (derived from tb_nexys3)
42
------------------------------------------------------------------------------
43
 
44
library ieee;
45
use ieee.std_logic_1164.all;
46
use ieee.numeric_std.all;
47
use ieee.std_logic_textio.all;
48
use std.textio.all;
49
 
50
use work.slvtypes.all;
51
use work.rlinklib.all;
52
use work.xlib.all;
53
use work.nexys4lib.all;
54
use work.simlib.all;
55
use work.simbus.all;
56
use work.sys_conf.all;
57
 
58
entity tb_nexys4 is
59
end tb_nexys4;
60
 
61
architecture sim of tb_nexys4 is
62
 
63
  signal CLKOSC : slbit := '0';         -- board clock (100 Mhz)
64
  signal CLKCOM : slbit := '0';         -- communication clock
65
 
66
  signal CLKCOM_CYCLE : integer := 0;
67
 
68
  signal RESET : slbit := '0';
69
  signal CLKDIV : slv2 := "00";         -- run with 1 clocks / bit !!
70
  signal RXDATA : slv8 := (others=>'0');
71
  signal RXVAL : slbit := '0';
72
  signal RXERR : slbit := '0';
73
  signal RXACT : slbit := '0';
74
  signal TXDATA : slv8 := (others=>'0');
75
  signal TXENA : slbit := '0';
76
  signal TXBUSY : slbit := '0';
77
 
78
  signal I_RXD : slbit := '1';
79
  signal O_TXD : slbit := '1';
80
  signal O_RTS_N : slbit := '0';
81
  signal I_CTS_N : slbit := '0';
82
  signal I_SWI : slv16 := (others=>'0');
83
  signal I_BTN : slv5 := (others=>'0');
84
  signal I_BTNRST_N : slbit := '1';
85
  signal O_LED : slv16 := (others=>'0');
86
  signal O_RGBLED0 : slv3 := (others=>'0');
87
  signal O_RGBLED1 : slv3 := (others=>'0');
88
  signal O_ANO_N : slv8 := (others=>'0');
89
  signal O_SEG_N : slv8 := (others=>'0');
90
 
91 30 wfjm
  signal R_PORTSEL_XON : slbit := '0';       -- if 1 use xon/xoff
92
 
93
  constant sbaddr_portsel: slv8 := slv(to_unsigned( 8,8));
94
 
95 37 wfjm
  constant clock_period : Delay_length :=  10 ns;
96
  constant clock_offset : Delay_length := 200 ns;
97 29 wfjm
 
98
begin
99
 
100
  CLKGEN : simclk
101
    generic map (
102
      PERIOD => clock_period,
103
      OFFSET => clock_offset)
104
    port map (
105 37 wfjm
      CLK      => CLKOSC
106 29 wfjm
    );
107
 
108 35 wfjm
  CLKGEN_COM : entity work.s7_cmt_sfs_tb
109 29 wfjm
    generic map (
110
      VCO_DIVIDE   => sys_conf_clkser_vcodivide,
111
      VCO_MULTIPLY => sys_conf_clkser_vcomultiply,
112
      OUT_DIVIDE   => sys_conf_clkser_outdivide,
113
      CLKIN_PERIOD => 10.0,
114
      CLKIN_JITTER => 0.01,
115
      STARTUP_WAIT => false,
116 35 wfjm
      GEN_TYPE     => sys_conf_clkser_gentype)
117 29 wfjm
    port map (
118
      CLKIN   => CLKOSC,
119
      CLKFX   => CLKCOM,
120
      LOCKED  => open
121
    );
122
 
123
  CLKCNT : simclkcnt port map (CLK => CLKCOM, CLK_CYCLE => CLKCOM_CYCLE);
124
 
125 35 wfjm
  TBCORE : entity work.tbcore_rlink
126 29 wfjm
    port map (
127
      CLK      => CLKCOM,
128
      RX_DATA  => TXDATA,
129
      RX_VAL   => TXENA,
130
      RX_HOLD  => TXBUSY,
131
      TX_DATA  => RXDATA,
132
      TX_ENA   => RXVAL
133
    );
134
 
135
  N4CORE : entity work.tb_nexys4_core
136
    port map (
137
      I_SWI       => I_SWI,
138
      I_BTN       => I_BTN,
139
      I_BTNRST_N  => I_BTNRST_N
140
    );
141
 
142
  UUT : nexys4_aif
143
    port map (
144
      I_CLK100    => CLKOSC,
145
      I_RXD       => I_RXD,
146
      O_TXD       => O_TXD,
147
      O_RTS_N     => O_RTS_N,
148
      I_CTS_N     => I_CTS_N,
149
      I_SWI       => I_SWI,
150
      I_BTN       => I_BTN,
151
      I_BTNRST_N  => I_BTNRST_N,
152
      O_LED       => O_LED,
153
      O_RGBLED0   => O_RGBLED0,
154
      O_RGBLED1   => O_RGBLED1,
155
      O_ANO_N     => O_ANO_N,
156
      O_SEG_N     => O_SEG_N
157
    );
158
 
159 35 wfjm
  SERMSTR : entity work.serport_master_tb
160 29 wfjm
    generic map (
161
      CDWIDTH => CLKDIV'length)
162
    port map (
163 30 wfjm
      CLK     => CLKCOM,
164
      RESET   => RESET,
165
      CLKDIV  => CLKDIV,
166
      ENAXON  => R_PORTSEL_XON,
167
      ENAESC  => '0',
168
      RXDATA  => RXDATA,
169
      RXVAL   => RXVAL,
170
      RXERR   => RXERR,
171
      RXOK    => '1',
172
      TXDATA  => TXDATA,
173
      TXENA   => TXENA,
174
      TXBUSY  => TXBUSY,
175
      RXSD    => O_TXD,
176
      TXSD    => I_RXD,
177
      RXRTS_N => I_CTS_N,
178
      TXCTS_N => O_RTS_N
179 29 wfjm
    );
180
 
181
  proc_moni: process
182
    variable oline : line;
183
  begin
184
 
185
    loop
186
      wait until rising_edge(CLKCOM);
187
 
188
      if RXERR = '1' then
189
        writetimestamp(oline, CLKCOM_CYCLE, " : seen RXERR=1");
190
        writeline(output, oline);
191
      end if;
192
 
193
    end loop;
194
 
195
  end process proc_moni;
196
 
197 30 wfjm
  proc_simbus: process (SB_VAL)
198
  begin
199
    if SB_VAL'event and to_x01(SB_VAL)='1' then
200
      if SB_ADDR = sbaddr_portsel then
201
        R_PORTSEL_XON <= to_x01(SB_DATA(1));
202
      end if;
203
    end if;
204
  end process proc_simbus;
205
 
206 29 wfjm
end sim;

powered by: WebSVN 2.1.0

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