OSDN Git Service

added root Makefile.
[motonesfpga/motonesfpga.git] / simulation / cpu / testbench_cpu_reg.vhd
1
2 library IEEE;
3 use IEEE.std_logic_1164.all;
4 --use ieee.std_logic_unsigned.all;
5 use ieee.std_logic_arith.all;
6 use std.textio.all;
7
8
9 entity testbench_cpu_reg is
10 end testbench_cpu_reg;
11
12 architecture stimulus of testbench_cpu_reg is 
13     component cpu_reg
14         generic (dsize : integer := 8);
15         port (  clk, en     : in std_logic;
16                 d           : in std_logic_vector (dsize - 1 downto 0);
17                 q           : out std_logic_vector (dsize - 1 downto 0)
18             );
19     end component;
20     constant interval : time := 15 ns;
21     constant dsize1 : integer := 1;
22     constant dsize8 : integer := 8;
23     constant dsize16 : integer := 16;
24     signal cclk, een : std_logic;
25     signal dd1, qq1    : std_logic_vector (dsize1 - 1 downto 0);
26     signal dd8, qq8    : std_logic_vector (dsize8 - 1 downto 0);
27     signal dd16, qq16    : std_logic_vector (dsize16 - 1 downto 0);
28 begin
29     dut0 : cpu_reg generic map (dsize1) port map (cclk, een, dd1, qq1);
30     dut1 : cpu_reg generic map (dsize8) port map (cclk, een, dd8, qq8);
31     dut2 : cpu_reg generic map (dsize16) port map (cclk, een, dd16, qq16);
32
33     p1 : process
34     variable i : integer := 0;
35     constant loopcnt : integer := 10;
36     begin
37
38         for i in 0 to loopcnt * 2 loop
39             cclk <= '1';
40             wait for interval / 2;
41             cclk <= '0';
42             wait for interval / 2;
43         end loop;
44     end process;
45
46     p2 : process
47     variable i : integer := 0;
48     constant loopcnt : integer := 5;
49     begin
50
51         wait for interval / 4;
52
53         for i in 0 to loopcnt loop
54             dd1 <= conv_std_logic_vector(i, dsize1);
55             dd8 <= conv_std_logic_vector(i, dsize8);
56             dd16 <= conv_std_logic_vector(i, dsize16);
57             wait for interval / 4;
58         end loop;
59
60         een <= '1';
61
62         for i in 0 to loopcnt * 3 loop
63             dd1 <= conv_std_logic_vector(i, dsize1);
64             dd8 <= conv_std_logic_vector(i, dsize8);
65             dd16 <= conv_std_logic_vector(i, dsize16);
66             wait for interval / 3;
67         end loop;
68
69         for i in 0 to loopcnt * 4 loop
70             dd1 <= conv_std_logic_vector(i, dsize1);
71             dd8 <= conv_std_logic_vector(i, dsize8);
72             dd16 <= conv_std_logic_vector(i, dsize16);
73             wait for interval / 4;
74         end loop;
75
76         for i in 0 to loopcnt * 5 loop
77             dd1 <= conv_std_logic_vector(i, dsize1);
78             dd8 <= conv_std_logic_vector(i, dsize8);
79             dd16 <= conv_std_logic_vector(i, dsize16);
80             wait for interval / 5;
81         end loop;
82
83         for i in 0 to loopcnt * 2 loop
84             dd1 <= conv_std_logic_vector(i, dsize1);
85             dd8 <= conv_std_logic_vector(i, dsize8);
86             dd16 <= conv_std_logic_vector(i, dsize16);
87             wait for interval;
88         end loop;
89         
90         for i in 0 to loopcnt * 2 loop
91             dd1 <= conv_std_logic_vector(i, dsize1);
92             dd8 <= conv_std_logic_vector(i, dsize8);
93             dd16 <= conv_std_logic_vector(i, dsize16);
94             wait for interval * 2;
95         end loop;
96
97         een <= '0';
98
99         for i in 0 to loopcnt * 3 loop
100             dd1 <= conv_std_logic_vector(i, dsize1);
101             dd8 <= conv_std_logic_vector(i, dsize8);
102             dd16 <= conv_std_logic_vector(i, dsize16);
103             wait for interval / 3;
104         end loop;
105
106         wait;
107     end process;
108
109 end stimulus ;
110