iverilog/ivtest/ivltests/ssetclr3.v

106 lines
1.6 KiB
Verilog

/*
* In this example, the set and clr are both synchronous. This checks
* that this complex case is handled correctly.
*/
module main;
reg Q, clk, rst, set, clr;
(* ivl_synthesis_on *)
always@(posedge clk or posedge rst)
begin
if (rst)
Q <= 1'b0;
else if (set)
Q <= 1'b1;
else if (clr)
Q <= 1'b0;
end
(* ivl_synthesis_off *)
initial begin
clk = 0;
rst = 0;
set = 0;
clr = 0;
#1 rst = 1;
#1 rst = 0;
if (Q !== 0) begin
$display("FAILED -- rst");
$finish;
end
#1 clk = 1;
#1 clk = 0;
if (Q !== 0) begin
$display("FAILED -- 1 clk");
$finish;
end
#1 set = 1;
#1 ;
if (Q !== 0) begin
$display("FAILED -- 1 set (no clk)");
$finish;
end
#1 clk = 1;
#1 clk = 0;
if (Q !== 1) begin
$display("FAILED -- 1 set");
$finish;
end
#1 clr = 1;
#1 ;
if (Q !== 1) begin
$display("FAILED -- 1 clr+set (no clk)");
$finish;
end
#1 clk = 1;
#1 clk = 0;
if (Q !== 1) begin
$display("FAILED -- 1 clr+set");
$finish;
end
#1 clk = 1;
#1 clk = 0;
if (Q !== 1) begin
$display("FAILED -- 2 clr+set");
$finish;
end
#1 set = 0;
#1 clk = 1;
#1 clk = 0;
if (Q !== 0) begin
$display("FAILED -- 1 clr-set");
$finish;
end
#1 clr = 0;
#1 clk = 1;
#1 clk = 0;
if (Q !== 0) begin
$display("FAILED -- 1 set-clr");
$finish;
end
$display("PASSED");
$finish;
end
endmodule