Skip to content

Commit 97c1538

Browse files
committed
style(examples/vhdl/array_axis_vcs): add tb_vc_axis_loop.vhd to be used by both tb_py_* and tb_c_*
1 parent a45f4d4 commit 97c1538

2 files changed

Lines changed: 105 additions & 64 deletions

File tree

examples/vhdl/array_axis_vcs/src/test/tb_axis_loop.vhd renamed to examples/vhdl/array_axis_vcs/src/test/tb_py_axis_loop.vhd

Lines changed: 27 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ library vunit_lib;
1818
context vunit_lib.vunit_context;
1919
context 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
);
2828
end 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

5451
begin
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

186149
end architecture;
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
-- This Source Code Form is subject to the terms of the Mozilla Public
2+
-- License, v. 2.0. If a copy of the MPL was not distributed with this file,
3+
-- You can obtain one at http://mozilla.org/MPL/2.0/.
4+
--
5+
-- Copyright (c) 2014-2019, Lars Asplund lars.anders.asplund@gmail.com
6+
7+
library ieee;
8+
context ieee.ieee_std_context;
9+
10+
library vunit_lib;
11+
context vunit_lib.vunit_context;
12+
context vunit_lib.vc_context;
13+
14+
entity tb_vc_axis_loop is
15+
generic (
16+
m_axis : axi_stream_master_t;
17+
s_axis : axi_stream_slave_t;
18+
data_width : natural;
19+
fifo_depth : natural
20+
);
21+
port (
22+
clk, rstn: in std_logic
23+
);
24+
end entity;
25+
26+
architecture vc of tb_vc_axis_loop is
27+
28+
signal m_valid, m_ready, m_last, s_valid, s_ready, s_last : std_logic;
29+
signal m_data, s_data : std_logic_vector(data_length(m_axis)-1 downto 0);
30+
31+
begin
32+
33+
vunit_axism: entity vunit_lib.axi_stream_master
34+
generic map (
35+
master => m_axis)
36+
port map (
37+
aclk => clk,
38+
tvalid => m_valid,
39+
tready => m_ready,
40+
tdata => m_data,
41+
tlast => m_last);
42+
43+
vunit_axiss: entity vunit_lib.axi_stream_slave
44+
generic map (
45+
slave => s_axis)
46+
port map (
47+
aclk => clk,
48+
tvalid => s_valid,
49+
tready => s_ready,
50+
tdata => s_data,
51+
tlast => s_last);
52+
53+
--
54+
55+
uut: entity work.axis_buffer
56+
generic map (
57+
data_width => data_width,
58+
fifo_depth => fifo_depth
59+
)
60+
port map (
61+
s_axis_clk => clk,
62+
s_axis_rstn => rstn,
63+
s_axis_rdy => m_ready,
64+
s_axis_data => m_data,
65+
s_axis_valid => m_valid,
66+
s_axis_strb => "1111",
67+
s_axis_last => m_last,
68+
69+
m_axis_clk => clk,
70+
m_axis_rstn => rstn,
71+
m_axis_valid => s_valid,
72+
m_axis_data => s_data,
73+
m_axis_rdy => s_ready,
74+
m_axis_strb => open,
75+
m_axis_last => s_last
76+
);
77+
78+
end architecture;

0 commit comments

Comments
 (0)