mirror of
https://github.com/steveicarus/iverilog.git
synced 2026-09-04 00:31:42 +02:00
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.
164 lines
4.0 KiB
Verilog
164 lines
4.0 KiB
Verilog
// Check that when the right hand operand of a shift operation
|
|
// contains 'x' or 'z' bits, the result is undefined.
|
|
module test;
|
|
reg pass;
|
|
reg signed [3:0] lhs;
|
|
reg [3:0] rhs;
|
|
reg [3:0] res;
|
|
|
|
wire [3:0] res1 = lhs << rhs;
|
|
wire [3:0] res2 = lhs >> rhs;
|
|
wire [3:0] res3 = lhs >>> rhs;
|
|
|
|
wire [3:0] res4 = lhs << 4'b000x;
|
|
wire [3:0] res5 = lhs >> 4'b00x0;
|
|
wire [3:0] res6 = lhs >>> 4'b0z00;
|
|
|
|
wire [3:0] res7 = 4'd1 << 4'b000x;
|
|
wire [3:0] res8 = 4'd1 >> 4'b00x0;
|
|
wire [3:0] res9 = 4'd1 >>> 4'b0z00;
|
|
|
|
wire [3:0] res10 = 4'd0 << rhs;
|
|
wire [3:0] res11 = 4'd0 >> rhs;
|
|
wire [3:0] res12 = 4'd0 >>> rhs;
|
|
|
|
initial begin
|
|
pass = 1'b1;
|
|
lhs = 4'd1;
|
|
|
|
if (res1 !== 4'bxxxx) begin
|
|
$display("FAILED test 1, expected 4'bxxxx, got 4'b%b", res1);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
if (res2 !== 4'bxxxx) begin
|
|
$display("FAILED test 2, expected 4'bxxxx, got 4'b%b", res2);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
if (res3 !== 4'bxxxx) begin
|
|
$display("FAILED test 3, expected 4'bxxxx, got 4'b%b", res3);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
if (res4 !== 4'bxxxx) begin
|
|
$display("FAILED test 4, expected 4'bxxxx, got 4'b%b", res4);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
if (res5 !== 4'bxxxx) begin
|
|
$display("FAILED test 5, expected 4'bxxxx, got 4'b%b", res5);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
if (res6 !== 4'bxxxx) begin
|
|
$display("FAILED test 6, expected 4'bxxxx, got 4'b%b", res6);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
if (res7 !== 4'bxxxx) begin
|
|
$display("FAILED test 7, expected 4'bxxxx, got 4'b%b", res7);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
if (res8 !== 4'bxxxx) begin
|
|
$display("FAILED test 8, expected 4'bxxxx, got 4'b%b", res8);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
if (res9 !== 4'bxxxx) begin
|
|
$display("FAILED test 9, expected 4'bxxxx, got 4'b%b", res9);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
if (res10 !== 4'bxxxx) begin
|
|
$display("FAILED test 10, expected 4'bxxxx, got 4'b%b", res10);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
if (res11 !== 4'bxxxx) begin
|
|
$display("FAILED test 11, expected 4'bxxxx, got 4'b%b", res11);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
if (res12 !== 4'bxxxx) begin
|
|
$display("FAILED test 12, expected 4'bxxxx, got 4'b%b", res12);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
res = lhs << rhs;
|
|
if (res !== 4'bxxxx) begin
|
|
$display("FAILED test 13, expected 4'bxxxx, got 4'b%b", res);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
res = lhs >> rhs;
|
|
if (res !== 4'bxxxx) begin
|
|
$display("FAILED test 14, expected 4'bxxxx, got 4'b%b", res);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
res = lhs >>> rhs;
|
|
if (res !== 4'bxxxx) begin
|
|
$display("FAILED test 15, expected 4'bxxxx, got 4'b%b", res);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
res = lhs << 4'b000x;
|
|
if (res !== 4'bxxxx) begin
|
|
$display("FAILED test 16, expected 4'bxxxx, got 4'b%b", res);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
res = lhs >> 4'b00x0;
|
|
if (res !== 4'bxxxx) begin
|
|
$display("FAILED test 17, expected 4'bxxxx, got 4'b%b", res);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
res = lhs >>> 4'b0z00;
|
|
if (res !== 4'bxxxx) begin
|
|
$display("FAILED test 18, expected 4'bxxxx, got 4'b%b", res);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
res = 4'd1 << 4'b000x;
|
|
if (res !== 4'bxxxx) begin
|
|
$display("FAILED test 19, expected 4'bxxxx, got 4'b%b", res);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
res = 4'd1 >> 4'b00x0;
|
|
if (res !== 4'bxxxx) begin
|
|
$display("FAILED test 20, expected 4'bxxxx, got 4'b%b", res);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
res = 4'd1 >>> 4'b0z00;
|
|
if (res !== 4'bxxxx) begin
|
|
$display("FAILED test 21, expected 4'bxxxx, got 4'b%b", res);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
res = 4'd0 << rhs;
|
|
if (res !== 4'bxxxx) begin
|
|
$display("FAILED test 22, expected 4'bxxxx, got 4'b%b", res);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
res = 4'd0 >> rhs;
|
|
if (res !== 4'bxxxx) begin
|
|
$display("FAILED test 23, expected 4'bxxxx, got 4'b%b", res);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
res = 4'd0 >>> rhs;
|
|
if (res !== 4'bxxxx) begin
|
|
$display("FAILED test 24, expected 4'bxxxx, got 4'b%b", res);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
if (pass) $display("PASSED");
|
|
end
|
|
endmodule
|