55 lines
981 B
Coq
55 lines
981 B
Coq
|
|
// Check that non-blocking event control assignments with multiple events in the
|
||
|
|
// event control expression are supported.
|
||
|
|
|
||
|
|
module test;
|
||
|
|
reg failed = 1'b0;
|
||
|
|
|
||
|
|
`define check(val, exp) \
|
||
|
|
if (val !== exp) begin \
|
||
|
|
$display("FAILED. Expected %d, got %d.", exp, val); \
|
||
|
|
failed = 1'b1; \
|
||
|
|
end
|
||
|
|
|
||
|
|
integer x = 0;
|
||
|
|
|
||
|
|
event e1, e2, e3;
|
||
|
|
|
||
|
|
initial begin
|
||
|
|
// Any of them should trigger the event
|
||
|
|
x <= @(e1 or e2 or e3) x + 1;
|
||
|
|
#1
|
||
|
|
`check(x, 0);
|
||
|
|
->e1;
|
||
|
|
`check(x, 1);
|
||
|
|
|
||
|
|
x <= @(e1 or e2 or e3) x + 1;
|
||
|
|
#1
|
||
|
|
`check(x, 1);
|
||
|
|
->e2;
|
||
|
|
`check(x, 2);
|
||
|
|
|
||
|
|
// Alternative syntax, but still the same behavior
|
||
|
|
x <= @(e1, e2, e3) x + 1;
|
||
|
|
#1
|
||
|
|
`check(x, 2);
|
||
|
|
->e3;
|
||
|
|
`check(x, 3);
|
||
|
|
|
||
|
|
// In combination with repeat
|
||
|
|
x <= repeat(3) @(e1, e2, e3) x + 1;
|
||
|
|
#1
|
||
|
|
`check(x, 3);
|
||
|
|
->e1;
|
||
|
|
`check(x, 3);
|
||
|
|
->e2;
|
||
|
|
`check(x, 3);
|
||
|
|
->e3;
|
||
|
|
`check(x, 4);
|
||
|
|
|
||
|
|
if (!failed) begin
|
||
|
|
$display("PASSED");
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
endmodule
|