module test (clk, in, out); input clk; input [15:0] in; output [4:0] out; reg [4:0] out; (* ivl_synthesis_on *) always @(posedge clk) begin // In PR#685, this caused an assertion with iverilog -S out = (in >= 16) ? 16 : in; end endmodule module main; reg clk; reg [15:0] value; wire [4:0] sat; test dut (clk, value, sat); (* ivl_synthesis_off *) initial begin value = 0; clk = 1; for (value = 0 ; value < 'h15 ; value = value+1) begin #1 clk = 0; #1 clk = 1; #1 if ((value > 16) && (sat !== 5'd16)) begin $display("FAILED -- value=%d, sat=%b", value, sat); $finish; end if ((value <= 16) && (value !== sat)) begin $display("FAILED -- value=%d, sat=%b", value, sat); $finish; end end // for (value = 0 ; value < 'h15 ; value = value+1) $display("PASSED"); end // initial begin endmodule // main