iverilog/ivtest/ivltests/pr1002.v

52 lines
1.1 KiB
Verilog

module top (
);
reg signed [13:0] datain;
wire signed [15:0] dataout;
assign dataout = datain >>> 2;
reg test_failed;
wire signed [15:0] expected_dataout;
assign expected_dataout = ($signed({datain[13:2], 2'b0}) / 4) ;
task check_data;
if (expected_dataout != dataout)
begin
$display("datain = %d dataout = %h expected = %h ... CHECK FAILED", datain, dataout, expected_dataout);
test_failed = 1;
end
else
$display("datain = %d dataout = %d expected = %d ... CHECK PASSED", datain, dataout, expected_dataout);
endtask
initial
begin
test_failed = 0;
#1 datain = 14'h0FFF;
#0 check_data; // #0 delay to allow the wire to resolve
#1 datain = 14'h0000;
#0 check_data;
#1 datain = 14'h1FFF;
#0 check_data;
#1 datain = 14'h1000;
#0 check_data;
#1 datain = 14'h2FFF;
#0 check_data;
#1 datain = 14'h2000;
#0 check_data;
#1 datain = 14'h3FFF;
#0 check_data;
#1 datain = 14'h3000;
#0 check_data;
#2;
if (test_failed)
$display("TEST FAILED :-(");
else
$display("TEST PASSED :-)");
end
endmodule // top