Skip to content

Commit 377cb54

Browse files
committed
Add dual-edge functional tests
1 parent 3c0acf0 commit 377cb54

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

tests/unit/dualedge.ys

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
2+
read_slang --allow-dual-edge-ff <<EOF
3+
module dualedge01_gate(
4+
input logic clk,
5+
input logic d,
6+
output logic q
7+
);
8+
always_ff @(edge clk) begin
9+
q <= d;
10+
end
11+
endmodule
12+
EOF
13+
14+
read_verilog -icells <<EOF
15+
module dualedge01_gold(
16+
input clk,
17+
input d,
18+
output q
19+
);
20+
wire clk_past, q_past, d_past;
21+
\$ff #(.WIDTH(1)) f1(.D(clk), .Q(clk_past));
22+
\$ff #(.WIDTH(1)) f2(.D(q), .Q(q_past));
23+
\$ff #(.WIDTH(1)) f3(.D(d), .Q(d_past));
24+
assign q = (clk != clk_past) ? d_past : q_past;
25+
endmodule
26+
EOF
27+
28+
clk2fflogic
29+
equiv_make dualedge01_gold dualedge01_gate dualedge01_equiv
30+
equiv_induct dualedge01_equiv
31+
equiv_status -assert
32+
33+
design -reset
34+
35+
read_slang --allow-dual-edge-ff <<EOF
36+
module dualedge02_gate(
37+
input logic clk,
38+
input logic rst_n,
39+
input logic d,
40+
output logic q
41+
);
42+
always_ff @(edge clk or negedge rst_n) begin
43+
if (!rst_n)
44+
q <= 1'b0;
45+
else
46+
q <= d;
47+
end
48+
endmodule
49+
EOF
50+
51+
read_verilog -icells <<EOF
52+
module dualedge02_gold(
53+
input clk,
54+
input rst_n,
55+
input d,
56+
output q
57+
);
58+
wire clk_past, q_past, d_past, rst_n_past;
59+
\$ff #(.WIDTH(1)) f1(.D(clk), .Q(clk_past));
60+
\$ff #(.WIDTH(1)) f2(.D(q), .Q(q_past));
61+
\$ff #(.WIDTH(1)) f3(.D(d), .Q(d_past));
62+
\$ff #(.WIDTH(1)) f4(.D(rst_n), .Q(rst_n_past));
63+
assign q = (!rst_n || !rst_n_past) ? 1'b0 : ((clk != clk_past) ? d_past : q_past);
64+
endmodule
65+
EOF
66+
67+
clk2fflogic
68+
equiv_make dualedge02_gold dualedge02_gate dualedge02_equiv
69+
equiv_induct dualedge02_equiv
70+
equiv_status -assert

0 commit comments

Comments
 (0)