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

Subversion Repositories tinycpu

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

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

powered by: WebSVN 2.1.0

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