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

Subversion Repositories wb_tk

[/] [wb_tk/] [tags/] [a01/] [TestBench/] [wb_async_master_TB.vhd] - Blame information for rev 3

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

Line No. Rev Author Line
1 2 tantos
library ieee;
2
use work.technology.all;
3
use ieee.std_logic_1164.all;
4
 
5
entity wb_async_master_tb is
6
        generic(
7
                width : POSITIVE := 16;
8
                addr_width : POSITIVE := 20 );
9
end wb_async_master_tb;
10
 
11
architecture TB of wb_async_master_tb is
12
        component wb_async_master
13
        generic(
14
                width : POSITIVE := 16;
15
                addr_width : POSITIVE := 20 );
16
        port(
17
                clk_i : in std_logic;
18
                rst_i : in std_logic;
19
                s_adr_o : out std_logic_vector((addr_width-1) downto 0);
20
                s_sel_o : out std_logic_vector(((width/8)-1) downto 0);
21
                s_dat_i : in std_logic_vector((width-1) downto 0);
22
                s_dat_o : out std_logic_vector((width-1) downto 0);
23
                s_cyc_o : out std_logic;
24
                s_ack_i : in std_logic;
25
                s_err_i : in std_logic;
26
                s_rty_i : in std_logic;
27
                s_we_o : out std_logic;
28
                s_stb_o : out std_logic;
29
                a_data : inout std_logic_vector((width-1) downto 0);
30
                a_addr : in std_logic_vector((addr_width-1) downto 0);
31
                a_rdn : in std_logic;
32
                a_wrn : in std_logic;
33
                a_cen : in std_logic;
34
                a_byen : in std_logic_vector(((width/8)-1) downto 0);
35
                a_waitn : out std_logic );
36
        end component;
37
 
38
        -- Stimulus signals - signals mapped to the input and inout ports of tested entity
39
        signal clk_i : std_logic;
40
        signal rst_i : std_logic;
41
        signal s_dat_i : std_logic_vector((width-1) downto 0);
42
        signal s_ack_i : std_logic;
43
        signal s_err_i : std_logic;
44
        signal s_rty_i : std_logic;
45
        signal a_data : std_logic_vector((width-1) downto 0);
46
        signal a_addr : std_logic_vector((addr_width-1) downto 0);
47
        signal a_rdn : std_logic;
48
        signal a_wrn : std_logic;
49
        signal a_cen : std_logic;
50
        signal a_byen : std_logic_vector(((width/8)-1) downto 0);
51
        -- Observed signals - signals mapped to the output ports of tested entity
52
        signal s_adr_o : std_logic_vector((addr_width-1) downto 0);
53
        signal s_sel_o : std_logic_vector(((width/8)-1) downto 0);
54
        signal s_dat_o : std_logic_vector((width-1) downto 0);
55
        signal s_cyc_o : std_logic;
56
        signal s_we_o : std_logic;
57
        signal s_stb_o : std_logic;
58
        signal a_waitn : std_logic;
59
 
60
begin
61
 
62
        -- Unit Under Test port map
63
        UUT : wb_async_master port map(
64
                clk_i => clk_i,
65
                rst_i => rst_i,
66
                s_adr_o => s_adr_o,
67
                s_sel_o => s_sel_o,
68
                s_dat_i => s_dat_i,
69
                s_dat_o => s_dat_o,
70
                s_cyc_o => s_cyc_o,
71
                s_ack_i => s_ack_i,
72
                s_err_i => s_err_i,
73
                s_rty_i => s_rty_i,
74
                s_we_o => s_we_o,
75
                s_stb_o => s_stb_o,
76
                a_data => a_data,
77
                a_addr => a_addr,
78
                a_rdn => a_rdn,
79
                a_wrn => a_wrn,
80
                a_cen => a_cen,
81
                a_byen => a_byen,
82
                a_waitn => a_waitn
83
        );
84
 
85
        -- Reset
86
        reset: process is
87
        begin
88
                rst_i <= '1';
89
                wait for 75ns;
90
                rst_i <= '0';
91
                wait;
92
        end process;
93
 
94
        -- Clock generator
95
        clock: process is
96
        begin
97
                wait for 25 ns;
98
                clk_i <= '1';
99
                wait for 25 ns;
100
                clk_i <= '0';
101
        end process;
102
 
103
        -- A WB slave which responses to each access    
104
        s_err_i <= '0';
105
        s_rty_i <= '0';
106
        s_ack_i <= s_stb_o;
107
        wb_slave: process is
108
        begin
109
                wait until clk_i'EVENT and clk_i = '1';
110
                if (s_stb_o = '1') then
111
--                      s_ack_i <= '1'; -- signal ready (one WS)
112
                        if (s_we_o = '0') then
113
                                s_dat_i <= s_adr_o(s_dat_i'RANGE);
114
                        end if;
115
                else
116
--                      s_ack_i <= '0';
117
                end if;
118
        end process;
119
 
120
        -- An async master generating requests
121
        master: process is
122
                variable addr: std_logic_vector(a_addr'RANGE) := (others => '0');
123
        begin
124
                a_cen <= '1';
125
                a_wrn <= '1';
126
                a_rdn <= '1';
127
                a_byen <= (others => '1');
128
                a_data <= (others => 'Z');
129
                a_addr <= addr;
130
                wait for 200ns;
131
                a_cen <= '0';
132
                wait for 120ns;
133
                a_rdn <= '0';
134
                if (a_waitn = '1') then
135
                        wait until a_waitn = '0'; -- wait until wait is released
136
                end if;
137
                if (a_waitn = '0') then
138
                        wait until a_waitn = '1'; -- wait until wait is released
139
                end if;
140
                wait for 150ns;
141
                a_rdn <= '1';
142
                a_cen <= '1';
143
                wait for 70ns;
144
                a_wrn <= '0';
145
                a_data <= a_addr(a_data'RANGE);
146
                wait for 20ns;
147
                a_cen <= '0';
148
                if (a_waitn = '1') then
149
                        wait until a_waitn = '0'; -- wait until wait is released
150
                end if;
151
                if (a_waitn = '0') then
152
                        wait until a_waitn = '1'; -- wait until wait is released
153
                end if;
154
                wait for 15ns;
155
                a_wrn <= '1';
156
                a_cen <= '1';
157
                addr := add_one(addr);
158
        end process;
159
end TB;
160
 
161
configuration TB_wb_async_master of wb_async_master_tb is
162
        for TB
163
                for UUT : wb_async_master
164
                        use entity work.wb_async_master(wb_async_master);
165
                end for;
166
        end for;
167
end TB_wb_async_master;
168
 

powered by: WebSVN 2.1.0

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