Files
iverilog/ivtest/ivltests/force_release_wire8_pv.v
T
Stephen Williams cea237b407 Add ivtest to the iverilog source tree
By adding ivtest to the iverilog source tree, it is easier to keep
the regression test synchronized with the source that is being tested.
This should be especially helpful for PRs that add a new feature, and
have a matching ivtest PR with the regression test for that feature.
2022-01-15 10:18:50 -08:00

63 lines
1.6 KiB
Verilog

module test;
reg fail = 1'b0;
reg [3:0] in = 4'b0;
wire [3:0] bus;
wire [3:0] val;
assign (pull1, pull0) bus = in;
assign val = bus;
initial begin
// Check the initial value.
#1 if (val !== 4'b0) begin
$display("FAILED: initial value, got %b, expected 0000.", val);
fail = 1'b1;
end
// Check a bit force and verify a normal bit assign does nothing.
#1 force bus[0] = 1'b1;
#1 in[0] = 1'bz;
#1 if (val !== 4'b0001) begin
$display("FAILED: force of bus[0], got %b, expected 0001.", val);
fail = 1'b1;
end
// Check a part force.
#1 force bus[3:2] = 2'b11;
#1 if (val !== 4'b1101) begin
$display("FAILED: force of bus[3:2], got %b, expected 1101.", val);
fail = 1'b1;
end
// Check that we can change an unforced bit.
#1 in[1] = 1'bz;
#1 if (val !== 4'b11z1) begin
$display("FAILED: assignment of bus[1], got %b, expected 11z1.", val);
fail = 1'b1;
end
#1 in[1] = 1'b0;
// Check a bit release.
#1 release bus[0];
#1 if (val !== 4'b110z) begin
$display("FAILED: release of bus[0], got %b, expected 110z.", val);
fail = 1'b1;
end
// Check a part release.
#1 release bus[3:2];
#1 if (val !== 4'b000z) begin
$display("FAILED: release of bus[3:2], got %b, expected 000z.", val);
fail = 1'b1;
end
// Check a force from the upper thread bits (>= 8).
#1 force bus[2:1] = 2'bx1;
#1 if (val !== 4'b0x1z) begin
$display("FAILED: force of bus[2:1], got %b, expected 0x1z.", val);
fail = 1'b1;
end
if (!fail) $display("PASSED");
end
endmodule