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

Subversion Repositories tinycpu

[/] [tinycpu/] [trunk/] [testbench/] [registerfile_tb.vhd] - Blame information for rev 3

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

Line No. Rev Author Line
1 2 earlz
LIBRARY ieee;
2
USE ieee.std_logic_1164.ALL;
3
USE ieee.numeric_std.ALL;
4
 
5
ENTITY registerfile_tb IS
6
END registerfile_tb;
7
 
8
ARCHITECTURE behavior OF registerfile_tb IS
9
 
10
-- Component Declaration for the Unit Under Test (UUT)
11
 
12
  component registerfile
13
    port(
14
      Write:in std_logic_vector(7 downto 0); --what should be put into the write register
15 3 earlz
      SelRead1:in std_logic_vector(2 downto 0); --select which register to read
16
      SelRead2: in std_logic_vector(2 downto 0); --select second register to read
17 2 earlz
      SelWrite:in std_logic_vector(2 downto 0); --select which register to write
18
      UseWrite:in std_logic; --if the register should actually be written to
19
      Clock:in std_logic;
20 3 earlz
      Read1:out std_logic_vector(7 downto 0); --register to be read output
21
      Read2:out std_logic_vector(7 downto 0) --register to be read on second output 
22 2 earlz
    );
23
  end component;
24
 
25
 
26
  --Inputs
27
  signal Write : std_logic_vector(7 downto 0) := (others => '0');
28 3 earlz
  signal SelRead1: std_logic_vector(2 downto 0) := (others => '0');
29
  signal SelRead2: std_logic_vector(2 downto 0) := (others => '0');
30 2 earlz
  signal SelWrite: std_logic_vector(2 downto 0) := (others => '0');
31
  signal UseWrite: std_logic := '0';
32
 
33
  --Outputs
34 3 earlz
  signal Read1 : std_logic_vector(7 downto 0);
35
  signal Read2 : std_logic_vector(7 downto 0);
36 2 earlz
 
37
  signal Clock: std_logic;
38
  constant clock_period : time := 10 ns;
39
 
40
BEGIN
41
 
42
  -- Instantiate the Unit Under Test (UUT)
43
  uut: registerfile PORT MAP (
44
    Write => Write,
45 3 earlz
    SelRead1 => SelRead1,
46
    SelRead2 => SelRead2,
47 2 earlz
    SelWrite => SelWrite,
48
    UseWrite => UseWrite,
49
    Clock => Clock,
50 3 earlz
    Read1 => Read1,
51
    Read2 => Read2
52 2 earlz
  );
53
 
54
  -- Clock process definitions
55
  clock_process :process
56
  begin
57
    Clock <= '0';
58
    wait for clock_period/2;
59
    Clock <= '1';
60
    wait for clock_period/2;
61
  end process;
62
 
63
 
64
  -- Stimulus process
65
  stim_proc: process
66
    variable err_cnt: integer :=0;
67
  begin
68
    -- hold reset state for 100 ns.
69
    wait for 100 ns;
70
 
71
    wait for clock_period*10;
72
 
73
    -- case 1
74
    SelWrite <= "000";
75
    Write <= "11110000";
76
    UseWrite <= '1';
77
    wait for 10 ns;
78 3 earlz
    SelRead1 <= "000";
79 2 earlz
    UseWrite <= '0';
80
    wait for 10 ns;
81 3 earlz
    assert (Read1="11110000") report "Storage error case 1" severity error;
82
    if (Read1/="11110000") then
83 2 earlz
        err_cnt:=err_cnt+1;
84
    end if;
85
 
86
    -- case 2
87
    SelWrite <= "100";
88
    Write <= "11110001";
89
    UseWrite <= '1';
90
    wait for 10 ns;
91 3 earlz
    SelRead1 <= "100";
92 2 earlz
    UseWrite <= '0';
93
    wait for 10 ns;
94 3 earlz
    assert (Read1="11110001") report "Storage selector error case 2" severity error;
95
    if (Read1/="11110001") then
96 2 earlz
        err_cnt:=err_cnt+1;
97
    end if;
98
 
99
    -- case 3
100 3 earlz
    SelRead1 <= "000";
101 2 earlz
    UseWrite <= '0';
102
    wait for 10 ns;
103 3 earlz
    assert (Read1="11110000") report "Storage selector(remembering) error case 3" severity error;
104
    if (Read1/="11110000") then
105 2 earlz
        err_cnt:=err_cnt+1;
106
    end if;
107
 
108
    -- summary of testbench
109
    if (err_cnt=0) then
110
      assert false
111
      report "Testbench of registerfile completed successfully!"
112
      severity note;
113
    else
114
      assert true
115
      report "Something wrong, try again"
116
      severity error;
117
    end if;
118
 
119
    wait;
120
 
121
    -- insert stimulus here 
122
 
123
    wait;
124
  end process;
125
 
126
 
127
END;

powered by: WebSVN 2.1.0

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