114 lines
2.7 KiB
Verilog
114 lines
2.7 KiB
Verilog
`timescale 1ns/100ps
|
|
|
|
module top;
|
|
reg pass;
|
|
real rarr[0:3];
|
|
realtime del;
|
|
reg signed [1:0] idx;
|
|
integer count;
|
|
event evt;
|
|
|
|
initial begin
|
|
pass = 1'b1;
|
|
|
|
// Check the initial values.
|
|
if (rarr[1] != 0.0) begin
|
|
$display("FAILED initial value, expected 0.0, got %f", rarr[1]);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check a negative index value.
|
|
rarr[3] = 3.0;
|
|
idx = -1;
|
|
rarr[idx] <= 0.0;
|
|
#0.1;
|
|
if (rarr[3] != 3.0) begin
|
|
$display("FAILED negative index 1, expected 3.0, got %f", rarr[3]);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
del = 1.0;
|
|
rarr[idx] <= #(del) 0.0;
|
|
#1.1;
|
|
if (rarr[3] != 3.0) begin
|
|
$display("FAILED negative index 2, expected 3.0, got %f", rarr[3]);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
count = 0;
|
|
rarr[idx] <= repeat(count) @(evt) 0.0;
|
|
#0.1;
|
|
if (rarr[3] != 3.0) begin
|
|
$display("FAILED negative index 3, expected 3.0, got %f", rarr[3]);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check a non-blocking assignment.
|
|
rarr[1] <= 2.0;
|
|
if (rarr[1] != 0.0) begin
|
|
$display("FAILED non-blocking assign 1, expected 0.0, got %f", rarr[1]);
|
|
pass = 1'b0;
|
|
end
|
|
#0.1;
|
|
if (rarr[1] != 2.0) begin
|
|
$display("FAILED non-blocking assign 2, expected 2.0, got %f", rarr[1]);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check a delayed non-blocking assignment.
|
|
rarr[1] <= #2 3.0;
|
|
#1.9;
|
|
if (rarr[1] != 2.0) begin
|
|
$display("FAILED delayed NB assign 1, expected 2.0, got %f", rarr[1]);
|
|
pass = 1'b0;
|
|
end
|
|
#0.2;
|
|
if (rarr[1] != 3.0) begin
|
|
$display("FAILED delayed NB assign 2, expected 3.0, got %f", rarr[1]);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check a variable delay non-blocking assignment.
|
|
del = 3.0;
|
|
rarr[1] <= #(del) 4.0;
|
|
#2.9;
|
|
if (rarr[1] != 3.0) begin
|
|
$display("FAILED var. delay NB assign 1, expected 3.0, got %f", rarr[1]);
|
|
pass = 1'b0;
|
|
end
|
|
#0.2;
|
|
if (rarr[1] != 4.0) begin
|
|
$display("FAILED var. delay NB assign 2, expected 4.0, got %f", rarr[1]);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check a zero count event non-blocking assignment.
|
|
rarr[1] <= repeat(count) @(evt) 5.0;
|
|
#0.1;
|
|
if (rarr[1] != 5.0) begin
|
|
$display("FAILED NB EC count=0, expected 5.0, got %f", rarr[1]);
|
|
pass = 1'b0;
|
|
end
|
|
|
|
// Check for an event non-blocking assignment.
|
|
rarr[1] <= @(evt) 6.0;
|
|
fork
|
|
#1 ->evt;
|
|
begin
|
|
#0.9;
|
|
if (rarr[1] != 5.0) begin
|
|
$display("FAILED NB EC initial, expected 5.0, got %f", rarr[1]);
|
|
pass = 1'b0;
|
|
end
|
|
#0.2;
|
|
if (rarr[1] != 6.0) begin
|
|
$display("FAILED NB EC final, expected 6.0, got %f", rarr[1]);
|
|
pass = 1'b0;
|
|
end
|
|
end
|
|
join
|
|
|
|
if (pass) $display("PASSED");
|
|
end
|
|
endmodule
|