Skip to content

Commit 9b864c4

Browse files
committed
Add support for unconstrained handle fields
1 parent d89affc commit 9b864c4

File tree

3 files changed

+67
-56
lines changed

3 files changed

+67
-56
lines changed

vunit/vc/vc_template.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
constant custom_checker : checker_t := new_checker(get_logger("vc_check"));
4444
4545
impure function create_handle return ${vc_handle_t} is
46-
variable handle : ${vc_handle_t};
4746
variable logger : logger_t := ${default_logger};
4847
variable actor : actor_t := ${default_actor};
4948
variable checker : checker_t := ${default_checker};

vunit/vc/vci_template.py

Lines changed: 46 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,41 @@
4949
constant checker_logger3 : logger_t := get_logger("checker3");
5050
constant checker3 : checker_t := new_checker(checker_logger3);
5151
52-
variable handle1, handle2, handle3 : ${vc_handle_t};
53-
variable std_cfg1, std_cfg2, std_cfg3 : std_cfg_t;
52+
constant actor4 : actor_t := new_actor("actor4");
53+
constant logger4 : logger_t := get_logger("logger4");
54+
constant checker_logger4 : logger_t := get_logger("checker4");
55+
constant checker4 : checker_t := new_checker(checker_logger4);
56+
57+
constant actor5 : actor_t := new_actor("actor5");
58+
constant logger5 : logger_t := get_logger("logger5");
59+
constant checker_logger5 : logger_t := get_logger("checker5");
60+
constant checker5 : checker_t := new_checker(checker_logger5);
61+
62+
constant actor6 : actor_t := new_actor("actor6");
63+
constant logger6 : logger_t := get_logger("logger6");
64+
constant checker_logger6 : logger_t := get_logger("checker6");
65+
constant checker6 : checker_t := new_checker(checker_logger6);
66+
67+
constant actor7 : actor_t := new_actor("actor7");
68+
constant logger7 : logger_t := get_logger("logger7");
69+
constant checker_logger7 : logger_t := get_logger("checker7");
70+
constant checker7 : checker_t := new_checker(checker_logger7);
71+
72+
${handle1}
73+
${handle2}
74+
${handle3}
75+
${handle4}
76+
${handle5}
77+
${handle6}
78+
${handle7}
79+
80+
variable std_cfg1, std_cfg2, std_cfg3, std_cfg4 : std_cfg_t;
81+
variable std_cfg5, std_cfg6, std_cfg7 : std_cfg_t;
5482
begin
5583
test_runner_setup(runner, runner_cfg);
5684
5785
while test_suite loop
5886
if run("Test standard configuration") then
59-
${handle1}
6087
std_cfg1 := get_std_cfg(handle1);
6188
6289
check(get_actor(std_cfg1) = actor1, "Failed to configure actor with ${vc_constructor_name}");
@@ -65,16 +92,12 @@
6592
check(unexpected_msg_type_policy(std_cfg1) = fail,
6693
"Failed to configure unexpected_msg_type_policy = fail with ${vc_constructor_name}");
6794
68-
${handle2}
6995
std_cfg2 := get_std_cfg(handle2);
7096
7197
check(unexpected_msg_type_policy(std_cfg2) = ignore,
7298
"Failed to configure unexpected_msg_type_policy = ignore with ${vc_constructor_name}");
7399
74100
elsif run("Test handle independence") then
75-
${handle1}
76-
${handle3}
77-
78101
std_cfg1 := get_std_cfg(handle1);
79102
std_cfg2 := get_std_cfg(handle2);
80103
check(get_actor(std_cfg1) /= get_actor(std_cfg2),
@@ -87,42 +110,37 @@
87110
"unexpected_msg_type_policy shared between handles created by ${vc_constructor_name}");
88111
89112
elsif run("Test default logger") then
90-
${handle4}
91-
std_cfg1 := get_std_cfg(handle1);
92-
check(get_logger(std_cfg1) /= null_logger,
113+
std_cfg3 := get_std_cfg(handle3);
114+
check(get_logger(std_cfg3) /= null_logger,
93115
"No valid default logger (null_logger) created by ${vc_constructor_name}");
94-
check(get_logger(std_cfg1) /= default_logger,
116+
check(get_logger(std_cfg3) /= default_logger,
95117
"No valid default logger (default_logger) created by ${vc_constructor_name}");
96118
97-
${handle5}
98-
std_cfg2 := get_std_cfg(handle2);
99-
check(get_logger(std_cfg2) /= null_logger,
119+
std_cfg4 := get_std_cfg(handle4);
120+
check(get_logger(std_cfg4) /= null_logger,
100121
"No valid default logger (null_logger) created by ${vc_constructor_name}");
101-
check(get_logger(std_cfg2) /= default_logger,
122+
check(get_logger(std_cfg4) /= default_logger,
102123
"No valid default logger (default_logger) created by ${vc_constructor_name}");
103124
104125
elsif run("Test default checker") then
105-
${handle6}
106-
std_cfg1 := get_std_cfg(handle1);
107-
check(get_checker(std_cfg1) /= null_checker,
126+
std_cfg5 := get_std_cfg(handle5);
127+
check(get_checker(std_cfg5) /= null_checker,
108128
"No valid default checker (null_checker) created by ${vc_constructor_name}");
109-
check(get_checker(std_cfg1) /= default_checker,
129+
check(get_checker(std_cfg5) /= default_checker,
110130
"No valid default checker (default_checker) created by ${vc_constructor_name}");
111131
112-
${handle7}
113-
std_cfg2 := get_std_cfg(handle2);
114-
check(get_checker(std_cfg2) /= null_checker,
132+
std_cfg6 := get_std_cfg(handle6);
133+
check(get_checker(std_cfg6) /= null_checker,
115134
"No valid default checker (null_checker) created by ${vc_constructor_name}");
116-
check(get_checker(std_cfg2) /= default_checker,
135+
check(get_checker(std_cfg6) /= default_checker,
117136
"No valid default checker (default_checker) created by ${vc_constructor_name}");
118137
119-
${handle8}
120-
std_cfg3 := get_std_cfg(handle3);
121-
check(get_checker(std_cfg3) /= null_checker,
138+
std_cfg7 := get_std_cfg(handle7);
139+
check(get_checker(std_cfg7) /= null_checker,
122140
"No valid default checker (null_checker) created by ${vc_constructor_name}");
123-
check(get_checker(std_cfg3) /= default_checker,
141+
check(get_checker(std_cfg7) /= default_checker,
124142
"No valid default checker (default_checker) created by ${vc_constructor_name}");
125-
check(get_logger(get_checker(std_cfg3)) = logger3,
143+
check(get_logger(get_checker(std_cfg7)) = logger6,
126144
"Default checker not based on logger provided to ${vc_constructor_name}");
127145
128146
end if;

vunit/vc/verification_component_interface.py

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -339,8 +339,9 @@ def create_handle_assignment(
339339
unexpected_msg_type_policy="fail",
340340
):
341341

342-
handle_assignment = " %s := %s(\n" % (
342+
handle_assignment = " constant %s : %s := %s(\n" % (
343343
handle_name,
344+
self.vc_constructor.return_type_mark,
344345
self.vc_constructor.identifier,
345346
)
346347
for parameter in unspecified_parameters:
@@ -352,7 +353,7 @@ def create_handle_assignment(
352353
"unexpected_msg_type_policy",
353354
]:
354355
continue
355-
handle_assignment += " %s => %s,\n" % (
356+
handle_assignment += " %s => %s,\n" % (
356357
identifier,
357358
identifier,
358359
)
@@ -363,9 +364,9 @@ def create_handle_assignment(
363364
unexpected_msg_type_policy=unexpected_msg_type_policy,
364365
).items():
365366
if actual:
366-
handle_assignment += " %s => %s,\n" % (formal, actual)
367+
handle_assignment += " %s => %s,\n" % (formal, actual)
367368

368-
handle_assignment = handle_assignment[:-2] + "\n );"
369+
handle_assignment = handle_assignment[:-2] + "\n );"
369370

370371
return handle_assignment
371372

@@ -389,40 +390,33 @@ def create_handle_assignment(
389390
unexpected_msg_type_policy="ignore",
390391
),
391392
handle3=create_handle_assignment(
392-
"handle2",
393-
actor="actor2",
394-
logger="logger2",
395-
checker="checker2",
396-
unexpected_msg_type_policy="ignore",
393+
"handle3",
394+
actor="actor3",
395+
checker="checker3",
396+
unexpected_msg_type_policy="fail",
397397
),
398398
handle4=create_handle_assignment(
399-
"handle1",
400-
actor="actor1",
401-
checker="checker1",
399+
"handle4",
400+
actor="actor4",
401+
logger="null_logger",
402+
checker="checker4",
402403
unexpected_msg_type_policy="fail",
403404
),
404405
handle5=create_handle_assignment(
405-
"handle2",
406-
actor="actor2",
407-
logger="null_logger",
408-
checker="checker2",
406+
"handle5",
407+
actor="actor5",
409408
unexpected_msg_type_policy="fail",
410409
),
411410
handle6=create_handle_assignment(
412-
"handle1",
413-
actor="actor1",
414-
unexpected_msg_type_policy="fail",
415-
),
416-
handle7=create_handle_assignment(
417-
"handle2",
418-
actor="actor2",
411+
"handle6",
412+
actor="actor6",
419413
checker="null_checker",
420414
unexpected_msg_type_policy="fail",
421415
),
422-
handle8=create_handle_assignment(
423-
"handle3",
424-
actor="actor3",
425-
logger="logger3",
416+
handle7=create_handle_assignment(
417+
"handle7",
418+
actor="actor7",
419+
logger="logger6",
426420
unexpected_msg_type_policy="fail",
427421
),
428422
)

0 commit comments

Comments
 (0)