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

Subversion Repositories tinycpu

[/] [tinycpu/] [trunk/] [testbench/] [registerfile_tb.vhd] - Diff between revs 3 and 5

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

Rev 3 Rev 5
Line 9... Line 9...
 
 
-- Component Declaration for the Unit Under Test (UUT)
-- Component Declaration for the Unit Under Test (UUT)
 
 
  component registerfile
  component registerfile
    port(
    port(
      Write:in std_logic_vector(7 downto 0); --what should be put into the write register
      Write1:in std_logic_vector(7 downto 0); --what should be put into the write register
      SelRead1:in std_logic_vector(2 downto 0); --select which register to read
      Write2: in std_logic_vector(7 downto 0);
      SelRead2: in std_logic_vector(2 downto 0); --select second register to read
      SelRead1:in std_logic_vector(3 downto 0); --select which register to read
      SelWrite:in std_logic_vector(2 downto 0); --select which register to write
      SelRead2: in std_logic_vector(3 downto 0); --select second register to read
      UseWrite:in std_logic; --if the register should actually be written to
      SelWrite1:in std_logic_vector(3 downto 0); --select which register to write
 
      SelWrite2:in std_logic_vector(3 downto 0);
 
      UseWrite1:in std_logic; --if the register should actually be written to
 
      UseWrite2: in std_logic;
      Clock:in std_logic;
      Clock:in std_logic;
      Read1:out std_logic_vector(7 downto 0); --register to be read output
      Read1:out std_logic_vector(7 downto 0); --register to be read output
      Read2:out std_logic_vector(7 downto 0) --register to be read on second output 
      Read2:out std_logic_vector(7 downto 0) --register to be read on second output 
    );
    );
  end component;
  end component;
 
 
 
 
  --Inputs
  --Inputs
  signal Write : std_logic_vector(7 downto 0) := (others => '0');
  signal Write1 : std_logic_vector(7 downto 0) := (others => '0');
  signal SelRead1: std_logic_vector(2 downto 0) := (others => '0');
  signal Write2 : std_logic_vector(7 downto 0) := (others => '0');
  signal SelRead2: std_logic_vector(2 downto 0) := (others => '0');
  signal SelRead1: std_logic_vector(3 downto 0) := (others => '0');
  signal SelWrite: std_logic_vector(2 downto 0) := (others => '0');
  signal SelRead2: std_logic_vector(3 downto 0) := (others => '0');
  signal UseWrite: std_logic := '0';
  signal SelWrite1: std_logic_vector(3 downto 0) := (others => '0');
 
  signal SelWrite2: std_logic_vector(3 downto 0) := (others => '0');
 
  signal UseWrite1: std_logic := '0';
 
  signal UseWrite2: std_logic := '0';
 
 
  --Outputs
  --Outputs
  signal Read1 : std_logic_vector(7 downto 0);
  signal Read1 : std_logic_vector(7 downto 0);
  signal Read2 : std_logic_vector(7 downto 0);
  signal Read2 : std_logic_vector(7 downto 0);
 
 
Line 39... Line 45...
 
 
BEGIN
BEGIN
 
 
  -- Instantiate the Unit Under Test (UUT)
  -- Instantiate the Unit Under Test (UUT)
  uut: registerfile PORT MAP (
  uut: registerfile PORT MAP (
    Write => Write,
    Write1 => Write1,
 
    Write2 => Write2,
    SelRead1 => SelRead1,
    SelRead1 => SelRead1,
    SelRead2 => SelRead2,
    SelRead2 => SelRead2,
    SelWrite => SelWrite,
    SelWrite1 => SelWrite1,
    UseWrite => UseWrite,
    SelWrite2 => SelWrite2,
 
    UseWrite1 => UseWrite1,
 
    UseWrite2 => UseWrite2,
    Clock => Clock,
    Clock => Clock,
    Read1 => Read1,
    Read1 => Read1,
    Read2 => Read2
    Read2 => Read2
  );
  );
 
 
Line 69... Line 78...
    wait for 100 ns;
    wait for 100 ns;
 
 
    wait for clock_period*10;
    wait for clock_period*10;
 
 
    -- case 1
    -- case 1
    SelWrite <= "000";
    SelWrite1 <= "0000";
    Write <= "11110000";
    Write1 <= "11110000";
    UseWrite <= '1';
    UseWrite1 <= '1';
    wait for 10 ns;
    wait for 10 ns;
    SelRead1 <= "000";
    SelRead1 <= "0000";
    UseWrite <= '0';
    UseWrite1 <= '0';
    wait for 10 ns;
    wait for 10 ns;
    assert (Read1="11110000") report "Storage error case 1" severity error;
    assert (Read1="11110000") report "Storage error case 1" severity error;
    if (Read1/="11110000") then
 
        err_cnt:=err_cnt+1;
 
    end if;
 
 
 
    -- case 2
    -- case 2
    SelWrite <= "100";
    SelWrite1 <= "1000";
    Write <= "11110001";
    Write1 <= "11110001";
    UseWrite <= '1';
    UseWrite1 <= '1';
    wait for 10 ns;
    wait for 10 ns;
    SelRead1 <= "100";
    SelRead1 <= "1000";
    UseWrite <= '0';
    UseWrite1 <= '0';
    wait for 10 ns;
    wait for 10 ns;
    assert (Read1="11110001") report "Storage selector error case 2" severity error;
    assert (Read1="11110001") report "Storage selector error case 2" severity error;
    if (Read1/="11110001") then
 
        err_cnt:=err_cnt+1;
 
    end if;
 
 
 
    -- case 3
    -- case 3
    SelRead1 <= "000";
    SelRead1 <= "0000";
    UseWrite <= '0';
    UseWrite1 <= '0';
    wait for 10 ns;
    wait for 10 ns;
    assert (Read1="11110000") report "Storage selector(remembering) error case 3" severity error;
    assert (Read1="11110000") report "Storage selector(remembering) error case 3" severity error;
    if (Read1/="11110000") then
 
        err_cnt:=err_cnt+1;
    --case 4
    end if;
    SelWrite1 <= x"0";
 
    SelWrite2 <= x"1";
 
    Write1 <= x"12";
 
    Write2 <= x"34";
 
    UseWrite1 <= '1';
 
    UseWrite2 <= '1';
 
    wait for 10 ns;
 
    UseWrite1 <= '0';
 
    UseWrite2 <= '0';
 
    SelRead1 <= x"0";
 
    SelRead2 <= x"1";
 
    wait for 10 ns;
 
    assert (Read1=x"12" and Read2=x"34") report "simultaneous write and read error case 4" severity error;
 
 
 
    SelWrite1 <= x"0";
 
    SelWrite2 <= x"0";
 
    Write1 <= x"ff";
 
    Write2 <= x"00";
 
    UseWrite1 <= '1';
 
    UseWrite2 <= '1';
 
    wait for 10 ns;
 
    SelRead1 <= x"0";
 
    UseWrite1 <= '0';
 
    UseWrite2 <= '0';
 
    wait for 10 ns;
 
    assert (Read1=x"ff") report "dual-write error handling error case 5" severity error;
 
 
 
 
 
 
    -- summary of testbench
    -- summary of testbench
    if (err_cnt=0) then
 
      assert false
      assert false
      report "Testbench of registerfile completed successfully!"
      report "Testbench of registerfile completed successfully!"
      severity note;
      severity note;
    else
 
      assert true
 
      report "Something wrong, try again"
 
      severity error;
 
    end if;
 
 
 
    wait;
    wait;
 
 
    -- insert stimulus here 
    -- insert stimulus here 
 
 

powered by: WebSVN 2.1.0

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