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

Subversion Repositories nocem

[/] [nocem/] [trunk/] [sim/] [testbench.vhd] - Rev 2

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

 
-----------------------------------------------------------------------------
-- NoCem -- Network on Chip Emulation Tool for System on Chip Research 
-- and Implementations
-- 
-- Copyright (C) 2006  Graham Schelle, Dirk Grunwald
-- 
-- This program is free software; you can redistribute it and/or
-- modify it under the terms of the GNU General Public License
-- as published by the Free Software Foundation; either version 2
-- of the License, or (at your option) any later version.
-- 
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
-- 
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to the Free Software
-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
-- 02110-1301, USA.
-- 
-- The authors can be contacted by email: <schelleg,grunwald>@cs.colorado.edu 
-- 
-- or by mail: Campus Box 430, Department of Computer Science,
-- University of Colorado at Boulder, Boulder, Colorado 80309
-------------------------------------------------------------------------------- 
 
 
-- 
-- Filename: testbench.vhd
-- 
-- Description: 
-- 
 
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use work.pkg_nocem.all;
 
 
 
entity testbench is
end testbench;
 
architecture Behavioral of testbench is
 
 
		signal clk,rst : std_logic;
 
 
		-- arbitration lines (usage depends on underlying network)
		signal arb_req         : std_logic_vector(NOCEM_NUM_AP-1 downto 0);
		signal arb_cntrl_noc2proc   : arb_cntrl_array(NOCEM_NUM_AP-1 downto 0);
		signal arb_grant         : std_logic_vector(NOCEM_NUM_AP-1 downto 0);
		signal arb_cntrl_proc2noc   : arb_cntrl_array(NOCEM_NUM_AP-1 downto 0);
		signal noc_node_data        :   data_array(NOCEM_NUM_AP-1 downto 0);
		signal noc_node_data_valid  :   std_logic_vector(NOCEM_NUM_AP-1 downto 0);
		signal noc_node_data_recvd  :  std_logic_vector(NOCEM_NUM_AP-1 downto 0);
 
		signal node_noc_data       : data_array(NOCEM_NUM_AP-1 downto 0);
		signal node_noc_data_valid : std_logic_vector(NOCEM_NUM_AP-1 downto 0);
		signal node_noc_data_recvd :  std_logic_vector(NOCEM_NUM_AP-1 downto 0);
 
		signal noc_node_pkt_cntrl        :   pkt_cntrl_array(NOCEM_NUM_AP-1 downto 0);
		signal noc_node_pkt_cntrl_valid  :   std_logic_vector(NOCEM_NUM_AP-1 downto 0);
		signal noc_node_pkt_cntrl_recvd  :  std_logic_vector(NOCEM_NUM_AP-1 downto 0);      
 
		signal node_noc_pkt_cntrl       : pkt_cntrl_array(NOCEM_NUM_AP-1 downto 0);
		signal node_noc_pkt_cntrl_valid : std_logic_vector(NOCEM_NUM_AP-1 downto 0);
		signal node_noc_pkt_cntrl_recvd :  std_logic_vector(NOCEM_NUM_AP-1 downto 0);
 
		signal test_val0,test_val1,test_val2,test_val3 : integer;
 
 
		type int_array  is array(natural range <>) of integer;
		--constant DATAOUT_INTERVAL : int_array(NOCEM_NUM_AP-1 downto 0) := (60000,60000,32,16);
		constant DATAOUT_INTERVAL : int_array(NOCEM_NUM_AP-1 downto 0) := (48,16,32,16);
 
begin
 
 
 
 
	test_val0 <= DATAOUT_INTERVAL(0);
	test_val1 <= DATAOUT_INTERVAL(1);
	test_val2 <= DATAOUT_INTERVAL(2);
	test_val3 <= DATAOUT_INTERVAL(3);
 
 
	I_noc: nocem PORT MAP(
		arb_req => arb_req,
		arb_cntrl_in => arb_cntrl_proc2noc,
		arb_grant => arb_grant,
		arb_cntrl_out => arb_cntrl_noc2proc,
		datain => node_noc_data,
		datain_valid => node_noc_data_valid,
		datain_recvd => noc_node_data_recvd,
		dataout => noc_node_data,
		dataout_valid => noc_node_data_valid,
		dataout_recvd => node_noc_data_recvd,
		pkt_cntrl_in => node_noc_pkt_cntrl,
		pkt_cntrl_in_valid => node_noc_pkt_cntrl_valid,
		pkt_cntrl_in_recvd => noc_node_pkt_cntrl_recvd,
		pkt_cntrl_out => noc_node_pkt_cntrl,
		pkt_cntrl_out_valid => noc_node_pkt_cntrl_valid,
		pkt_cntrl_out_recvd => node_noc_pkt_cntrl_recvd,
		clk => clk,
		rst => rst
	);
 
 
 
 
 
 
   g1: for I in NOCEM_NUM_AP-1 downto 0 generate
 
 
 
		g11: if NOCEM_TYPE = NOCEM_VC_TYPE generate
			I_ap_ex: ap_exerciser_vc 
 
		   Generic map(
				DELAY_START_COUNTER_WIDTH => 8,
				DELAY_START_CYCLES  => 10+I*8,
				INTERVAL_COUNTER_WIDTH  => 16,
				PKT_LENGTH  => 4+I,
				INIT_DEST_ADDR => (I+1) mod NOCEM_NUM_AP,
				MY_ADDR => I,
				DATA_OUT_INTERVAL  => DATAOUT_INTERVAL(I)
			)		
 
			PORT MAP(
				arb_req => arb_req(I),
				arb_cntrl_in => arb_cntrl_noc2proc(I),
				arb_grant => arb_grant(I),
				arb_cntrl_out => arb_cntrl_proc2noc(I),
				dataout => node_noc_data(I),
				dataout_valid => node_noc_data_valid(I),
				dataout_recvd => noc_node_data_recvd(I),
				datain => noc_node_data(I),
				datain_valid => noc_node_data_valid(I),
				datain_recvd => node_noc_data_recvd(I),
				pkt_cntrl_out => node_noc_pkt_cntrl(I),
				pkt_cntrl_out_valid => node_noc_pkt_cntrl_valid(I),
				pkt_cntrl_out_recvd => noc_node_pkt_cntrl_recvd(I),
				pkt_cntrl_in => noc_node_pkt_cntrl(I),
				pkt_cntrl_in_valid => noc_node_pkt_cntrl_valid(I),
				pkt_cntrl_in_recvd => node_noc_pkt_cntrl_recvd(I),
				clk => clk,
				rst => rst
			);		
		end generate;
 
		g12: if NOCEM_TYPE = NOCEM_SIMPLE_PKT_TYPE generate		
 
			I_ap_ex: access_point_exerciser 
 
		   Generic map(
				DELAY_START_COUNTER_WIDTH => 8,
				DELAY_START_CYCLES  => 10+I*8,
				INIT_DATA_OUT  => CONV_STD_LOGIC_VECTOR(I+1+2**I,NOCEM_DW),
				INTERVAL_COUNTER_WIDTH  => 16,
				BURST_LENGTH  => 1,
				INIT_DEST_ADDR => (I+1) mod NOCEM_NUM_AP,
 
				DATA_OUT_INTERVAL  => 15
			)		
 
			PORT MAP(
				arb_req => arb_req(I),
				arb_cntrl_in => arb_cntrl_noc2proc(I),
				arb_grant => arb_grant(I),
				arb_cntrl_out => arb_cntrl_proc2noc(I),
				dataout => node_noc_data(I),
				dataout_valid => node_noc_data_valid(I),
				dataout_recvd => noc_node_data_recvd(I),
				datain => noc_node_data(I),
				datain_valid => noc_node_data_valid(I),
				datain_recvd => node_noc_data_recvd(I),
				pkt_cntrl_out => node_noc_pkt_cntrl(I),
				pkt_cntrl_out_valid => node_noc_pkt_cntrl_valid(I),
				pkt_cntrl_out_recvd => noc_node_pkt_cntrl_recvd(I),
				pkt_cntrl_in => noc_node_pkt_cntrl(I),
				pkt_cntrl_in_valid => noc_node_pkt_cntrl_valid(I),
				pkt_cntrl_in_recvd => node_noc_pkt_cntrl_recvd(I),
				clk => clk,
				rst => rst
			);
		end generate;
	end generate;
 
 
 
 
  P_STIMULUS: process
  begin  -- process P_STIMULUS
    rst <= '1';
    wait for 250 ns;
    rst <= '0';
	wait for 1000 ms;               -- forever!
  end process P_STIMULUS;
 
p_clk : process                    -- drives clk 
  begin
    clk <= '0';
    wait for 2 ns;
    loop
      wait for 4 ns;
      clk <= '1';
      wait for 4 ns;
      clk <= '0';
    end loop;
  end process p_clk;
 
 
 
end Behavioral;
 

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

powered by: WebSVN 2.1.0

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