iverilog/ivtest/ivltests/pr2976242b.v

75 lines
1.9 KiB
Verilog

`timescale 1ns/100ps
module top;
reg pass;
reg in;
wire out_bit;
wire [3:0] out_vec, out_arr;
wire real r_bit, r_vec;
wire real r_arr[1:0];
initial begin
pass = 1'b1;
in <= 1'b0;
#1 in = 1'b1;
#0.5 in = 1'b0;
#0.5 in = 1'b1;
#0.5 in = 1'b0;
#0.5 in = 1'b1;
#0.5 in = 1'b0;
#0.5 in = 1'b1;
#1 if (pass) $display("PASSED");
end
real_to_xx u1(out_bit, in);
always @(out_bit) if (out_bit !== ($stime % 2)) begin
$display("Failed real_to_xx, got %b, expected %1b", out_bit, $stime%2);
pass = 1'b0;
end
real_to_xx u2(out_vec, in);
always @(out_vec) if (out_vec !== $stime) begin
$display("Failed real_to_xx(vec), got %b, expected %2b", out_vec, $stime);
pass = 1'b0;
end
real_to_xx u3[1:0](out_arr, in);
always @(out_arr) #0.1 if ((out_arr[1:0] !== ($stime % 4)) &&
(out_arr[3:2] !== ($stime % 4))) begin
$display("Failed real_to_xx[1:0], got %b, expected %2b%2b", out_arr,
$stime%4, $stime%4);
pass = 1'b0;
end
bit_to_real u4(r_bit, in);
always @(r_bit) if (r_bit != ($stime % 2)) begin
$display("Failed bit_to_real, got %f, expected %1b", r_bit, $stime%2);
pass = 1'b0;
end
vec_to_real u5(r_vec, in);
always @(r_vec) if (r_vec != $stime) begin
$display("Failed vec_to_real, got %f, expected %1b", r_vec, $stime);
pass = 1'b0;
end
endmodule
// Check a real value going to a various things.
module real_to_xx (output wire real out, input wire in);
real rval;
assign out = rval;
always @(posedge in) rval = rval + 1;
endmodule
module bit_to_real (output wire out, input wire in);
reg rval = 0;
assign out = rval;
always @(posedge in) rval = rval + 1;
endmodule
module vec_to_real (output wire [3:0] out, input wire in);
reg [3:0] rval = 0;
assign out = rval;
always @(posedge in) rval = rval + 1;
endmodule