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

Subversion Repositories nocem

[/] [nocem/] [trunk/] [sim/] [testbench.vhd] - Blame information for rev 2

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

Line No. Rev Author Line
1 2 schelleg
 
2
-----------------------------------------------------------------------------
3
-- NoCem -- Network on Chip Emulation Tool for System on Chip Research 
4
-- and Implementations
5
-- 
6
-- Copyright (C) 2006  Graham Schelle, Dirk Grunwald
7
-- 
8
-- This program is free software; you can redistribute it and/or
9
-- modify it under the terms of the GNU General Public License
10
-- as published by the Free Software Foundation; either version 2
11
-- of the License, or (at your option) any later version.
12
-- 
13
-- This program is distributed in the hope that it will be useful,
14
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
15
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
-- GNU General Public License for more details.
17
-- 
18
-- You should have received a copy of the GNU General Public License
19
-- along with this program; if not, write to the Free Software
20
-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
21
-- 02110-1301, USA.
22
-- 
23
-- The authors can be contacted by email: <schelleg,grunwald>@cs.colorado.edu 
24
-- 
25
-- or by mail: Campus Box 430, Department of Computer Science,
26
-- University of Colorado at Boulder, Boulder, Colorado 80309
27
-------------------------------------------------------------------------------- 
28
 
29
 
30
-- 
31
-- Filename: testbench.vhd
32
-- 
33
-- Description: 
34
-- 
35
 
36
 
37
library IEEE;
38
use IEEE.STD_LOGIC_1164.ALL;
39
use IEEE.STD_LOGIC_ARITH.ALL;
40
use IEEE.STD_LOGIC_UNSIGNED.ALL;
41
use work.pkg_nocem.all;
42
 
43
 
44
 
45
entity testbench is
46
end testbench;
47
 
48
architecture Behavioral of testbench is
49
 
50
 
51
                signal clk,rst : std_logic;
52
 
53
 
54
                -- arbitration lines (usage depends on underlying network)
55
                signal arb_req         : std_logic_vector(NOCEM_NUM_AP-1 downto 0);
56
                signal arb_cntrl_noc2proc   : arb_cntrl_array(NOCEM_NUM_AP-1 downto 0);
57
                signal arb_grant         : std_logic_vector(NOCEM_NUM_AP-1 downto 0);
58
                signal arb_cntrl_proc2noc   : arb_cntrl_array(NOCEM_NUM_AP-1 downto 0);
59
                signal noc_node_data        :   data_array(NOCEM_NUM_AP-1 downto 0);
60
                signal noc_node_data_valid  :   std_logic_vector(NOCEM_NUM_AP-1 downto 0);
61
                signal noc_node_data_recvd  :  std_logic_vector(NOCEM_NUM_AP-1 downto 0);
62
 
63
                signal node_noc_data       : data_array(NOCEM_NUM_AP-1 downto 0);
64
                signal node_noc_data_valid : std_logic_vector(NOCEM_NUM_AP-1 downto 0);
65
                signal node_noc_data_recvd :  std_logic_vector(NOCEM_NUM_AP-1 downto 0);
66
 
67
                signal noc_node_pkt_cntrl        :   pkt_cntrl_array(NOCEM_NUM_AP-1 downto 0);
68
                signal noc_node_pkt_cntrl_valid  :   std_logic_vector(NOCEM_NUM_AP-1 downto 0);
69
                signal noc_node_pkt_cntrl_recvd  :  std_logic_vector(NOCEM_NUM_AP-1 downto 0);
70
 
71
                signal node_noc_pkt_cntrl       : pkt_cntrl_array(NOCEM_NUM_AP-1 downto 0);
72
                signal node_noc_pkt_cntrl_valid : std_logic_vector(NOCEM_NUM_AP-1 downto 0);
73
                signal node_noc_pkt_cntrl_recvd :  std_logic_vector(NOCEM_NUM_AP-1 downto 0);
74
 
75
                signal test_val0,test_val1,test_val2,test_val3 : integer;
76
 
77
 
78
                type int_array  is array(natural range <>) of integer;
79
                --constant DATAOUT_INTERVAL : int_array(NOCEM_NUM_AP-1 downto 0) := (60000,60000,32,16);
80
                constant DATAOUT_INTERVAL : int_array(NOCEM_NUM_AP-1 downto 0) := (48,16,32,16);
81
 
82
begin
83
 
84
 
85
 
86
 
87
        test_val0 <= DATAOUT_INTERVAL(0);
88
        test_val1 <= DATAOUT_INTERVAL(1);
89
        test_val2 <= DATAOUT_INTERVAL(2);
90
        test_val3 <= DATAOUT_INTERVAL(3);
91
 
92
 
93
        I_noc: nocem PORT MAP(
94
                arb_req => arb_req,
95
                arb_cntrl_in => arb_cntrl_proc2noc,
96
                arb_grant => arb_grant,
97
                arb_cntrl_out => arb_cntrl_noc2proc,
98
                datain => node_noc_data,
99
                datain_valid => node_noc_data_valid,
100
                datain_recvd => noc_node_data_recvd,
101
                dataout => noc_node_data,
102
                dataout_valid => noc_node_data_valid,
103
                dataout_recvd => node_noc_data_recvd,
104
                pkt_cntrl_in => node_noc_pkt_cntrl,
105
                pkt_cntrl_in_valid => node_noc_pkt_cntrl_valid,
106
                pkt_cntrl_in_recvd => noc_node_pkt_cntrl_recvd,
107
                pkt_cntrl_out => noc_node_pkt_cntrl,
108
                pkt_cntrl_out_valid => noc_node_pkt_cntrl_valid,
109
                pkt_cntrl_out_recvd => node_noc_pkt_cntrl_recvd,
110
                clk => clk,
111
                rst => rst
112
        );
113
 
114
 
115
 
116
 
117
 
118
 
119
   g1: for I in NOCEM_NUM_AP-1 downto 0 generate
120
 
121
 
122
 
123
                g11: if NOCEM_TYPE = NOCEM_VC_TYPE generate
124
                        I_ap_ex: ap_exerciser_vc
125
 
126
                   Generic map(
127
                                DELAY_START_COUNTER_WIDTH => 8,
128
                                DELAY_START_CYCLES  => 10+I*8,
129
                                INTERVAL_COUNTER_WIDTH  => 16,
130
                                PKT_LENGTH  => 4+I,
131
                                INIT_DEST_ADDR => (I+1) mod NOCEM_NUM_AP,
132
                                MY_ADDR => I,
133
                                DATA_OUT_INTERVAL  => DATAOUT_INTERVAL(I)
134
                        )
135
 
136
                        PORT MAP(
137
                                arb_req => arb_req(I),
138
                                arb_cntrl_in => arb_cntrl_noc2proc(I),
139
                                arb_grant => arb_grant(I),
140
                                arb_cntrl_out => arb_cntrl_proc2noc(I),
141
                                dataout => node_noc_data(I),
142
                                dataout_valid => node_noc_data_valid(I),
143
                                dataout_recvd => noc_node_data_recvd(I),
144
                                datain => noc_node_data(I),
145
                                datain_valid => noc_node_data_valid(I),
146
                                datain_recvd => node_noc_data_recvd(I),
147
                                pkt_cntrl_out => node_noc_pkt_cntrl(I),
148
                                pkt_cntrl_out_valid => node_noc_pkt_cntrl_valid(I),
149
                                pkt_cntrl_out_recvd => noc_node_pkt_cntrl_recvd(I),
150
                                pkt_cntrl_in => noc_node_pkt_cntrl(I),
151
                                pkt_cntrl_in_valid => noc_node_pkt_cntrl_valid(I),
152
                                pkt_cntrl_in_recvd => node_noc_pkt_cntrl_recvd(I),
153
                                clk => clk,
154
                                rst => rst
155
                        );
156
                end generate;
157
 
158
                g12: if NOCEM_TYPE = NOCEM_SIMPLE_PKT_TYPE generate
159
 
160
                        I_ap_ex: access_point_exerciser
161
 
162
                   Generic map(
163
                                DELAY_START_COUNTER_WIDTH => 8,
164
                                DELAY_START_CYCLES  => 10+I*8,
165
                                INIT_DATA_OUT  => CONV_STD_LOGIC_VECTOR(I+1+2**I,NOCEM_DW),
166
                                INTERVAL_COUNTER_WIDTH  => 16,
167
                                BURST_LENGTH  => 1,
168
                                INIT_DEST_ADDR => (I+1) mod NOCEM_NUM_AP,
169
 
170
                                DATA_OUT_INTERVAL  => 15
171
                        )
172
 
173
                        PORT MAP(
174
                                arb_req => arb_req(I),
175
                                arb_cntrl_in => arb_cntrl_noc2proc(I),
176
                                arb_grant => arb_grant(I),
177
                                arb_cntrl_out => arb_cntrl_proc2noc(I),
178
                                dataout => node_noc_data(I),
179
                                dataout_valid => node_noc_data_valid(I),
180
                                dataout_recvd => noc_node_data_recvd(I),
181
                                datain => noc_node_data(I),
182
                                datain_valid => noc_node_data_valid(I),
183
                                datain_recvd => node_noc_data_recvd(I),
184
                                pkt_cntrl_out => node_noc_pkt_cntrl(I),
185
                                pkt_cntrl_out_valid => node_noc_pkt_cntrl_valid(I),
186
                                pkt_cntrl_out_recvd => noc_node_pkt_cntrl_recvd(I),
187
                                pkt_cntrl_in => noc_node_pkt_cntrl(I),
188
                                pkt_cntrl_in_valid => noc_node_pkt_cntrl_valid(I),
189
                                pkt_cntrl_in_recvd => node_noc_pkt_cntrl_recvd(I),
190
                                clk => clk,
191
                                rst => rst
192
                        );
193
                end generate;
194
        end generate;
195
 
196
 
197
 
198
 
199
  P_STIMULUS: process
200
  begin  -- process P_STIMULUS
201
    rst <= '1';
202
    wait for 250 ns;
203
    rst <= '0';
204
        wait for 1000 ms;               -- forever!
205
  end process P_STIMULUS;
206
 
207
p_clk : process                    -- drives clk 
208
  begin
209
    clk <= '0';
210
    wait for 2 ns;
211
    loop
212
      wait for 4 ns;
213
      clk <= '1';
214
      wait for 4 ns;
215
      clk <= '0';
216
    end loop;
217
  end process p_clk;
218
 
219
 
220
 
221
end Behavioral;

powered by: WebSVN 2.1.0

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