Add regression test for using void function in always_comb block

Check that variables used in void functions contribute to the sensitivity
list in a always_comb block.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
This commit is contained in:
Lars-Peter Clausen 2022-12-25 17:34:53 -08:00
parent a659ca09ce
commit 9a96ba62e4
3 changed files with 53 additions and 0 deletions

View File

@ -0,0 +1,51 @@
// Check that variables referenced in a void function contribute to the
// sensitivity list of a always_comb block.
module top;
logic passed;
logic [7:0] value;
integer counter;
function automatic void count(bit what);
counter = 0;
for (integer i = 0; i < $bits(value); i++) begin
if (value[i] == what)
counter += 1;
end
endfunction
always_comb begin
count(1'b1);
end
initial begin
passed = 1'b1;
value = 8'b0000_0000;
#1;
if (counter !== 0) begin
$display("Expected 0, got %d", counter);
passed = 1'b0;
end
value = 8'b0011_1100;
#1;
if (counter !== 4) begin
$display("Expected 4, got %d", counter);
passed = 1'b0;
end
value = 8'b1011_1101;
#1;
if (counter !== 6) begin
$display("Expected 6, got %d", counter);
passed = 1'b0;
end
if (passed) begin
$display("PASSED");
end else begin
$display("FAILED");
end
end
endmodule

View File

@ -76,6 +76,7 @@ always_comb_fail4 CE,-g2005-sv ivltests
always_comb_no_sens nornal,-g2005-sv ivltests gold=always_comb_no_sens.gold
always_comb_rfunc nornal,-g2005-sv ivltests
always_comb_trig normal,-g2005-sv ivltests
always_comb_void_func normal,-g2005-sv ivltests
always_comb_warn normal,-g2005-sv ivltests gold=always_comb_warn.gold
always_ff normal,-g2005-sv ivltests
always_ff_fail CE,-g2005-sv ivltests

View File

@ -69,6 +69,7 @@
# Verilog 95 does not support automatic tasks or functions.
always_comb_rfunc CE ivltests
always_comb_void_func CE ivltests
automatic_error11 CE ivltests
automatic_error12 CE ivltests
automatic_error13 CE ivltests