File: dfflegalize_aldff_init.ys

package info (click to toggle)
yosys 0.52-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 69,796 kB
  • sloc: ansic: 696,955; cpp: 239,736; python: 14,617; yacc: 3,529; sh: 2,175; makefile: 1,945; lex: 697; perl: 445; javascript: 323; tcl: 162; vhdl: 115
file content (148 lines) | stat: -rw-r--r-- 5,130 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
read_verilog -icells <<EOT

module aldff(input C, L, AD, D, (* init = 3'b000 *) output [2:0] Q);
$_ALDFF_PP_ ff0 (.C(C), .L(L), .AD(AD), .D(D), .Q(Q[0]));
$_ALDFF_PN_ ff1 (.C(C), .L(L), .AD(AD), .D(D), .Q(Q[1]));
$_ALDFF_NP_ ff2 (.C(C), .L(L), .AD(AD), .D(D), .Q(Q[2]));
endmodule

module aldffe(input C, E, L, AD, D, (* init = 4'b0000 *) output [3:0] Q);
$_ALDFFE_PPP_ ff0 (.C(C), .L(L), .AD(AD), .E(E), .D(D), .Q(Q[0]));
$_ALDFFE_PPN_ ff1 (.C(C), .L(L), .AD(AD), .E(E), .D(D), .Q(Q[1]));
$_ALDFFE_PNP_ ff2 (.C(C), .L(L), .AD(AD), .E(E), .D(D), .Q(Q[2]));
$_ALDFFE_NPP_ ff3 (.C(C), .L(L), .AD(AD), .E(E), .D(D), .Q(Q[3]));
endmodule

module top(input C, E, L, AD, D, output [6:0] Q);
aldff aldff_(.C(C), .L(L), .AD(AD), .D(D), .Q(Q[2:0]));
aldffe aldffe_(.C(C), .L(L), .AD(AD), .E(E), .D(D), .Q(Q[6:3]));
endmodule

EOT

design -save orig
flatten
equiv_opt -assert -multiclock dfflegalize -cell $_ALDFF_PP_ 0
equiv_opt -assert -multiclock dfflegalize -cell $_ALDFF_PP_ 1
equiv_opt -assert -multiclock dfflegalize -cell $_ALDFFE_PPP_ 0
equiv_opt -assert -multiclock dfflegalize -cell $_ALDFFE_PPP_ 1
equiv_opt -assert -multiclock dfflegalize -cell $_DFFSR_PPP_ 0
equiv_opt -assert -multiclock dfflegalize -cell $_DFFSR_PPP_ 1
equiv_opt -assert -multiclock dfflegalize -cell $_DFFSRE_PPPP_ 0
equiv_opt -assert -multiclock dfflegalize -cell $_DFFSRE_PPPP_ 1


# Convert everything to ALDFFs.

design -load orig
dfflegalize -cell $_ALDFF_PP_ 0

select -assert-count 2 aldff/t:$_NOT_
select -assert-count 2 aldffe/t:$_NOT_
select -assert-count 0 aldff/t:$_MUX_
select -assert-count 4 aldffe/t:$_MUX_
select -assert-count 7 t:$_ALDFF_PP_
select -assert-none t:$_ALDFF_PP_ t:$_MUX_ t:$_NOT_ top/* %% %n t:* %i

design -load orig
dfflegalize -cell $_ALDFF_PP_ 1

select -assert-count 11 aldff/t:$_NOT_
select -assert-count 14 aldffe/t:$_NOT_
select -assert-count 0 aldff/t:$_MUX_
select -assert-count 4 aldffe/t:$_MUX_
select -assert-count 7 t:$_ALDFF_PP_
select -assert-none t:$_ALDFF_PP_ t:$_MUX_ t:$_NOT_ top/* %% %n t:* %i


# Convert everything to ALDFFEs.

design -load orig
dfflegalize -cell $_ALDFFE_PPP_ 0

select -assert-count 2 aldff/t:$_NOT_
select -assert-count 3 aldffe/t:$_NOT_
select -assert-count 7 t:$_ALDFFE_PPP_
select -assert-none t:$_ALDFFE_PPP_ t:$_NOT_ top/* %% %n t:* %i

design -load orig
dfflegalize -cell $_ALDFFE_PPP_ 1

select -assert-count 11 aldff/t:$_NOT_
select -assert-count 15 aldffe/t:$_NOT_
select -assert-count 7 t:$_ALDFFE_PPP_
select -assert-none t:$_ALDFFE_PPP_ t:$_NOT_ top/* %% %n t:* %i


# Convert everything to DFFSRs.

design -load orig
dfflegalize -cell $_DFFSR_PPP_ 0

select -assert-count 2 aldff/t:$_AND_
select -assert-count 3 aldffe/t:$_AND_
select -assert-count 2 aldff/t:$_ANDNOT_
select -assert-count 3 aldffe/t:$_ANDNOT_
select -assert-count 1 aldff/t:$_OR_
select -assert-count 1 aldffe/t:$_OR_
select -assert-count 1 aldff/t:$_ORNOT_
select -assert-count 1 aldffe/t:$_ORNOT_
select -assert-count 3 aldff/t:$_NOT_
select -assert-count 3 aldffe/t:$_NOT_
select -assert-count 0 aldff/t:$_MUX_
select -assert-count 4 aldffe/t:$_MUX_
select -assert-count 7 t:$_DFFSR_PPP_
select -assert-none t:$_DFFSR_PPP_ t:$_MUX_ t:$_NOT_ t:$_AND_ t:$_ANDNOT_ t:$_OR_ t:$_ORNOT_ top/* %% %n t:* %i

design -load orig
dfflegalize -cell $_DFFSR_PPP_ 1

select -assert-count 2 aldff/t:$_AND_
select -assert-count 3 aldffe/t:$_AND_
select -assert-count 2 aldff/t:$_ANDNOT_
select -assert-count 3 aldffe/t:$_ANDNOT_
select -assert-count 1 aldff/t:$_OR_
select -assert-count 1 aldffe/t:$_OR_
select -assert-count 1 aldff/t:$_ORNOT_
select -assert-count 1 aldffe/t:$_ORNOT_
select -assert-count 12 aldff/t:$_NOT_
select -assert-count 15 aldffe/t:$_NOT_
select -assert-count 0 aldff/t:$_MUX_
select -assert-count 4 aldffe/t:$_MUX_
select -assert-count 7 t:$_DFFSR_PPP_
select -assert-none t:$_DFFSR_PPP_ t:$_MUX_ t:$_NOT_ t:$_AND_ t:$_ANDNOT_ t:$_OR_ t:$_ORNOT_ top/* %% %n t:* %i


# Convert everything to DFFSREs.

design -load orig
dfflegalize -cell $_DFFSRE_PPPP_ 0

select -assert-count 2 aldff/t:$_AND_
select -assert-count 3 aldffe/t:$_AND_
select -assert-count 2 aldff/t:$_ANDNOT_
select -assert-count 3 aldffe/t:$_ANDNOT_
select -assert-count 1 aldff/t:$_OR_
select -assert-count 1 aldffe/t:$_OR_
select -assert-count 1 aldff/t:$_ORNOT_
select -assert-count 1 aldffe/t:$_ORNOT_
select -assert-count 3 aldff/t:$_NOT_
select -assert-count 4 aldffe/t:$_NOT_
select -assert-count 7 t:$_DFFSRE_PPPP_
select -assert-none t:$_DFFSRE_PPPP_ t:$_NOT_ t:$_AND_ t:$_ANDNOT_ t:$_OR_ t:$_ORNOT_ top/* %% %n t:* %i

design -load orig
dfflegalize -cell $_DFFSRE_PPPP_ 1

select -assert-count 2 aldff/t:$_AND_
select -assert-count 3 aldffe/t:$_AND_
select -assert-count 2 aldff/t:$_ANDNOT_
select -assert-count 3 aldffe/t:$_ANDNOT_
select -assert-count 1 aldff/t:$_OR_
select -assert-count 1 aldffe/t:$_OR_
select -assert-count 1 aldff/t:$_ORNOT_
select -assert-count 1 aldffe/t:$_ORNOT_
select -assert-count 12 aldff/t:$_NOT_
select -assert-count 16 aldffe/t:$_NOT_
select -assert-count 7 t:$_DFFSRE_PPPP_
select -assert-none t:$_DFFSRE_PPPP_ t:$_NOT_ t:$_AND_ t:$_ANDNOT_ t:$_OR_ t:$_ORNOT_ top/* %% %n t:* %i