iverilog/ivtest/ivltests/dffsynth11.v

56 lines
819 B
Verilog

module top();
reg CLK;
reg RST;
reg [3:1] D;
reg EN;
reg [3:1] Q;
always @(posedge CLK or posedge RST) begin
if (RST) begin
Q[1] <= 1'b0;
Q[2] <= 1'b1;
Q[3] <= 1'b0;
end
else if (EN) begin
Q[1] <= D[1];
Q[2] <= ~D[2];
Q[3] <= D[3];
end
end
reg failed;
(* ivl_synthesis_off *)
initial begin
failed = 0;
$monitor("%b %b %b %b", CLK, EN, D, Q);
CLK = 0;
RST = 1;
EN = 0;
D = 3'b111;
#1 CLK = 1;
#1 CLK = 0;
if (Q !== 3'b010) failed = 1;
EN = 1;
#1 CLK = 1;
#1 CLK = 0;
if (Q !== 3'b010) failed = 1;
RST = 0;
EN = 0;
#1 CLK = 1;
#1 CLK = 0;
if (Q !== 3'b010) failed = 1;
EN = 1;
#1 CLK = 1;
#1 CLK = 0;
if (Q !== 3'b101) failed = 1;
#1;
if (failed)
$display("FAILED");
else
$display("PASSED");
end
endmodule