summaryrefslogtreecommitdiffstats
path: root/zpu/hdl/zealot/fpga/avnet-eval-xc5vfx30t/top_tb.vhd
blob: 751ce225679be0c53288dfa7f13bd140800a428d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
-- testbench for
-- Avnet Virtex 5 FX Evaluation Board
--
-- includes "model" for clock generation
-- simulate press on gpio_button(0) (=PB1) as reset
--
-- place models for external components (PHY, DDR2-RAM) in this file
--


library ieee;
use ieee.std_logic_1164.all;


entity top_tb is
end entity top_tb;

architecture testbench of top_tb is

    ---------------------------
    -- constant declarations
    constant clk_100MHz_period  : time := 1 sec / 100_000_000;  -- 100 MHz


    ---------------------------
    -- signal declarations
    signal simulation_run         : boolean   := true;
    signal tb_stop_simulation     : std_logic;
    --
    signal tb_clk_100MHz          : std_logic := '0';  -- 100 MHz clock
    signal tb_clk_socket          : std_logic := '0';  -- user clock
    signal tb_user_clk_p          : std_logic := '0';  -- diff user clock
    signal tb_user_clk_n          : std_logic := '0';  -- diff user clock
    --                                         
    --  RS232                                  
    signal tb_rs232_rx            : std_logic := '0';
    signal tb_rs232_tx            : std_logic;
    signal tb_rs232_rts           : std_logic := '0';
    signal tb_rs232_cts           : std_logic;
    --  RS232 USB                              
    signal tb_rs232_usb_rx        : std_logic := '0';
    signal tb_rs232_usb_tx        : std_logic;
    signal tb_rs232_usb_reset_n   : std_logic;
    --
    signal tb_gpio_led_n          : std_logic_vector(7 downto 0);
    signal tb_gpio_dipswitch      : std_logic_vector(7 downto 0) := (others => '0');
    signal tb_gpio_button         : std_logic_vector(3 downto 0) := (others => '0');
    --
    --  FLASH 8Mx16 
    signal tb_flash_a             : std_logic_vector(31 downto 7);
    signal tb_flash_dq            : std_logic_vector(15 downto 0);
    signal tb_flash_wen           : std_logic;
    signal tb_flash_oen           : std_logic_vector(0 downto 0);
    signal tb_flash_cen           : std_logic_vector(0 downto 0);
    signal tb_flash_rp_n          : std_logic;
    signal tb_flash_byte_n        : std_logic;
    signal tb_flash_adv_n         : std_logic;
    signal tb_flash_clk           : std_logic;
    signal tb_flash_wait          : std_logic := '0';
    --
    --  DDR2 SDRAM 16Mx32 
    signal tb_ddr2_odt            : std_logic_vector(0 downto 0) := (others => '0');
    signal tb_ddr2_a              : std_logic_vector(12 downto 0);
    signal tb_ddr2_ba             : std_logic_vector(1 downto 0);
    signal tb_ddr2_cas_n          : std_logic;
    signal tb_ddr2_cke            : std_logic;
    signal tb_ddr2_cs_n           : std_logic;
    signal tb_ddr2_ras_n          : std_logic;
    signal tb_ddr2_we_n           : std_logic;
    signal tb_ddr2_dm             : std_logic_vector(3 downto 0);
    signal tb_ddr2_dqs_p          : std_logic_vector(3 downto 0);
    signal tb_ddr2_dqs_n          : std_logic_vector(3 downto 0);
    signal tb_ddr2_dq             : std_logic_vector(31 downto 0);
    signal tb_ddr2_ck_p           : std_logic_vector(1 downto 0) := (others => '0');
    signal tb_ddr2_ck_n           : std_logic_vector(1 downto 0) := (others => '0');
    --
    --  Ethernet MAC 
    signal tb_gmii_txer           : std_logic;
    signal tb_gmii_tx_clk         : std_logic := '0';  -- 25 MHz
    signal tb_gmii_rx_clk         : std_logic := '0';  -- 25 MHz
    signal tb_gmii_gtc_clk        : std_logic;
    signal tb_gmii_crs            : std_logic := '0';
    signal tb_gmii_dv             : std_logic := '0';
    signal tb_gmii_rx_data        : std_logic_vector(7 downto 0);
    signal tb_gmii_col            : std_logic := '0';
    signal tb_gmii_rx_er          : std_logic := '0';
    signal tb_gmii_tx_en          : std_logic;
    signal tb_gmii_tx_data        : std_logic_vector(7 downto 0);
    signal tb_gbe_rst_n           : std_logic;
    signal tb_gbe_mdc             : std_logic;
    signal tb_gbe_mdio            : std_logic;
    signal tb_gbe_int_n           : std_logic;
    signal tb_gbe_mclk            : std_logic := '0';
    --
    --  SysACE CompactFlash 
    signal tb_sam_clk             : std_logic := '0';
    signal tb_sam_a               : std_logic_vector(6 downto 0);
    signal tb_sam_d               : std_logic_vector(15 downto 0);
    signal tb_sam_cen             : std_logic;
    signal tb_sam_oen             : std_logic;
    signal tb_sam_wen             : std_logic;
    signal tb_sam_mpirq           : std_logic := '0';
    signal tb_sam_brdy            : std_logic := '0';
    signal tb_sam_reset_n         : std_logic;
    --
    --  Expansion Header
    signal tb_exp1_se_io          : std_logic_vector(33 downto 0);
    signal tb_exp1_diff_p         : std_logic_vector(21 downto 0);
    signal tb_exp1_diff_n         : std_logic_vector(21 downto 0);
    signal tb_exp1_se_clk_out     : std_logic;
    signal tb_exp1_se_clk_in      : std_logic := '0';
    signal tb_exp1_diff_clk_out_p : std_logic;
    signal tb_exp1_diff_clk_out_n : std_logic;
    signal tb_exp1_diff_clk_in_p  : std_logic := '0';
    signal tb_exp1_diff_clk_in_n  : std_logic := '0';
    --
    -- Debug/Trace
    signal tb_atdd                : std_logic_vector(19 downto 8);
    signal tb_trace_ts10          : std_logic;
    signal tb_trace_ts20          : std_logic;
    signal tb_trace_ts1e          : std_logic;
    signal tb_trace_ts2e          : std_logic;
    signal tb_trace_ts3           : std_logic;
    signal tb_trace_ts4           : std_logic;
    signal tb_trace_ts5           : std_logic;
    signal tb_trace_ts6           : std_logic;
    signal tb_trace_clk           : std_logic := '0';
    signal tb_cpu_hreset          : std_logic := '0';
    signal tb_cpu_tdo             : std_logic;
    signal tb_cpu_tms             : std_logic := '0';
    signal tb_cpu_tdi             : std_logic := '0';
    signal tb_cpu_trst            : std_logic := '0';
    signal tb_cpu_tck             : std_logic := '0';
    signal tb_cpu_halt_n          : std_logic := '0';


begin


    -- generate clocks
    tb_clk_100MHz <= not tb_clk_100MHz after clk_100MHz_period / 2 when simulation_run;

    -- generate reset
    tb_gpio_button(0) <= '1', '0' after 6.66 * clk_100MHz_period;


    -- simulate keypress
    tb_gpio_button(2) <= '0', '1' after 55 us, '0' after 56 us;

    -- dut
    top_i0 : entity work.top
        port map (
            stop_simulation => tb_stop_simulation,  -- : out   std_logic;
            clk_100MHz          => tb_clk_100MHz,           -- : in    std_logic;
            clk_socket          => tb_clk_socket,           -- : in    std_logic;
            user_clk_p          => tb_user_clk_p,           -- : in    std_logic;
            user_clk_n          => tb_user_clk_n,           -- : in    std_logic;
            --                                         
            --  RS232                                  
            rs232_rx            => tb_rs232_rx,             -- : in    std_logic;
            rs232_tx            => tb_rs232_tx,             -- : out   std_logic;
            rs232_rts           => tb_rs232_rts,            -- : in    std_logic;
            rs232_cts           => tb_rs232_cts,            -- : out   std_logic;
            --  RS232 USB                              
            rs232_usb_rx        => tb_rs232_usb_rx,         -- : in    std_logic;
            rs232_usb_tx        => tb_rs232_usb_tx,         -- : out   std_logic;
            rs232_usb_reset_n   => tb_rs232_usb_reset_n,    -- : out   std_logic;
            --                                              
            gpio_led_n          => tb_gpio_led_n,           -- : out   std_logic_vector(7 downto 0);
            gpio_dipswitch      => tb_gpio_dipswitch,       -- : in    std_logic_vector(7 downto 0);
            gpio_button         => tb_gpio_button,          -- : in    std_logic_vector(3 downto 0);
            --
            --  FLASH 8Mx16 
            flash_a             => tb_flash_a,              -- : out   std_logic_vector(31 downto 7);
            flash_dq            => tb_flash_dq,             -- : inout std_logic_vector(15 downto 0);
            flash_wen           => tb_flash_wen,            -- : out   std_logic;
            flash_oen           => tb_flash_oen,            -- : out   std_logic_vector(0 downto 0);
            flash_cen           => tb_flash_cen,            -- : out   std_logic_vector(0 downto 0);
            flash_rp_n          => tb_flash_rp_n,           -- : out   std_logic;
            flash_byte_n        => tb_flash_byte_n,         -- : out   std_logic;
            flash_adv_n         => tb_flash_adv_n,          -- : out   std_logic;
            flash_clk           => tb_flash_clk,            -- : out   std_logic;
            flash_wait          => tb_flash_wait,           -- : in    std_logic;
            --
            --  DDR2 SDRAM 16Mx32 
            ddr2_odt            => tb_ddr2_odt,             -- : in    std_logic_vector(0 downto 0);
            ddr2_a              => tb_ddr2_a,               -- : out   std_logic_vector(12 downto 0);
            ddr2_ba             => tb_ddr2_ba,              -- : out   std_logic_vector(1 downto 0);
            ddr2_cas_n          => tb_ddr2_cas_n,           -- : out   std_logic;
            ddr2_cke            => tb_ddr2_cke,             -- : out   std_logic;
            ddr2_cs_n           => tb_ddr2_cs_n,            -- : out   std_logic;
            ddr2_ras_n          => tb_ddr2_ras_n,           -- : out   std_logic;
            ddr2_we_n           => tb_ddr2_we_n,            -- : out   std_logic;
            ddr2_dm             => tb_ddr2_dm,              -- : out   std_logic_vector(3 downto 0);
            ddr2_dqs_p          => tb_ddr2_dqs_p,           -- : inout std_logic_vector(3 downto 0);
            ddr2_dqs_n          => tb_ddr2_dqs_n,           -- : inout std_logic_vector(3 downto 0);
            ddr2_dq             => tb_ddr2_dq,              -- : inout std_logic_vector(31 downto 0);
            ddr2_ck_p           => tb_ddr2_ck_p,            -- : in    std_logic_vector(1 downto 0);
            ddr2_ck_n           => tb_ddr2_ck_n,            -- : in    std_logic_vector(1 downto 0);
            --
            --  Ethernet MAC 
            gmii_txer           => tb_gmii_txer,            -- : out   std_logic;
            gmii_tx_clk         => tb_gmii_tx_clk,          -- : in    std_logic;
            gmii_rx_clk         => tb_gmii_rx_clk,          -- : in    std_logic;
            gmii_gtc_clk        => tb_gmii_gtc_clk,         -- : out   std_logic;
            gmii_crs            => tb_gmii_crs,             -- : in    std_logic;
            gmii_dv             => tb_gmii_dv,              -- : in    std_logic;
            gmii_rx_data        => tb_gmii_rx_data,         -- : in    std_logic_vector(7 downto 0);
            gmii_col            => tb_gmii_col,             -- : in    std_logic;
            gmii_rx_er          => tb_gmii_rx_er,           -- : in    std_logic;
            gmii_tx_en          => tb_gmii_tx_en,           -- : out   std_logic;
            gmii_tx_data        => tb_gmii_tx_data,         -- : out   std_logic_vector(7 downto 0);
            gbe_rst_n           => tb_gbe_rst_n,            -- : out   std_logic;
            gbe_mdc             => tb_gbe_mdc,              -- : out   std_logic;
            gbe_mdio            => tb_gbe_mdio,             -- : inout std_logic;
            gbe_int_n           => tb_gbe_int_n,            -- : inout std_logic;
            gbe_mclk            => tb_gbe_mclk,             -- : in    std_logic;
            --
            --  SysACE CompactFlash 
            sam_clk             => tb_sam_clk,              -- : in    std_logic;
            sam_a               => tb_sam_a,                -- : out   std_logic_vector(6 downto 0);
            sam_d               => tb_sam_d,                -- : inout std_logic_vector(15 downto 0);
            sam_cen             => tb_sam_cen,              -- : out   std_logic;
            sam_oen             => tb_sam_oen,              -- : out   std_logic;
            sam_wen             => tb_sam_wen,              -- : out   std_logic;
            sam_mpirq           => tb_sam_mpirq,            -- : in    std_logic;
            sam_brdy            => tb_sam_brdy,             -- : in    std_logic;
            sam_reset_n         => tb_sam_reset_n,          -- : out   std_logic;
            --
            --  Expansion Header
            exp1_se_io          => tb_exp1_se_io,           -- : inout std_logic_vector(33 downto 0);
            exp1_diff_p         => tb_exp1_diff_p,          -- : inout std_logic_vector(21 downto 0);
            exp1_diff_n         => tb_exp1_diff_n,          -- : inout std_logic_vector(21 downto 0);
            exp1_se_clk_out     => tb_exp1_se_clk_out,      -- : out   std_logic;
            exp1_se_clk_in      => tb_exp1_se_clk_in,       -- : in    std_logic;
            exp1_diff_clk_out_p => tb_exp1_diff_clk_out_p,  -- : out   std_logic;
            exp1_diff_clk_out_n => tb_exp1_diff_clk_out_n,  -- : out   std_logic;
            exp1_diff_clk_in_p  => tb_exp1_diff_clk_in_p,   -- : in    std_logic;
            exp1_diff_clk_in_n  => tb_exp1_diff_clk_in_n,   -- : in    std_logic;
            --
            -- Debug/Trace
            atdd                => tb_atdd,                 -- : inout std_logic_vector(19 downto 8);
            trace_ts10          => tb_trace_ts10,           -- : inout std_logic;
            trace_ts20          => tb_trace_ts20,           -- : inout std_logic;
            trace_ts1e          => tb_trace_ts1e,           -- : inout std_logic;
            trace_ts2e          => tb_trace_ts2e,           -- : inout std_logic;
            trace_ts3           => tb_trace_ts3,            -- : inout std_logic;
            trace_ts4           => tb_trace_ts4,            -- : inout std_logic;
            trace_ts5           => tb_trace_ts5,            -- : inout std_logic;
            trace_ts6           => tb_trace_ts6,            -- : inout std_logic;
            trace_clk           => tb_trace_clk,            -- : in    std_logic;
            cpu_hreset          => tb_cpu_hreset,           -- : in    std_logic;
            cpu_tdo             => tb_cpu_tdo,              -- : out   std_logic;
            cpu_tms             => tb_cpu_tms,              -- : in    std_logic;
            cpu_tdi             => tb_cpu_tdi,              -- : in    std_logic;
            cpu_trst            => tb_cpu_trst,             -- : in    std_logic;
            cpu_tck             => tb_cpu_tck,              -- : in    std_logic;
            cpu_halt_n          => tb_cpu_halt_n            -- : in    std_logic
    );


    -- check for simulation stopping
    process (tb_stop_simulation)
    begin
        if tb_stop_simulation = '1' then
            report "Simulation end." severity note;
            simulation_run <= false;
        end if;
    end process;

end architecture testbench;
OpenPOWER on IntegriCloud