60 lines
1.6 KiB
Coq
60 lines
1.6 KiB
Coq
|
|
module test;
|
||
|
|
reg fail = 1'b0;
|
||
|
|
reg [3:0] bus = 4'b0;
|
||
|
|
|
||
|
|
initial begin
|
||
|
|
// Check the initial value.
|
||
|
|
if (bus !== 4'b0) begin
|
||
|
|
$display("FAILED: initial value, got %b, expected 0000.", bus);
|
||
|
|
fail = 1'b1;
|
||
|
|
end
|
||
|
|
|
||
|
|
// Check a bit assign and verify a normal bit assign does nothing.
|
||
|
|
#1 assign bus[0] = 1'b1;
|
||
|
|
bus[0] = 1'bz;
|
||
|
|
if (bus !== 4'b0001) begin
|
||
|
|
$display("FAILED: assign of bus[0], got %b, expected 0001.", bus);
|
||
|
|
fail = 1'b1;
|
||
|
|
end
|
||
|
|
|
||
|
|
// Check a part assign.
|
||
|
|
#1 assign bus[3:2] = 2'b11;
|
||
|
|
if (bus !== 4'b1101) begin
|
||
|
|
$display("FAILED: assign of bus[3:2], got %b, expected 1101.", bus);
|
||
|
|
fail = 1'b1;
|
||
|
|
end
|
||
|
|
|
||
|
|
// Check that we can change an unassigned bit.
|
||
|
|
#1 bus[1] = 1'bz;
|
||
|
|
if (bus !== 4'b11z1) begin
|
||
|
|
$display("FAILED: assignment of bus[1], got %b, expected 11z1.", bus);
|
||
|
|
fail = 1'b1;
|
||
|
|
end
|
||
|
|
|
||
|
|
// Check a bit deassign.
|
||
|
|
#1 deassign bus[0];
|
||
|
|
bus = 4'b000z;
|
||
|
|
if (bus !== 4'b110z) begin
|
||
|
|
$display("FAILED: deassign of bus[0], got %b, expected 110z.", bus);
|
||
|
|
fail = 1'b1;
|
||
|
|
end
|
||
|
|
|
||
|
|
// Check a part deassign (we keep the old value if not changed).
|
||
|
|
#1 deassign bus[3:2];
|
||
|
|
bus[3] = 1'b0;
|
||
|
|
if (bus !== 4'b010z) begin
|
||
|
|
$display("FAILED: deassign of bus[3:2], got %b, expected 010z.", bus);
|
||
|
|
fail = 1'b1;
|
||
|
|
end
|
||
|
|
|
||
|
|
// Check an assign from the upper thread bits >= 8.
|
||
|
|
#1 assign bus[2:1] = 2'bx1;
|
||
|
|
if (bus !== 4'b0x1z) begin
|
||
|
|
$display("FAILED: assign of bus[2:1], got %b, expected 0x1z.", bus);
|
||
|
|
fail = 1'b1;
|
||
|
|
end
|
||
|
|
|
||
|
|
if (!fail) $display("PASSED");
|
||
|
|
end
|
||
|
|
endmodule
|