1
+ ##################################################################
2
+
3
+ read_verilog -sv -icells <<EOT
4
+
5
+ module top(input C, D, E, S, R, output [11:0] Q);
6
+
7
+ $_DFF_P_ ff0 (.C(C), .D(D), .Q(Q[0]));
8
+ $_DFF_PP0_ ff1 (.C(C), .D(D), .R(R), .Q(Q[1]));
9
+ $_DFF_PP1_ ff2 (.C(C), .D(D), .R(R), .Q(Q[2]));
10
+
11
+ // Formal checking of directly instantiated DFFSR doesn't work at the moment
12
+ // likely due to an equiv_induct assume bug #5196
13
+
14
+ // // Workaround for DFFSR bug #5194
15
+ // assume property (~R || ~S);
16
+ // $_DFFSR_PPP_ ff3 (.C(C), .D(D), .R(R), .S(S), .Q(Q[3]));
17
+ // $_DFFSR_NNN_ ff4 (.C(C), .D(D), .R(~R), .S(~S), .Q(Q[4]));
18
+
19
+ $_DFFE_PP_ ff5 (.C(C), .D(D), .E(E), .Q(Q[5]));
20
+
21
+ assign Q[11:6] = ~Q[5:0];
22
+
23
+ endmodule
24
+
25
+ EOT
26
+
27
+ proc
28
+ opt
29
+ read_liberty dfflibmap_dffn_dffe.lib
30
+ read_liberty dfflibmap_dffsr_not_next.lib
31
+
32
+ copy top top_unmapped
33
+ dfflibmap -liberty dfflibmap_dffn_dffe.lib -liberty dfflibmap_dffsr_not_next.lib top
34
+
35
+ async2sync
36
+ flatten
37
+ opt_clean -purge
38
+ equiv_make top top_unmapped equiv
39
+ equiv_induct equiv
40
+ equiv_status -assert equiv
41
+
42
+ ##################################################################
43
+
44
+ design -reset
45
+ read_verilog -sv -icells <<EOT
46
+
47
+ module top(input C, D, E, S, R, output [11:0] Q);
48
+
49
+ $_DFF_P_ ff0 (.C(C), .D(D), .Q(Q[0]));
50
+ $_DFF_PP0_ ff1 (.C(C), .D(D), .R(R), .Q(Q[1]));
51
+ $_DFF_PP1_ ff2 (.C(C), .D(D), .R(R), .Q(Q[2]));
52
+
53
+ // Formal checking of directly instantiated DFFSR doesn't work at the moment
54
+ // likely due to an equiv_induct assume bug #5196
55
+
56
+ // // Workaround for DFFSR bug #5194
57
+ // assume property (~R || ~S);
58
+ // $_DFFSR_PPP_ ff3 (.C(C), .D(D), .R(R), .S(S), .Q(Q[3]));
59
+ // $_DFFSR_NNN_ ff4 (.C(C), .D(D), .R(~R), .S(~S), .Q(Q[4]));
60
+
61
+ $_DFFE_PP_ ff5 (.C(C), .D(D), .E(E), .Q(Q[5]));
62
+
63
+ assign Q[11:6] = ~Q[5:0];
64
+
65
+ endmodule
66
+
67
+ EOT
68
+
69
+ proc
70
+ opt
71
+ read_liberty dfflibmap_dffr_not_next.lib
72
+
73
+ copy top top_unmapped
74
+ dfflibmap -liberty dfflibmap_dffr_not_next.lib top
75
+
76
+ async2sync
77
+ flatten
78
+ opt_clean -purge
79
+ equiv_make top top_unmapped equiv
80
+ equiv_induct equiv
81
+ equiv_status -assert equiv
82
+
83
+ ##################################################################
84
+
85
+ design -reset
86
+ read_verilog <<EOT
87
+
88
+ module top(input C, D, E, S, R, output Q);
89
+ // DFFSR with priority R over S
90
+ always @(posedge C, posedge R, posedge S)
91
+ if (R == 1)
92
+ Q <= 0;
93
+ else if (S == 1)
94
+ Q <= 1;
95
+ else
96
+ Q <= D;
97
+
98
+ endmodule
99
+
100
+ EOT
101
+
102
+ proc
103
+ opt
104
+ read_liberty dfflibmap_dffn_dffe.lib
105
+ read_liberty dfflibmap_dffsr_not_next.lib
106
+
107
+ copy top top_unmapped
108
+ simplemap top
109
+ dfflibmap -liberty dfflibmap_dffn_dffe.lib -liberty dfflibmap_dffsr_not_next.lib top
110
+
111
+ async2sync
112
+ flatten
113
+ opt_clean -purge
114
+ equiv_make top top_unmapped equiv
115
+ equiv_induct equiv
116
+ equiv_status -assert equiv
0 commit comments