iverilog/ivtest/ivltests/pr1628288.v

62 lines
1.1 KiB
Verilog

// `define READ read_good
module top;
reg clk;
reg dout;
reg [7:0] data;
integer lp;
always #10 clk = ~clk; // Build a clock generator.
always @(negedge clk) dout = ~dout; // Build a bit stream.
initial begin
clk = 0;
dout = 0;
@(negedge clk);
for (lp=0; lp<4; lp=lp+1) begin
#0 read_bad(data);
$display("Read(%0d) %b from the bit stream.", lp, data);
#20; // For the fun of it skip a clock.
end
#1 $finish(0);
end
// This one locks up on the third call.
task read_bad;
output [7:0] edata;
integer i;
reg [7:0] rddata;
begin
for(i=7; i>=0; i=i-1) begin
@(posedge clk);
$display(" Reading bit %0d", i);
rddata[i] = dout; // <<--- This appears to be the problem line!
end
assign edata = rddata;
end
endtask
// This one works fine.
task read_good;
output [7:0] edata;
integer i;
reg [7:0] edata;
begin
for(i=7; i>=0; i=i-1) begin
@(posedge clk);
$display(" Reading bit %0d", i);
edata[i] = dout;
end
end
endtask
endmodule