gEDA-dev: Another Verilog test
Stephen Williams
steve at icarus.com
Tue Jan 23 16:24:14 EST 2007
This sample program is from problem report 1636409 in the iverilog
bugs database. This one has shown itself to be somewhat tricky. It
appears to actually have a race condition of sorts. It's a ternary
with a 1unit delay, and multiple of its inputs are changing at 1unit
delays. Icarus Verilog does the wrong thing, but I'd like to see
some big names do something with this to get a better grip on what
is really happening.
--
Steve Williams "The woods are lovely, dark and deep.
steve at icarus.com But I have promises to keep,
http://www.icarus.com and lines to code before I sleep,
http://www.picturel.com And lines to code before I sleep."
-------------- next part --------------
/* pr1636409 */
module top;
wire [3:0] fail, good;
wire eni;
reg [2:0] rg;
reg in, en, clk;
assign #1 eni = en;
assign #1 fail = (eni) ? {rg,in} : 'b0;
assign #1 good = {4{eni}} & {rg,in};
always @(fail or good or eni) begin
$strobe("fail=%b, good=%b, en=%b at %0t", fail, good, eni, $time);
end
always #10 clk = ~clk;
always @(posedge clk) begin
en = ~en;
in = ~in;
rg = ~rg;
end
initial begin
$dumpfile("results.vcd");
$dumpvars(0, top);
clk = 0;
en = 0;
in = 0;
rg = 3'b101;
#50 $finish;
end
endmodule
More information about the geda-dev
mailing list