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
|