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

Subversion Repositories tinycpu

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

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 5 earlz
      Write1:in std_logic_vector(7 downto 0); --what should be put into the write register
15
      Write2: in std_logic_vector(7 downto 0);
16
      SelRead1:in std_logic_vector(3 downto 0); --select which register to read
17
      SelRead2: in std_logic_vector(3 downto 0); --select second register to read
18
      SelWrite1:in std_logic_vector(3 downto 0); --select which register to write
19
      SelWrite2:in std_logic_vector(3 downto 0);
20
      UseWrite1:in std_logic; --if the register should actually be written to
21
      UseWrite2: in std_logic;
22 2 earlz
      Clock:in std_logic;
23 3 earlz
      Read1:out std_logic_vector(7 downto 0); --register to be read output
24
      Read2:out std_logic_vector(7 downto 0) --register to be read on second output 
25 5 earlz
  );
26 2 earlz
  end component;
27
 
28
 
29
  --Inputs
30 5 earlz
  signal Write1 : std_logic_vector(7 downto 0) := (others => '0');
31
  signal Write2 : std_logic_vector(7 downto 0) := (others => '0');
32
  signal SelRead1: std_logic_vector(3 downto 0) := (others => '0');
33
  signal SelRead2: std_logic_vector(3 downto 0) := (others => '0');
34
  signal SelWrite1: std_logic_vector(3 downto 0) := (others => '0');
35
  signal SelWrite2: std_logic_vector(3 downto 0) := (others => '0');
36
  signal UseWrite1: std_logic := '0';
37
  signal UseWrite2: std_logic := '0';
38 2 earlz
 
39
  --Outputs
40 3 earlz
  signal Read1 : std_logic_vector(7 downto 0);
41
  signal Read2 : std_logic_vector(7 downto 0);
42 2 earlz
 
43
  signal Clock: std_logic;
44
  constant clock_period : time := 10 ns;
45
 
46
BEGIN
47
 
48
  -- Instantiate the Unit Under Test (UUT)
49
  uut: registerfile PORT MAP (
50 5 earlz
    Write1 => Write1,
51
    Write2 => Write2,
52 3 earlz
    SelRead1 => SelRead1,
53
    SelRead2 => SelRead2,
54 5 earlz
    SelWrite1 => SelWrite1,
55
    SelWrite2 => SelWrite2,
56
    UseWrite1 => UseWrite1,
57
    UseWrite2 => UseWrite2,
58 2 earlz
    Clock => Clock,
59 3 earlz
    Read1 => Read1,
60
    Read2 => Read2
61 2 earlz
  );
62
 
63
  -- Clock process definitions
64
  clock_process :process
65
  begin
66
    Clock <= '0';
67
    wait for clock_period/2;
68
    Clock <= '1';
69
    wait for clock_period/2;
70
  end process;
71
 
72
 
73
  -- Stimulus process
74
  stim_proc: process
75
    variable err_cnt: integer :=0;
76
  begin
77
    -- hold reset state for 100 ns.
78
    wait for 100 ns;
79
 
80
    wait for clock_period*10;
81
 
82
    -- case 1
83 5 earlz
    SelWrite1 <= "0000";
84
    Write1 <= "11110000";
85
    UseWrite1 <= '1';
86 2 earlz
    wait for 10 ns;
87 5 earlz
    SelRead1 <= "0000";
88
    UseWrite1 <= '0';
89 2 earlz
    wait for 10 ns;
90 3 earlz
    assert (Read1="11110000") report "Storage error case 1" severity error;
91 2 earlz
 
92
    -- case 2
93 5 earlz
    SelWrite1 <= "1000";
94
    Write1 <= "11110001";
95
    UseWrite1 <= '1';
96 2 earlz
    wait for 10 ns;
97 5 earlz
    SelRead1 <= "1000";
98
    UseWrite1 <= '0';
99 2 earlz
    wait for 10 ns;
100 3 earlz
    assert (Read1="11110001") report "Storage selector error case 2" severity error;
101 2 earlz
 
102
    -- case 3
103 5 earlz
    SelRead1 <= "0000";
104
    UseWrite1 <= '0';
105 2 earlz
    wait for 10 ns;
106 3 earlz
    assert (Read1="11110000") report "Storage selector(remembering) error case 3" severity error;
107 5 earlz
 
108
    --case 4
109
    SelWrite1 <= x"0";
110
    SelWrite2 <= x"1";
111
    Write1 <= x"12";
112
    Write2 <= x"34";
113
    UseWrite1 <= '1';
114
    UseWrite2 <= '1';
115
    wait for 10 ns;
116
    UseWrite1 <= '0';
117
    UseWrite2 <= '0';
118
    SelRead1 <= x"0";
119
    SelRead2 <= x"1";
120
    wait for 10 ns;
121
    assert (Read1=x"12" and Read2=x"34") report "simultaneous write and read error case 4" severity error;
122 2 earlz
 
123 5 earlz
    SelWrite1 <= x"0";
124
    SelWrite2 <= x"0";
125
    Write1 <= x"ff";
126
    Write2 <= x"00";
127
    UseWrite1 <= '1';
128
    UseWrite2 <= '1';
129
    wait for 10 ns;
130
    SelRead1 <= x"0";
131
    UseWrite1 <= '0';
132
    UseWrite2 <= '0';
133
    wait for 10 ns;
134
    assert (Read1=x"ff") report "dual-write error handling error case 5" severity error;
135
 
136
 
137
 
138 2 earlz
    -- summary of testbench
139 5 earlz
    assert false
140
    report "Testbench of registerfile completed successfully!"
141
    severity note;
142
 
143 2 earlz
    wait;
144
 
145
    -- insert stimulus here 
146
 
147
    wait;
148
  end process;
149
 
150
 
151
END;

powered by: WebSVN 2.1.0

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