Skip to content

Commit 126f145

Browse files
committed
Fixed tb_event_pkg.
Some simulator versions can call impure functions initializing signals multiple times which is a problem for functions which have side-effects that can only be performed once.
1 parent 4e30fa1 commit 126f145

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

vunit/vhdl/data_types/test/tb_event_pkg.vhd

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,7 @@ architecture test_fixture of tb_event_pkg is
3535
signal acted_on_event_4 : boolean := false;
3636
signal acted_on_event_5 : boolean := false;
3737

38-
signal event_1 : event_t := new_event(get_id("tb_event_pkg:my_event_1"));
39-
signal event_2 : event_t := new_event(get_id("tb_event_pkg:my_event_2"));
40-
signal event_3 : event_t := new_event(get_id("tb_event_pkg:event_3"));
41-
signal event_4 : event_t := new_event("tb_event_pkg:my_event_4");
42-
signal event_5 : event_t := new_event;
43-
signal number_event : event_t := new_event;
38+
signal event_1, event_2, event_3, event_4, event_5, number_event : event_t := (others => 'Z');
4439
begin
4540
test_runner : process
4641
procedure activate_event(event_number : natural range 1 to 2; event_time : time; queue_idx : positive range request_queue'range) is
@@ -56,6 +51,19 @@ begin
5651
begin
5752
test_runner_setup(runner, runner_cfg);
5853

54+
-- Some simulator (versions) call the impure new_event functions multiple
55+
-- times if the signal is initialized when declared. This is interpreted as
56+
-- an attempt to create multiple events with the same name which is not allowed.
57+
-- To avoid this problem, the event signals are initialized after elaboration by
58+
-- the notifying process.
59+
event_1 <= new_event(get_id("tb_event_pkg:my_event_1"));
60+
event_2 <= new_event(get_id("tb_event_pkg:my_event_2"));
61+
event_3 <= new_event(get_id("tb_event_pkg:event_3"));
62+
event_4 <= new_event("tb_event_pkg:my_event_4");
63+
event_5 <= new_event;
64+
number_event <= new_event;
65+
wait for 0 ns;
66+
5967
while test_suite loop
6068
if run("Test getting event names") then
6169
check_equal(name(event_1), "my_event_1");

0 commit comments

Comments
 (0)