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

Subversion Repositories wb_vga

[/] [wb_vga/] [trunk/] [TestBench/] [accel_TB.vhd] - Blame information for rev 9

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

Line No. Rev Author Line
1 4 tantos
library ieee,wb_tk,wb_vga;
2
use ieee.NUMERIC_STD.all;
3
use ieee.std_logic_1164.all;
4
use wb_tk.technology.all;
5
use wb_tk.wb_test.all;
6
use wb_tk.all;
7
use wb_vga.all;
8
 
9
entity accel_tb is
10
        generic(
11
                accel_size : POSITIVE := 9;
12
                video_addr_width : POSITIVE := 20;
13
                video_data_width : POSITIVE := 16;
14
                data_width : POSITIVE := 16 );
15
end accel_tb;
16
 
17
architecture TB of accel_tb is
18
        component accel
19
                generic(
20
                        accel_size : POSITIVE := accel_size;
21
                        video_addr_width : POSITIVE := video_addr_width;
22
                        video_data_width : POSITIVE := video_data_width;
23
                        data_width : POSITIVE := data_width
24
                );
25
                port (
26
                        clk_i: in std_logic;
27
                        rst_i: in std_logic := '0';
28
 
29
                        -- Slave interface to the CPU side
30
                        we_i: in std_logic;
31
                        cyc_i: in std_logic;
32
                sel_i: in std_logic_vector ((data_width/8)-1 downto 0) := (others => '1');
33
                        cur_stb_i: in std_logic;
34
                        ext_stb_i: in std_logic;
35
                        acc_stb_i: in std_logic;
36
                        mem_stb_i: in std_logic;
37
 
38
                        adr_i: in std_logic_vector(accel_size-1 downto 0);
39
                        dat_i: in std_logic_vector(data_width-1 downto 0);
40
                        dat_o: out std_logic_vector(data_width-1 downto 0);
41
                        dat_oi: in std_logic_vector(data_width-1 downto 0);
42
 
43
                        ack_o: out std_logic;
44
                        ack_oi: in std_logic;
45
 
46
                        -- Master interface to the video memory side.           
47
                        v_we_o: out std_logic;
48
                        v_cyc_o: out std_logic;
49
                        v_sel_o: out std_logic;
50
 
51
                        v_adr_o: out std_logic_vector (video_addr_width-1 downto 0);
52
                        v_dat_o: out std_logic_vector (video_data_width-1 downto 0);
53
                        v_dat_i: in std_logic_vector (video_data_width-1 downto 0);
54
 
55
                        v_ack_i: in std_logic
56
                );
57
        end component;
58
 
59
        -- Stimulus signals - signals mapped to the input and inout ports of tested entity
60
        signal clk_i : std_logic;
61
        signal rst_i : std_logic;
62
        signal we_i : std_logic;
63
        signal cyc_i : std_logic;
64
    signal sel_i: std_logic_vector ((data_width/8)-1 downto 0) := (others => '1');
65
        signal cur_stb_i : std_logic;
66
        signal ext_stb_i : std_logic;
67
        signal acc_stb_i : std_logic;
68
        signal mem_stb_i : std_logic;
69
        signal adr_i : std_logic_vector((accel_size-1) downto 0);
70
        signal dat_i : std_logic_vector((data_width-1) downto 0);
71
        signal dat_oi : std_logic_vector((data_width-1) downto 0);
72
        signal ack_oi : std_logic;
73
        signal v_dat_i : std_logic_vector((video_data_width-1) downto 0);
74
        signal v_ack_i : std_logic;
75
        -- Observed signals - signals mapped to the output ports of tested entity
76
        signal dat_o : std_logic_vector((data_width-1) downto 0);
77
        signal ack_o : std_logic;
78
        signal v_we_o : std_logic;
79
        signal v_sel_o : std_logic;
80
        signal v_cyc_o : std_logic;
81
        signal v_adr_o : std_logic_vector((video_addr_width-1) downto 0);
82
        signal v_dat_o : std_logic_vector((video_data_width-1) downto 0);
83
begin
84
 
85
        -- Unit Under Test port map
86
        UUT : accel
87
                port map
88
                        (clk_i => clk_i,
89
                        rst_i => rst_i,
90
                        we_i => we_i,
91
                        cyc_i => cyc_i,
92
                        sel_i => sel_i,
93
                        cur_stb_i => cur_stb_i,
94
                        ext_stb_i => ext_stb_i,
95
                        acc_stb_i => acc_stb_i,
96
                        mem_stb_i => mem_stb_i,
97
                        adr_i => adr_i,
98
                        dat_i => dat_i,
99
                        dat_o => dat_o,
100
                        dat_oi => dat_oi,
101
                        ack_o => ack_o,
102
                        ack_oi => ack_oi,
103
                        v_we_o => v_we_o,
104
                        v_cyc_o => v_cyc_o,
105
                        v_sel_o => v_sel_o,
106
                        v_adr_o => v_adr_o,
107
                        v_dat_o => v_dat_o,
108
                        v_dat_i => v_dat_i,
109
                        v_ack_i => v_ack_i );
110
 
111
        clk: process is
112
        begin
113
                clk_i <= '0';
114
                wait for 25ns;
115
                clk_i <= '1';
116
                wait for 25ns;
117
        end process;
118
 
119
        reset: process is
120
        begin
121
                rst_i <= '1';
122
                wait for 150ns;
123
                rst_i <= '0';
124
                wait;
125
        end process;
126
 
127
        memory: process is
128
        begin
129
                v_ack_i <= '0';
130
                v_dat_i <= (others => 'U');
131
                if (v_sel_o /= '1') then wait until v_sel_o = '1'; end if;
132
                wait until clk_i'EVENT and clk_i = '1';
133
                v_ack_i <= '1';
134
                if (v_we_o = '1') then
135
                        v_dat_i <= v_adr_o(v_dat_i'RANGE);
136
                else
137
                        v_dat_i <= (others => 'U');
138
                end if;
139
                wait until clk_i'EVENT and clk_i = '1';
140
                wait for 15ns;
141
        end process;
142
 
143
        dat_oi <= (others => 'U');
144
        ack_oi <= 'U';
145
 
146
        master: process is
147
                variable init: boolean := true;
148
        begin
149
                if (init) then
150
                        we_i <= '0';
151
                        cyc_i <= '0';
152
                        cur_stb_i <= '0';
153
                        ext_stb_i <= '0';
154
                        acc_stb_i <= '0';
155
                        mem_stb_i <= '0';
156
                        adr_i <= (others => '0');
157
                        dat_i <= (others => '0');
158
                        wait until clk_i'EVENT and clk_i = '1';
159
                        wait until clk_i'EVENT and clk_i = '1';
160
                        wait until clk_i'EVENT and clk_i = '1';
161
                        wait until clk_i'EVENT and clk_i = '1';
162
                        wait until clk_i'EVENT and clk_i = '1';
163
                        wait until clk_i'EVENT and clk_i = '1';
164
                        wait until clk_i'EVENT and clk_i = '1';
165
 
166
                        -- Set Cursor to 0
167
                        wr_chk_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,cur_stb_i,ack_o,"000000000","0000000000000000");
168
                        -- Accel index 0 is 0
169
                        wr_chk_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,acc_stb_i,ack_o,"000000000","0000000000000000");
170
                        -- Accel index 1 is 1
171
                        wr_chk_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,acc_stb_i,ack_o,"000000001","0000000000000001");
172
                        -- Accel index 2 is 3
173
                        wr_chk_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,acc_stb_i,ack_o,"000000010","0000000000000011");
174
                        -- Accel index 3 is -1
175
                        wr_chk_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,acc_stb_i,ack_o,"000000011","1111111111111111");
176
                end if;
177
                init := false;
178
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000000","1111000011110000");
179
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000001","1111000011110000");
180
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000001","1111000011110000");
181
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000011","1111000011110000");
182
 
183
                chk_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,cur_stb_i,ack_o,"000000000","0000000000000001");
184
 
185
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000011","1111000011110000");
186
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000010","1111000011110000");
187
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000010","1111000011110000");
188
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000010","1111000011110000");
189
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000011","1111000011110000");
190
 
191
                chk_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,cur_stb_i,ack_o,"000000000","0000000000001000");
192
 
193
                -- Set Cursor to 16
194
                wr_chk_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,cur_stb_i,ack_o,"000000000","0000000000010000");
195
 
196
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000000","1111000011110000");
197
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000001","1111000011110000");
198
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000001","1111000011110000");
199
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000011","1111000011110000");
200
 
201
                chk_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,cur_stb_i,ack_o,"000000000","0000000000010001");
202
 
203
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000011","1111000011110000");
204
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000010","1111000011110000");
205
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000010","1111000011110000");
206
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000010","1111000011110000");
207
                wr_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,mem_stb_i,ack_o,"000000011","1111000011110000");
208
 
209
                chk_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,cur_stb_i,ack_o,"000000000","0000000000011000");
210
 
211
                -- Set Cursor to 0
212
                wr_chk_val(clk_i, adr_i,dat_o,dat_i,we_i,cyc_i,cur_stb_i,ack_o,"000000000","0000000000000000");
213
 
214
                wait;
215
        end process;
216
 
217
end TB;
218
 
219
configuration TB_accel of accel_tb is
220
        for TB
221
                for UUT : accel
222
                        use entity wb_vga.accel(accel);
223
                end for;
224
        end for;
225
end TB_accel;
226
 

powered by: WebSVN 2.1.0

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