iverilog/ivtest/ivltests/dffsynth6.v

60 lines
1.0 KiB
Verilog

module DFF
(output reg Q0,
output reg [1:0] Q1,
input wire D0,
input wire [1:0] D1,
input wire CLK,
input wire RST
/* */);
always @(posedge CLK or posedge RST)
if (RST) begin
Q0 <= 0;
Q1 <= 0;
end else begin
Q0 <= D0;
Q1 <= D1;
end
endmodule // dut
module main;
wire q0;
wire [1:0] q1;
reg d0, clk, rst;
reg [1:0] d1;
DFF dut (.Q0(q0), .Q1(q1), .D0(d0), .D1(d1), .CLK(clk), .RST(rst));
initial begin
clk <= 1;
d0 <= 0;
d1 <= 2;
#1 rst <= 1;
#1 if (q0 !== 1'b0 || q1 !== 1'b0) begin
$display("FAILED -- RST=%b, Q0=%b, Q1=%b", rst, q0, q1);
$finish;
end
#1 rst <= 0;
#1 if (q0 !== 1'b0 || q1 !== 1'b0) begin
$display("FAILED -- RST=%b, Q0=%b, Q1=%b", rst, q0, q1);
$finish;
end
#1 clk <= 0;
#1 clk <= 1;
#1 if (q0 !== d0 || q1 !== d1) begin
$display("FAILED -- Q0=%b Q1=%b, D0=%b D1=%b", q0, q1, d0, d1);
$finish;
end
$display("PASSED");
$finish;
end
endmodule // main