iverilog/ivtest/ivltests/inside_synth.v

53 lines
1.1 KiB
Coq
Raw Normal View History

/*
* This tests the latching of an output that isn't really an output,
* but an intermediate symbol that is only used in some clauses.
*/
module main;
reg [15:0] out, a;
reg [7:0] b;
reg cy;
reg with_carry;
(* ivl_combinational *)
always @(with_carry, a, b, cy)
if (with_carry) begin
{cy, out[7:0]} = {1'b0, a[7:0]} + {1'b0, b[7:0]};
out[15:8] = a[15:8] + {7'b0, cy};
end else begin
out = a + {8'h00, b};
end
(* ivl_synthesis_off *)
initial begin
a = 16'h00fe;
b = 8'h00;
with_carry = 0;
#1 if (out !== 16'h00fe) begin
$display("FAILED -- a=%h, b=%h, out=%h", a, b, out);
$finish;
end
with_carry = 1;
#1 if (out !== 16'h00fe) begin
$display("FAILED -- a=%h, b=%h, out=%h", a, b, out);
$finish;
end
b = 2;
#1 if (out !== 16'h0100) begin
$display("FAILED -- a=%h, b=%h, out=%h", a, b, out);
$finish;
end
with_carry = 0;
#1 if (out !== 16'h0100) begin
$display("FAILED -- a=%h, b=%h, out=%h", a, b, out);
$finish;
end
$display("PASSED");
end
endmodule // main