iverilog/ivtest/vhdl_tests/dff.v

65 lines
1.0 KiB
Verilog

/*
* A D-type flip-flop to check synchronous logic works
* correctly.
*/
module testbench;
reg d, clk, rst, enable;
wire q, q_bar;
dff uut(q, q_bar, d, clk, rst);
initial clk <= 0;
always @(clk)
if (enable)
#1 clk <= !clk;
initial begin
enable <= 1;
rst <= 1;
d <= 1'bx;
#2;
if (q !== 0)
begin
$display("FAILED -- Not reset");
$finish;
end
rst <= 0;
d <= 1'b1;
#2;
if (q !== 1)
begin
$display("FAILED -- q not 1 as expected");
$finish;
end
d <= 1'b0;
#2;
if (q !== 0)
begin
$display("FAILED -- q not 0 as expected");
$finish;
end
rst <= 1;
#2;
enable <= 0; // Alternative to using $finish
$display("PASSED");
end
endmodule // testbench
module dff(q, q_bar, d, clk, rst);
output q, q_bar;
input d, clk, rst;
reg q;
always @(posedge clk or posedge rst)
if (rst)
q <= 1'b0;
else
q <= d;
not(q_bar, q);
endmodule // dff