Skip to content

Commit 2afaa7a

Browse files
committed
Temp commit to transfer files. Bug in GHDL prevents debugging.
Separate pkg and body; Add overloaded functions
1 parent 0795b2b commit 2afaa7a

22 files changed

Lines changed: 348 additions & 252 deletions

vunit/vhdl/verification_components/src/avalon_sink.vhd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use ieee.std_logic_1164.all;
1313

1414
context work.vunit_context;
1515
context work.com_context;
16-
use work.stream_slave_pkg.all;
16+
use work.stream_pkg.all;
1717
use work.avalon_stream_pkg.all;
1818

1919
library osvvm;

vunit/vhdl/verification_components/src/avalon_source.vhd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use ieee.std_logic_1164.all;
1010

1111
context work.vunit_context;
1212
context work.com_context;
13-
use work.stream_master_pkg.all;
13+
use work.stream_pkg.all;
1414
use work.avalon_stream_pkg.all;
1515
use work.queue_pkg.all;
1616
use work.sync_pkg.all;

vunit/vhdl/verification_components/src/avalon_stream_pkg.vhd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ library ieee;
88
use ieee.std_logic_1164.all;
99

1010
use work.logger_pkg.all;
11-
use work.stream_master_pkg.all;
12-
use work.stream_slave_pkg.all;
11+
use work.stream_pkg.all;
12+
use work.stream_pkg.all;
1313
context work.com_context;
1414
context work.data_types_context;
1515

vunit/vhdl/verification_components/src/axi_stream_master.vhd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use ieee.std_logic_1164.all;
99

1010
context work.vunit_context;
1111
context work.com_context;
12-
use work.stream_master_pkg.all;
12+
use work.stream_pkg.all;
1313
use work.axi_stream_pkg.all;
1414
use work.queue_pkg.all;
1515
use work.sync_pkg.all;

vunit/vhdl/verification_components/src/axi_stream_pkg.vhd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ use ieee.std_logic_1164.all;
1010
use work.logger_pkg.all;
1111
use work.checker_pkg.all;
1212
use work.check_pkg.all;
13-
use work.stream_master_pkg.all;
14-
use work.stream_slave_pkg.all;
13+
use work.stream_pkg.all;
14+
use work.stream_pkg.all;
1515
use work.sync_pkg.all;
1616
context work.vunit_context;
1717
context work.com_context;

vunit/vhdl/verification_components/src/axi_stream_slave.vhd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use ieee.std_logic_1164.all;
99

1010
context work.vunit_context;
1111
context work.com_context;
12-
use work.stream_slave_pkg.all;
12+
use work.stream_pkg.all;
1313
use work.axi_stream_pkg.all;
1414
use work.sync_pkg.all;
1515
use work.string_ptr_pkg.all;

vunit/vhdl/verification_components/src/stream_master_pkg-body.vhd

Lines changed: 0 additions & 31 deletions
This file was deleted.

vunit/vhdl/verification_components/src/stream_master_pkg.vhd

Lines changed: 0 additions & 32 deletions
This file was deleted.

vunit/vhdl/verification_components/src/stream_pkg-body.vhd

Lines changed: 197 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,18 @@
22
-- License, v. 2.0. If a copy of the MPL was not distributed with this file,
33
-- You can obtain one at http://mozilla.org/MPL/2.0/.
44
--
5-
-- Copyright (c) 2014-2019, Lars Asplund lars.anders.asplund@gmail.com
5+
-- Copyright (c) 2014-2018, Lars Asplund lars.anders.asplund@gmail.com
6+
7+
-- Stream master & slave verification components
68

79
library ieee;
810
use ieee.std_logic_1164.all;
911

1012
context work.vunit_context;
1113
context work.com_context;
14+
use work.sync_pkg.all;
1215

1316
package body stream_pkg is
14-
1517
impure function new_stream_master return stream_master_t is
1618
begin
1719
return (p_actor => new_actor);
@@ -22,18 +24,37 @@ package body stream_pkg is
2224
return (p_actor => new_actor);
2325
end;
2426

27+
procedure push(msg : msg_t; transaction : stream_transaction_t) is
28+
begin
29+
push_std_ulogic_vector(msg, transaction.data);
30+
push_boolean(msg, transaction.last);
31+
end;
32+
33+
impure function pop(msg : msg_t) return stream_transaction_t is
34+
begin
35+
return (data => pop_std_ulogic_vector(msg), last => pop_boolean(msg));
36+
end;
37+
2538
procedure push_stream(signal net : inout network_t;
2639
stream : stream_master_t;
27-
data : std_logic_vector;
28-
last : boolean := false) is
40+
transaction : stream_transaction_t) is
2941
variable msg : msg_t := new_msg(stream_push_msg);
30-
constant normalized_data : std_logic_vector(data'length-1 downto 0) := data;
3142
begin
32-
push_std_ulogic_vector(msg, normalized_data);
33-
push_boolean(msg, last);
43+
push_stream_transaction(msg, transaction);
3444
send(net, stream.p_actor, msg);
3545
end;
3646

47+
procedure push_stream(signal net : inout network_t;
48+
stream : stream_master_t;
49+
data : std_logic_vector;
50+
last : boolean := false) is
51+
variable transaction : stream_transaction_t(data(data'range));
52+
begin
53+
transaction.data := data;
54+
transaction.last := last;
55+
push_stream(net, stream, transaction);
56+
end;
57+
3758
procedure pop_stream(signal net : inout network_t;
3859
stream : stream_slave_t;
3960
variable reference : inout stream_reference_t) is
@@ -44,26 +65,42 @@ package body stream_pkg is
4465

4566
procedure await_pop_stream_reply(signal net : inout network_t;
4667
variable reference : inout stream_reference_t;
47-
variable data : out std_logic_vector;
48-
variable last : out boolean) is
68+
variable transaction : out stream_transaction_t) is
4969
variable reply_msg : msg_t;
5070
begin
5171
receive_reply(net, reference, reply_msg);
52-
data := pop_std_ulogic_vector(reply_msg);
53-
last := pop_boolean(reply_msg);
72+
transaction := pop_stream_transaction(reply_msg);
5473
delete(reference);
5574
delete(reply_msg);
5675
end;
5776

77+
procedure await_pop_stream_reply(signal net : inout network_t;
78+
variable reference : inout stream_reference_t;
79+
variable data : out std_logic_vector;
80+
variable last : out boolean) is
81+
variable transaction : stream_transaction_t(data(data'range));
82+
begin
83+
await_pop_stream_reply(net, reference, transaction);
84+
data := transaction.data;
85+
last := transaction.last;
86+
end;
87+
5888
procedure await_pop_stream_reply(signal net : inout network_t;
5989
variable reference : inout stream_reference_t;
6090
variable data : out std_logic_vector) is
61-
variable reply_msg : msg_t;
91+
variable transaction : stream_transaction_t(data(data'range));
6292
begin
63-
receive_reply(net, reference, reply_msg);
64-
data := pop_std_ulogic_vector(reply_msg);
65-
delete(reference);
66-
delete(reply_msg);
93+
await_pop_stream_reply(net, reference, transaction);
94+
data := transaction.data;
95+
end;
96+
97+
procedure pop_stream(signal net : inout network_t;
98+
stream : stream_slave_t;
99+
variable transaction : out stream_transaction_t) is
100+
variable reference : stream_reference_t;
101+
begin
102+
pop_stream(net, stream, reference);
103+
await_pop_stream_reply(net, reference, transaction);
67104
end;
68105

69106
procedure pop_stream(signal net : inout network_t;
@@ -87,16 +124,153 @@ package body stream_pkg is
87124

88125
procedure check_stream(signal net : inout network_t;
89126
stream : stream_slave_t;
90-
expected : std_logic_vector;
91-
last : boolean := false;
127+
expected : stream_transaction_t;
92128
msg : string := "") is
93-
variable got_data : std_logic_vector(expected'range);
94-
variable got_last : boolean;
129+
variable got : stream_transaction_t(data(expected.data'range));
95130
begin
96-
pop_stream(net, stream, got_data, got_last);
97-
check_equal(got_data, expected, msg);
98-
check_equal(got_last, last, msg);
131+
pop_stream(net, stream, got);
132+
check_equal(got.data, expected.data, msg);
133+
check_equal(got.last, expected.last, msg);
134+
end;
135+
136+
procedure check_stream(signal net : inout network_t;
137+
stream : stream_slave_t;
138+
expected_data : std_logic_vector;
139+
expected_last : boolean := false;
140+
msg : string := "") is
141+
variable expected : stream_transaction_t(data(expected_data'range));
142+
begin
143+
expected.data := expected_data;
144+
expected.last := expected_last;
145+
check_stream(net, stream, expected, msg);
146+
end;
147+
148+
procedure wait_until_idle(signal net : inout network_t;
149+
stream : stream_master_t) is
150+
begin
151+
wait_until_idle(net, stream.p_actor);
99152
end procedure;
100153

154+
procedure wait_until_idle(signal net : inout network_t;
155+
stream : stream_slave_t) is
156+
begin
157+
wait_until_idle(net, stream.p_actor);
158+
end procedure;
159+
160+
procedure wait_for_time(signal net : inout network_t;
161+
stream : stream_master_t;
162+
delay : delay_length) is
163+
begin
164+
wait_for_time(net, stream.p_actor, delay);
165+
end procedure;
166+
167+
procedure wait_for_time(signal net : inout network_t;
168+
stream : stream_slave_t;
169+
delay : delay_length) is
170+
begin
171+
wait_for_time(net, stream.p_actor, delay);
172+
end procedure;
173+
174+
procedure receive(signal net : inout network_t;
175+
stream : stream_master_t;
176+
variable msg : out msg_t) is
177+
begin
178+
receive(net, stream.p_actor, msg);
179+
end procedure;
180+
181+
procedure receive(signal net : inout network_t;
182+
stream : stream_slave_t;
183+
variable msg : out msg_t) is
184+
begin
185+
receive(net, stream.p_actor, msg);
186+
end procedure;
187+
188+
procedure receive_stream(signal net : inout network_t;
189+
stream : stream_master_t;
190+
variable transaction : out stream_transaction_t) is
191+
variable msg : msg_t;
192+
variable msg_type : msg_type_t;
193+
begin
194+
loop
195+
receive(net, stream, msg);
196+
msg_type := message_type(msg);
197+
handle_sync_message(net, msg_type, msg);
198+
if msg_type = stream_push_msg then
199+
transaction := pop_stream_transaction(msg);
200+
delete(msg);
201+
exit;
202+
else
203+
unexpected_msg_type(msg_type);
204+
end if;
205+
end loop;
206+
end;
207+
208+
procedure receive_stream(signal net : inout network_t;
209+
stream : stream_master_t;
210+
variable data : out std_ulogic_vector;
211+
variable last : out boolean) is
212+
variable transaction : stream_transaction_t(data(data'range));
213+
begin
214+
receive_stream(net, stream, transaction);
215+
data := transaction.data;
216+
last := transaction.last;
217+
end;
218+
219+
procedure receive_stream(signal net : inout network_t;
220+
stream : stream_master_t;
221+
variable data : out std_ulogic_vector) is
222+
variable transaction : stream_transaction_t(data(data'range));
223+
begin
224+
receive_stream(net, stream, transaction);
225+
data := transaction.data;
226+
end;
227+
228+
procedure receive_stream(signal net : inout network_t;
229+
stream : stream_slave_t;
230+
variable msg : out msg_t) is
231+
variable msg_type : msg_type_t;
232+
begin
233+
loop
234+
receive(net, stream, msg);
235+
msg_type := message_type(msg);
236+
handle_sync_message(net, msg_type, msg);
237+
if msg_type = stream_pop_msg then
238+
exit;
239+
else
240+
unexpected_msg_type(msg_type);
241+
end if;
242+
end loop;
243+
end;
244+
245+
procedure reply_stream(signal net : inout network_t;
246+
variable msg : inout msg_t;
247+
transaction : stream_transaction_t) is
248+
variable reply_msg : msg_t;
249+
begin
250+
push_stream_transaction(msg, transaction);
251+
reply(net, msg, reply_msg);
252+
delete(reply_msg);
253+
end;
254+
255+
procedure reply_stream(signal net : inout network_t;
256+
variable msg : inout msg_t;
257+
data : std_ulogic_vector;
258+
last : boolean) is
259+
variable transaction : stream_transaction_t(data(data'range));
260+
begin
261+
transaction.data := data;
262+
transaction.last := last;
263+
reply_stream(net, msg, transaction);
264+
end;
265+
266+
procedure reply_stream(signal net : inout network_t;
267+
variable msg : inout msg_t;
268+
data : std_ulogic_vector) is
269+
variable transaction : stream_transaction_t(data(data'range));
270+
begin
271+
transaction.data := data;
272+
reply_stream(net, msg, transaction);
273+
end;
274+
101275
end package body;
102276

0 commit comments

Comments
 (0)