iverilog/ivtest/ivltests/drive_strength4.v

63 lines
1.2 KiB
Verilog

// Check that drive strength can be specified between the net type and the data
// type in a net declaration and that vector gate arrays resolve strengths
// correctly.
module test;
reg [7:0] pullval;
wire (weak0, weak1) [7:0] value = pullval;
reg [7:0] en0;
reg [7:0] en1;
reg failed = 1'b0;
`define check(expr, val) \
if ((expr) !== (val)) begin \
$display("FAILED(%0d): `%s`, expected %0h, got %0h", `__LINE__, \
`"expr`", (val), (expr)); \
failed = 1'b1; \
end
buf (highz0, strong1) drive0 [7:0] (value, en0);
not (strong0, highz1) drive1 [7:0] (value, en1);
initial begin
en0 = 8'h00;
en1 = 8'h00;
pullval = 8'hff;
#1 `check(value, 8'hff)
pullval = 8'h00;
#1 `check(value, 8'h00)
en0 = 8'haa;
pullval = 8'hff;
#1 `check(value, 8'hff)
pullval = 8'h00;
#1 `check(value, 8'haa)
en0 = 8'h00;
en1 = 8'hff;
pullval = 8'hff;
#1 `check(value, 8'h00)
pullval = 8'h00;
#1 `check(value, 8'h00)
en0 = 8'hff;
en1 = 8'hff;
pullval = 8'hff;
#1 `check(value, 8'hxx)
pullval = 8'h00;
#1 `check(value, 8'hxx)
if (!failed) begin
$display("PASSED");
end
end
endmodule