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

Subversion Repositories socwire

[/] [socwire/] [trunk/] [Testbench/] [switch_tb.vhd] - Diff between revs 13 and 18

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 13 Rev 18
Line 1... Line 1...
 
---====================== Start Copyright Notice ========================---
 
--==                                                                    ==--
 
--== Filename ..... switch_tb.vhd                                       ==--
 
--== Download ..... http://www.ida.ing.tu-bs.de                         ==--
 
--== Company ...... IDA TU Braunschweig, Prof. Dr.-Ing. Harald Michalik ==--
 
--== Authors ...... Björn Osterloh                                      ==--
 
--== Contact ...... Björn Osterloh (b.osterloh@tu-bs.de)                ==--
 
--== Copyright .... Copyright (c) 2008 IDA                              ==--
 
--== Project ...... SoCWire Switch Testbench                            ==--
 
--== Version ...... 1.00                                                ==--
 
--== Conception ... 22 April 2009                                       ==--
 
--== Modified ..... N/A                                                 ==--
 
--==                                                                    ==--
 
---======================= End Copyright Notice =========================---
 
 
 
LIBRARY ieee;
 
USE ieee.std_logic_1164.ALL;
 
USE ieee.std_logic_unsigned.all;
 
USE ieee.numeric_std.ALL;
 
 
 
USE WORK.ALL;
 
 
 
 
 
ENTITY switch_tb IS
 
  GENERIC(
 
          --== Number Of Ports ==--
 
          nports     : NATURAL RANGE 2 TO 32 := 4;
 
          --== Set Codec Speed to system clock in nanoseconds! ==--
 
                    --== DO NOT CHANGE THE GENERICS IN THE SUB MODULES!! ==--          
 
         datawidth            : NATURAL RANGE 8 TO 8192:=8;
 
         speed                      : NATURAL RANGE 1 TO 100:=10;               -- Set CODEC speed to system clock in nanoseconds !
 
         after64              : NATURAL RANGE 1 TO 6400:=64;   -- Spacewire Standard 6400 = 6.4 us
 
         after128             : NATURAL RANGE 1 TO 12800:=128; -- Spacewire Standard 12800 = 12.8 us                              
 
              disconnect_detection : NATURAL RANGE 1 TO 850:=85     -- Spacewire Standard 850 = 850 ns
 
         );
 
END switch_tb;
 
 
 
ARCHITECTURE behavior OF switch_tb IS
 
 
 
COMPONENT socwire_switch IS
 
  GENERIC(
 
          datawidth : NATURAL RANGE 8 TO 8192;
 
          nports     : NATURAL RANGE 2 TO 32;
 
          speed : NATURAL RANGE  1 TO 100
 
         );
 
  PORT(
 
       --==  General Interface (Sync Rst, 50MHz Clock) ==--
 
 
 
       rst        : IN  STD_LOGIC;
 
       clk        : IN  STD_LOGIC;
 
 
 
       --== Serial Receive Interface ==--
 
 
 
       rx         : IN  STD_LOGIC_VECTOR((datawidth+2)*nports-1 DOWNTO 0);
 
       rx_valid   : IN  STD_LOGIC_VECTOR(nports-1 DOWNTO 0);
 
 
 
       --== Serial Transmit Interface ==--
 
 
 
       tx         : OUT STD_LOGIC_VECTOR((datawidth+2)*nports-1 DOWNTO 0);
 
       tx_valid   : OUT STD_LOGIC_VECTOR(nports-1 DOWNTO 0);
 
 
 
       --== Active Interface ==--
 
 
 
       active     : OUT STD_LOGIC_VECTOR(nports-1 DOWNTO 0)
 
      );
 
END COMPONENT;
 
 
 
 
 
COMPONENT socwire_codec
 
  GENERIC(
 
         datawidth            : NATURAL RANGE 8 TO 8192;
 
         speed                      : NATURAL RANGE 1 TO 100;
 
         after64              : NATURAL RANGE 1 TO 6400;
 
         after128             : NATURAL RANGE 1 TO 12800;
 
              disconnect_detection : NATURAL RANGE 1 TO 850
 
         );
 
 
 
        PORT(
 
                rst : IN std_logic;
 
                clk : IN std_logic;
 
                socw_en : IN std_logic;
 
                socw_dis : IN std_logic;
 
                rx : IN std_logic_vector(datawidth+1 downto 0);
 
                rx_valid : IN std_logic;
 
                dat_nwrite : IN std_logic;
 
                dat_din : IN std_logic_vector(datawidth downto 0);
 
                dat_nread : IN std_logic;
 
                tx : OUT std_logic_vector(datawidth+1 downto 0);
 
                tx_valid : OUT std_logic;
 
                dat_full : OUT std_logic;
 
                dat_empty : OUT std_logic;
 
                dat_dout : OUT std_logic_vector(datawidth downto 0);
 
                active : OUT std_logic
 
                );
 
        END COMPONENT;
 
 
 
 
 
 
 
 
 
SIGNAL rst :   STD_LOGIC;
 
SIGNAL clk :   STD_LOGIC:= '0';
 
 
 
SIGNAL rx         : STD_LOGIC_VECTOR((datawidth+2)*nports-1 DOWNTO 0);
 
SIGNAL rx_valid   : STD_LOGIC_VECTOR(nports-1 DOWNTO 0);
 
SIGNAL tx         : STD_LOGIC_VECTOR((datawidth+2)*nports-1 DOWNTO 0);
 
SIGNAL tx_valid   : STD_LOGIC_VECTOR(nports-1 DOWNTO 0);
 
SIGNAL active_i   : STD_LOGIC_VECTOR(nports-1 DOWNTO 0);
 
SIGNAL active_ii  : STD_LOGIC_VECTOR(nports-1 DOWNTO 0);
 
 
 
SIGNAL socw_en     : STD_LOGIC;
 
SIGNAL socw_dis    : STD_LOGIC;
 
 
 
SIGNAL dat_full   : STD_LOGIC_VECTOR(nports-1 DOWNTO 0);
 
SIGNAL dat_nwrite : STD_LOGIC_VECTOR(nports-1 DOWNTO 0);
 
SIGNAL dat_din    : STD_LOGIC_VECTOR((datawidth+1)*nports-1 DOWNTO 0);
 
SIGNAL dat_nread  : STD_LOGIC_VECTOR(nports-1 DOWNTO 0);
 
SIGNAL dat_empty  : STD_LOGIC_VECTOR(nports-1 DOWNTO 0);
 
SIGNAL dat_dout   : STD_LOGIC_VECTOR((datawidth+1)*nports-1 DOWNTO 0);
 
 
 
SIGNAL dat_nwrite_P0 : STD_LOGIC;
 
SIGNAL dat_nwrite_P1 : STD_LOGIC;
 
SIGNAL dat_nwrite_P2 : STD_LOGIC;
 
SIGNAL dat_nwrite_P3 : STD_LOGIC;
 
SIGNAL dat_din_P0 : STD_LOGIC_VECTOR (datawidth downto 0);
 
SIGNAL dat_din_P1 : STD_LOGIC_VECTOR (datawidth downto 0);
 
SIGNAL dat_din_P2 : STD_LOGIC_VECTOR (datawidth downto 0);
 
SIGNAL dat_din_P3 : STD_LOGIC_VECTOR (datawidth downto 0);
 
 
 
 
 
 
 
BEGIN
 
 
 
        -- Component Declaration for the Unit Under Test (UUT)
 
 
 
  U0 : socwire_switch
 
    GENERIC MAP
 
      (
 
       datawidth =>datawidth,
 
       nports    => nports,
 
       speed      => speed
 
      )
 
    PORT MAP
 
      (--==  General Interface (Sync Rst) ==--
 
       clk      => clk,
 
       rst      => rst,
 
       rx       => tx,
 
       rx_valid => tx_valid,
 
       tx       => rx,
 
       tx_valid => rx_valid,
 
       active   => active_i
 
      );
 
 
 
  G0 : FOR i IN 0 TO nports-1 GENERATE
 
    U1 : socwire_codec
 
      GENERIC MAP
 
        (
 
         datawidth            =>datawidth,
 
         speed                      =>speed,
 
         after64              =>after64,
 
         after128             =>after128,
 
              disconnect_detection =>disconnect_detection
 
        )
 
      PORT MAP
 
        (--==  General Interface (Sync Rst, 50MHz Clock) ==--
 
         rst        => rst,
 
         clk        => clk,
 
         --== Link Enable Interface ==--
 
         socw_en     => socw_en,
 
         socw_dis    => socw_dis,
 
         --== Serial Receive Interface ==--
 
         rx         => rx((i+1)*10-1 DOWNTO i*10),
 
         rx_valid   => rx_valid(i),
 
         --== Serial Transmit Interface ==--
 
         tx         => tx((i+1)*10-1 DOWNTO i*10),
 
                 tx_valid   => tx_valid(i),
 
         --== Data Input Interface ==--
 
         dat_full   => dat_full(i),
 
         dat_nwrite => dat_nwrite(i),
 
         dat_din    => dat_din((i+1)*9-1 DOWNTO i*9),
 
         --== Data Output Interface ==--
 
         dat_nread  => dat_nread(i),
 
         dat_empty  => dat_empty(i),
 
         dat_dout   => dat_dout((i+1)*9-1 DOWNTO i*9),
 
         --== Active Interface ==--
 
         active     => active_ii(i)
 
        );
 
  END GENERATE G0;
 
 
 
    socw_en  <= '1';
 
    socw_dis <= '0';
 
 
 
 
 
        clk <= not clk after 5 ns;
 
 
 
        dat_nwrite(0)<=dat_nwrite_P0;
 
        dat_nwrite(1)<=dat_nwrite_P1;
 
        dat_nwrite(2)<=dat_nwrite_P2;
 
        dat_nwrite(3)<=dat_nwrite_P3;
 
        dat_din(8 downto 0)  <=dat_din_P0;
 
        dat_din(17 downto 9) <=dat_din_P1;
 
        dat_din(26 downto 18)<=dat_din_P2;
 
        dat_din(35 downto 27)<=dat_din_P3;
 
 
 
 
 
        tb : PROCESS
 
 
 
        BEGIN
 
 
 
                rst <= '1';
 
                dat_nwrite_P0<='1';
 
                dat_nwrite_P1<='1';
 
                dat_nwrite_P2<='1';
 
                dat_nwrite_P3<='1';
 
                dat_din_P0<=(others=>'0');
 
                dat_din_P1<=(others=>'0');
 
                dat_din_P2<=(others=>'0');
 
                dat_din_P3<=(others=>'0');
 
                dat_nread  <= (others => '1');
 
                wait for 100 ns;
 
                rst <= '0';
 
                wait for 1 us;
 
                dat_nread  <= (others => '0');
 
 
 
--         Send Packet from Port 0 to Port 1                    
 
      dat_nwrite_P0<='0';
 
                dat_din_P0<="000000001"; -- Port 1
 
                wait for 10 ns;
 
      dat_din_P0<="000001010"; -- Data 0                
 
                wait for 10 ns;
 
                dat_din_P0<="000001011"; -- Data 1                      
 
                wait for 10 ns;
 
                dat_din_P0<="100000000"; -- EOP                 
 
           wait for 10 ns;
 
                dat_nwrite_P0<='1';
 
 
 
--         Send Packet from Port 2 to Port 3                    
 
      dat_nwrite_P2<='0';
 
                dat_din_P2<="000000011"; -- Port 3
 
                wait for 10 ns;
 
      dat_din_P2<="000001100"; -- Data 0                
 
                wait for 10 ns;
 
                dat_din_P2<="000001101"; -- Data 1                      
 
                wait for 10 ns;
 
                dat_din_P2<="100000000"; -- EOP                 
 
           wait for 10 ns;
 
                dat_nwrite_P2<='1';
 
 
 
--         Send Packet from Port 0 and Port 1 to Port 2 and Port 3                      
 
      dat_nwrite_P0<='0';
 
                dat_din_P0<="000000010"; -- Port 2
 
                dat_nwrite_P1<='0';
 
                dat_din_P1<="000000011"; -- Port 3
 
                wait for 10 ns;
 
      dat_din_P0<="000001110"; -- Data 0                
 
                dat_din_P1<="000001010"; -- Data 0              
 
                wait for 10 ns;
 
                dat_din_P0<="000001111"; -- Data 1                      
 
                dat_din_P1<="000001011"; -- Data 1              
 
                wait for 10 ns;
 
                dat_din_P0<="100000000"; -- EOP                 
 
                dat_din_P1<="100000000"; -- EOP                 
 
           wait for 10 ns;
 
                dat_nwrite_P0<='1';
 
                dat_nwrite_P1<='1';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                wait for 1000 ms; --wait very long      
 
 
 
        END PROCESS;
 
 
 
END;
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

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