@@ -18,7 +18,7 @@ library vunit_lib;
1818context vunit_lib.vunit_context;
1919context vunit_lib.vc_context;
2020
21- entity tb_axis_loop is
21+ entity tb_py_axis_loop is
2222 generic (
2323 runner_cfg : string ;
2424 tb_path : string ;
@@ -27,7 +27,7 @@ entity tb_axis_loop is
2727 );
2828end entity ;
2929
30- architecture tb of tb_axis_loop is
30+ architecture tb of tb_py_axis_loop is
3131
3232 -- Simulation constants
3333
@@ -38,30 +38,27 @@ architecture tb of tb_axis_loop is
3838
3939 constant master_axi_stream : axi_stream_master_t := new_axi_stream_master(data_length => data_width);
4040 constant slave_axi_stream : axi_stream_slave_t := new_axi_stream_slave(data_length => data_width);
41-
42- -- Signals to/from the UUT from/to the verification components
43-
44- signal m_valid, m_ready, m_last, s_valid, s_ready, s_last : std_logic ;
45- signal m_data, s_data : std_logic_vector (data_length(master_axi_stream)- 1 downto 0 );
41+ constant m_axis : axi_stream_master_t := new_axi_stream_master(data_length => data_width);
42+ constant s_axis : axi_stream_slave_t := new_axi_stream_slave(data_length => data_width);
4643
4744 -- tb signals and variables
4845
4946 signal clk, rst, rstn : std_logic := '0' ;
5047 constant m_I : integer_array_t := load_csv(tb_path & csv_i);
5148 constant m_O : integer_array_t := new_2d(width (m_I), height(m_I), data_width, true );
52- signal start, done , saved : boolean := false ;
49+ signal start, sent , saved : boolean := false ;
5350
5451begin
5552
56- clk <= not clk after clk_period/ 2 ;
53+ clk <= not clk after ( clk_period/ 2 ) ;
5754 rstn <= not rst;
5855
5956 main: process
6057 procedure run_test is begin
6158 info(" Init test" );
6259 wait until rising_edge (clk); start <= true ;
6360 wait until rising_edge (clk); start <= false ;
64- wait until (done and saved and rising_edge (clk));
61+ wait until (sent and saved and rising_edge (clk));
6562 info(" Test done" );
6663 end procedure ;
6764 begin
@@ -78,42 +75,44 @@ begin
7875 wait ;
7976 end process ;
8077
78+ --
79+
8180 stimuli: process
8281 variable last : std_logic ;
8382 begin
83+ sent <= false ;
8484 wait until start and rising_edge (clk);
85- done <= false ;
86- wait until rising_edge (clk);
8785
8886 info(" Sending m_I of size " & to_string(height(m_I)) & "x" & to_string(width (m_I)) & " to UUT..." );
8987
9088 for y in 0 to height(m_I)- 1 loop
9189 for x in 0 to width (m_I)- 1 loop
9290 wait until rising_edge (clk);
9391 if x = width (m_I)- 1 then last := '1' ; else last := '0' ; end if ;
94- push_axi_stream(net, master_axi_stream , std_logic_vector (to_signed (get (m_I, x, y), data_width)) , tlast => last);
92+ push_axi_stream(net, m_axis , std_logic_vector (to_signed (get (m_I, x, y), data_width)) , tlast => last);
9593 end loop ;
9694 end loop ;
9795
9896 info(" m_I sent!" );
9997
10098 wait until rising_edge (clk);
101- done <= true ;
99+ sent <= true ;
100+ wait ;
102101 end process ;
103102
104103 save: process
105104 variable o : std_logic_vector (31 downto 0 );
106105 variable last : std_logic := '0' ;
107106 begin
108- wait until start and rising_edge (clk);
109107 saved <= false ;
108+ wait until start and rising_edge (clk);
110109 wait for 50 * clk_period;
111110
112111 info(" Receiving m_O of size " & to_string(height(m_O)) & "x" & to_string(width (m_O)) & " from UUT..." );
113112
114113 for y in 0 to height(m_O)- 1 loop
115114 for x in 0 to width (m_O)- 1 loop
116- pop_axi_stream(net, slave_axi_stream , tdata => o, tlast => last);
115+ pop_axi_stream(net, s_axis , tdata => o, tlast => last);
117116 if (x = width (m_O)- 1 ) and (last= '0' ) then
118117 error (" Something went wrong. Last misaligned!" );
119118 end if ;
@@ -130,57 +129,21 @@ begin
130129
131130 wait until rising_edge (clk);
132131 saved <= true ;
132+ wait ;
133133 end process ;
134134
135135--
136136
137- vunit_axism: entity vunit_lib.axi_stream_master
138- generic map (
139- master => master_axi_stream
140- )
141- port map (
142- aclk => clk,
143- tvalid => m_valid,
144- tready => m_ready,
145- tdata => m_data,
146- tlast => m_last
147- );
148-
149- vunit_axiss: entity vunit_lib.axi_stream_slave
150- generic map (
151- slave => slave_axi_stream
152- )
153- port map (
154- aclk => clk,
155- tvalid => s_valid,
156- tready => s_ready,
157- tdata => s_data,
158- tlast => s_last
159- );
160-
161- --
162-
163- uut: entity work.axis_buffer
164- generic map (
165- data_width => data_width,
166- fifo_depth => 4
167- )
168- port map (
169- s_axis_clk => clk,
170- s_axis_rstn => rstn,
171- s_axis_rdy => m_ready,
172- s_axis_data => m_data,
173- s_axis_valid => m_valid,
174- s_axis_strb => "1111" ,
175- s_axis_last => m_last,
176-
177- m_axis_clk => clk,
178- m_axis_rstn => rstn,
179- m_axis_valid => s_valid,
180- m_axis_data => s_data,
181- m_axis_rdy => s_ready,
182- m_axis_strb => open ,
183- m_axis_last => s_last
184- );
137+ uut_vc: entity work.tb_vc_axis_loop
138+ generic map (
139+ m_axis => m_axis,
140+ s_axis => s_axis,
141+ data_width => data_width,
142+ fifo_depth => 4
143+ )
144+ port map (
145+ clk => clk,
146+ rstn => rstn
147+ );
185148
186149end architecture ;
0 commit comments