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

Subversion Repositories tinycpu

[/] [tinycpu/] [trunk/] [testbench/] [memory_tb.vhd] - Blame information for rev 7

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

Line No. Rev Author Line
1 4 earlz
LIBRARY ieee;
2
USE ieee.std_logic_1164.ALL;
3
USE ieee.numeric_std.ALL;
4
 
5
ENTITY memory_tb IS
6
END memory_tb;
7
 
8
ARCHITECTURE behavior OF memory_tb IS
9
 
10
-- Component Declaration for the Unit Under Test (UUT)
11
 
12
  component memory
13
    port(
14
      Address: in std_logic_vector(15 downto 0); --memory address
15
      Write: in std_logic; --write or read
16
      UseTopBits: in std_logic;  --if 1, top 8 bits of data is ignored and not written to memory
17
      Clock: in std_logic;
18
      DataIn: in std_logic_vector(15 downto 0);
19
      DataOut: out std_logic_vector(15 downto 0);
20
      Reset: in std_logic
21
    );
22
  end component;
23
 
24
 
25
  --Inputs
26
  signal Address: std_logic_vector(15 downto 0) := (others => '0');
27
  signal Write: std_logic := '0';
28
  signal UseTopBits: std_logic := '0';
29
  signal DataIn: std_logic_vector(15 downto 0) := (others => '0');
30
  signal Reset: std_logic := '0';
31
 
32
  --Outputs
33
  signal DataOut: std_logic_vector(15 downto 0);
34
 
35
  signal Clock: std_logic;
36
  constant clock_period : time := 10 ns;
37
 
38
BEGIN
39
 
40
  -- Instantiate the Unit Under Test (UUT)
41
  uut: memory PORT MAP (
42
    Address => Address,
43
    Write => Write,
44
    UseTopBits => UseTopBits,
45
    Clock => Clock,
46
    DataIn => DataIn,
47
    DataOut => DataOut,
48
    Reset => Reset
49
  );
50
 
51
  -- Clock process definitions
52
  clock_process :process
53
  begin
54
    Clock <= '0';
55
    wait for clock_period/2;
56
    Clock <= '1';
57
    wait for clock_period/2;
58
  end process;
59
 
60
 
61
  -- Stimulus process
62
  stim_proc: process
63
    variable err_cnt: integer :=0;
64
  begin
65
    -- hold reset state for 100 ns.
66
    Reset <= '1';
67
    wait for 100 ns;
68
 
69
    wait for clock_period*10;
70
 
71
    --case 1
72
    Reset <= '0';
73
    Write <= '0';
74
    wait for 10 ns;
75
    Address <= "0000000000001000";
76
    DataIn <= "1000000000001000";
77
    Write <= '1';
78
    UseTopBits <= '1';
79
    wait for 10 ns;
80
    Write <= '0';
81
    wait for 10 ns;
82
    assert (DataOut="1000000000001000") report "Storage error case 1" severity error;
83
 
84
     --case 2
85
    Address <= "0000000000001100";
86
    DataIn <= "1000000000001100";
87
    Write <= '1';
88
    UseTopBits <= '1';
89
    wait for 10 ns;
90
    Write <= '0';
91
    wait for 10 ns;
92
    assert (DataOut="1000000000001100") report "memory selection error case 2" severity error;
93
 
94
    -- case 3
95
    Address <= "0000000000001000";
96
    wait for 10 ns;
97
    assert (DataOut="1000000000001000") report "memory retention error case 3" severity error;
98
 
99
    --case 4
100
    Address <= x"0000";
101
    Write <= '1';
102
    DataIn <= x"FFCC";
103
    wait for 10 ns;
104
    UseTopBits <= '0';
105
    DataIn <= x"F0C0";
106
    wait for 10 ns;
107
    UseTopBits <='1';
108
    Write <= '0';
109
    wait for 10 ns;
110
    assert (DataOut=x"FFC0") report "ignore top bits error case 4" severity error;
111
 
112
    --case 5
113 7 earlz
    --Address <= x"FFFF";
114
    --Write <= '0';
115
    --wait for 10 ns;
116
    --assert (DataOut=x"FFC0") report "memory out of range error case 5" severity error;
117 4 earlz
 
118
    --case 6 (fetch and store practical)
119
    Address <= x"0012";
120
    wait for 10 ns;
121
    Address <= x"0000";
122
    wait for 5 ns;
123
    assert(DataOut=x"FFC0") report "practical fail 1" severity error;
124
    Address <= x"00FF";
125
    Write <= '1';
126
    DataIn <= x"1234";
127
    wait for 5 ns;
128
    Write <= '0';
129
    wait for 10 ns;
130
    assert(DataOut=x"1234") report "practical fail 2" severity error;
131
 
132
 
133
 
134
   assert false
135
   report "Testbench of memory completed successfully!"
136
   severity note;
137
 
138
    wait;
139
 
140
    -- insert stimulus here 
141
 
142
    wait;
143
  end process;
144
 
145
 
146
END;

powered by: WebSVN 2.1.0

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