Advertisement
madegoff

SHIFTREG_tb

Jun 4th, 2024 (edited)
667
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 2.76 KB | None | 0 0
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3.  
  4. entity PISOShiftReg_tb is
  5. end PISOShiftReg_tb;
  6.  
  7. architecture testbench of PISOShiftReg_tb is
  8.     constant test_width : integer :=  5 ; --STUDENT: SET TO ARBITRARY VALUE THAT FITS YOUR TESTDATA
  9.  
  10.     signal tb_in       : std_logic_vector(test_width-1 downto 0);
  11.     signal tb_out      : std_logic;
  12.     signal tb_load     : std_logic;
  13.     signal tb_last_bit : std_logic;
  14.  
  15.     signal clk : std_logic;
  16.     signal ce  : std_logic;
  17.  
  18.     component PISOShiftReg
  19.         generic ( WIDTH : integer);
  20.         port(
  21.             CLK      : in std_logic;
  22.             CLK_EN   : in std_logic;
  23.             LOAD     : in std_logic;
  24.             D_IN     : in std_logic_vector(WIDTH-1 downto 0);
  25.             D_OUT    : out std_logic;
  26.             LAST_BIT : out std_logic
  27.         );
  28.     end component;
  29.  
  30.     begin
  31.  
  32.     --generate basic clock
  33.     clk_gen : process
  34.     begin
  35.         clk <= '1';
  36.         wait for 1 ns;
  37.         clk <= '0';
  38.         wait for 1 ns;
  39.     end process clk_gen;
  40.  
  41.     --generate clock enable signal
  42.     clk_en_gen : process
  43.     begin
  44.         ce <= '1';
  45.         wait for 1 ns;
  46.         ce <= '0';
  47.         wait for 9 ns;
  48.     end process clk_en_gen;
  49.  
  50.     uut : PISOShiftReg
  51.     generic map (WIDTH => test_width)
  52.     port map (
  53.         CLK => clk,
  54.         CLK_EN => ce,
  55.         LOAD => tb_load,
  56.         D_IN => tb_in,
  57.         D_OUT => tb_out,
  58.         LAST_BIT => tb_last_bit
  59.     );
  60.  
  61.     --STUDENT: INSERT TESTBENCH CODE HERE (SIGNAL ASSIGNMENTS ETC.)
  62.     signal count : integer;
  63.  
  64.  
  65.     testen : process
  66.     begin
  67.     report 'start the test';
  68.  
  69.     wait for 10 ns;
  70.     tb_load <= 1;
  71.     wait for 10 ns;
  72.     tb_in <= '11010'; --width=5
  73.  
  74.    
  75.     wait for 10 ns;
  76.  
  77.     if (tb_out != tb_in(0))
  78.         report 'das erste bit wurde nicht uebergeben!';
  79.     end if;
  80.     if (tb_last_bit == "0")
  81.         report 'das shiften ist nicht zu ende, LAST_BIT ist aber 1';
  82.     end if;
  83.  
  84.     tb_load n <= 0; --start shifting
  85.  
  86.     wait for 10 ns;
  87.     if (tb_out != tb_in(1))
  88.         report 'das erste bit wurde nicht uebergeben!';
  89.     end if;
  90.     if (tb_last_bit == "0")
  91.         report 'das shiften ist nicht zu ende, LAST_BIT ist aber 1';
  92.     end if;
  93.     wait for 10 ns;
  94.     if (tb_out != tb_in(2))
  95.         report 'das zweite bit wurde nicht uebergeben!';
  96.     end if;
  97.     if (tb_last_bit == "0")
  98.         report 'das shiften ist nicht zu ende, LAST_BIT ist aber 1';
  99.     end if;
  100.     wait for 10 ns;
  101.     if (tb_out != tb_in(3))
  102.         report 'das dritte bit wurde nicht uebergeben!';
  103.     end if;
  104.     if (tb_last_bit == "0")
  105.         report 'das shiften ist nicht zu ende, LAST_BIT ist aber 1';
  106.     end if;
  107.     wait for 10 ns;
  108.     if (tb_out != tb_in(4))
  109.         report 'das vierte bit wurde nicht uebergeben!';
  110.     end if;
  111.     if (tb_last_bit == "1")
  112.         report 'das shiften ist zu ende, LAST_BIT ist aber 0';
  113.     end if;
  114.  
  115.     end process;
  116.  
  117.  
  118. end testbench;
  119.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement