cc_add12.v
6.68 KB
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
// Module instances modified by /home/rws/workarea/rf/sw/bbplayer/tools/necprimfix
//
// 12 instances of an02d1 changed to j_an02.
// 52 instances of mx21d1h changed to j_mx21.
// 12 instances of or02d1 changed to j_or02.
// 12 instances of xn02d1 changed to j_xn02.
// 12 instances of xo02d1 changed to j_xo02.
//
////////////////////////////////////////////////////////////////////////
//
// Project Reality
//
// module: cc_add12
// description: Carry-propigating adder for key width add, with
// carry in and out. Conditional sum adder.
//
// designer: Phil Gossett
// date: 6/26/94
//
////////////////////////////////////////////////////////////////////////
module cc_add12 (a, b, ci, co, s);
input [11:0] a;
input [11:0] b;
input ci;
wire [11:0] s0b;
wire [11:0] s1b;
wire [11:0] c0b;
wire [11:0] c1b;
output co;
output [11:0] s;
// conditional cells:
j_xo02 s00 (.a1(a[0]), .a2(b[0]), .z(s0b[0]));
j_xn02 s10 (.a1(a[0]), .a2(b[0]), .zn(s1b[0]));
j_an02 c00 (.a1(a[0]), .a2(b[0]), .z(c0b[0]));
j_or02 c10 (.a1(a[0]), .a2(b[0]), .z(c1b[0]));
j_xo02 s01 (.a1(a[1]), .a2(b[1]), .z(s0b[1]));
j_xn02 s11 (.a1(a[1]), .a2(b[1]), .zn(s1b[1]));
j_an02 c01 (.a1(a[1]), .a2(b[1]), .z(c0b[1]));
j_or02 c11 (.a1(a[1]), .a2(b[1]), .z(c1b[1]));
j_xo02 s02 (.a1(a[2]), .a2(b[2]), .z(s0b[2]));
j_xn02 s12 (.a1(a[2]), .a2(b[2]), .zn(s1b[2]));
j_an02 c02 (.a1(a[2]), .a2(b[2]), .z(c0b[2]));
j_or02 c12 (.a1(a[2]), .a2(b[2]), .z(c1b[2]));
j_xo02 s03 (.a1(a[3]), .a2(b[3]), .z(s0b[3]));
j_xn02 s13 (.a1(a[3]), .a2(b[3]), .zn(s1b[3]));
j_an02 c03 (.a1(a[3]), .a2(b[3]), .z(c0b[3]));
j_or02 c13 (.a1(a[3]), .a2(b[3]), .z(c1b[3]));
j_xo02 s04 (.a1(a[4]), .a2(b[4]), .z(s0b[4]));
j_xn02 s14 (.a1(a[4]), .a2(b[4]), .zn(s1b[4]));
j_an02 c04 (.a1(a[4]), .a2(b[4]), .z(c0b[4]));
j_or02 c14 (.a1(a[4]), .a2(b[4]), .z(c1b[4]));
j_xo02 s05 (.a1(a[5]), .a2(b[5]), .z(s0b[5]));
j_xn02 s15 (.a1(a[5]), .a2(b[5]), .zn(s1b[5]));
j_an02 c05 (.a1(a[5]), .a2(b[5]), .z(c0b[5]));
j_or02 c15 (.a1(a[5]), .a2(b[5]), .z(c1b[5]));
j_xo02 s06 (.a1(a[6]), .a2(b[6]), .z(s0b[6]));
j_xn02 s16 (.a1(a[6]), .a2(b[6]), .zn(s1b[6]));
j_an02 c06 (.a1(a[6]), .a2(b[6]), .z(c0b[6]));
j_or02 c16 (.a1(a[6]), .a2(b[6]), .z(c1b[6]));
j_xo02 s07 (.a1(a[7]), .a2(b[7]), .z(s0b[7]));
j_xn02 s17 (.a1(a[7]), .a2(b[7]), .zn(s1b[7]));
j_an02 c07 (.a1(a[7]), .a2(b[7]), .z(c0b[7]));
j_or02 c17 (.a1(a[7]), .a2(b[7]), .z(c1b[7]));
j_xo02 s08 (.a1(a[8]), .a2(b[8]), .z(s0b[8]));
j_xn02 s18 (.a1(a[8]), .a2(b[8]), .zn(s1b[8]));
j_an02 c08 (.a1(a[8]), .a2(b[8]), .z(c0b[8]));
j_or02 c18 (.a1(a[8]), .a2(b[8]), .z(c1b[8]));
j_xo02 s09 (.a1(a[9]), .a2(b[9]), .z(s0b[9]));
j_xn02 s19 (.a1(a[9]), .a2(b[9]), .zn(s1b[9]));
j_an02 c09 (.a1(a[9]), .a2(b[9]), .z(c0b[9]));
j_or02 c19 (.a1(a[9]), .a2(b[9]), .z(c1b[9]));
j_xo02 s010 (.a1(a[10]),.a2(b[10]), .z(s0b[10]));
j_xn02 s110 (.a1(a[10]),.a2(b[10]),.zn(s1b[10]));
j_an02 c010 (.a1(a[10]),.a2(b[10]), .z(c0b[10]));
j_or02 c110 (.a1(a[10]),.a2(b[10]), .z(c1b[10]));
j_xo02 s011 (.a1(a[11]),.a2(b[11]), .z(s0b[11]));
j_xn02 s111 (.a1(a[11]),.a2(b[11]),.zn(s1b[11]));
j_an02 c011 (.a1(a[11]),.a2(b[11]), .z(c0b[11]));
j_or02 c111 (.a1(a[11]),.a2(b[11]), .z(c1b[11]));
// first rank of muxes (all muxes should be high performance):
j_mx21 mas00 (.s(ci), .i0(s0b[0]), .i1(s1b[0]), .z(s[0]));
j_mx21 mac00 (.s(ci), .i0(c0b[0]), .i1(c1b[0]), .z(mac0b0));
j_mx21 mas02 (.s(c0b[1]), .i0(s0b[2]), .i1(s1b[2]), .z(mas0b2));
j_mx21 mas12 (.s(c1b[1]), .i0(s0b[2]), .i1(s1b[2]), .z(mas1b2));
j_mx21 mac02 (.s(c0b[1]), .i0(c0b[2]), .i1(c1b[2]), .z(mac0b2));
j_mx21 mac12 (.s(c1b[1]), .i0(c0b[2]), .i1(c1b[2]), .z(mac1b2));
j_mx21 mas04 (.s(c0b[3]), .i0(s0b[4]), .i1(s1b[4]), .z(mas0b4));
j_mx21 mas14 (.s(c1b[3]), .i0(s0b[4]), .i1(s1b[4]), .z(mas1b4));
j_mx21 mac04 (.s(c0b[3]), .i0(c0b[4]), .i1(c1b[4]), .z(mac0b4));
j_mx21 mac14 (.s(c1b[3]), .i0(c0b[4]), .i1(c1b[4]), .z(mac1b4));
j_mx21 mas06 (.s(c0b[5]), .i0(s0b[6]), .i1(s1b[6]), .z(mas0b6));
j_mx21 mas16 (.s(c1b[5]), .i0(s0b[6]), .i1(s1b[6]), .z(mas1b6));
j_mx21 mac06 (.s(c0b[5]), .i0(c0b[6]), .i1(c1b[6]), .z(mac0b6));
j_mx21 mac16 (.s(c1b[5]), .i0(c0b[6]), .i1(c1b[6]), .z(mac1b6));
j_mx21 mas08 (.s(c0b[7]), .i0(s0b[8]), .i1(s1b[8]), .z(mas0b8));
j_mx21 mas18 (.s(c1b[7]), .i0(s0b[8]), .i1(s1b[8]), .z(mas1b8));
j_mx21 mac08 (.s(c0b[7]), .i0(c0b[8]), .i1(c1b[8]), .z(mac0b8));
j_mx21 mac18 (.s(c1b[7]), .i0(c0b[8]), .i1(c1b[8]), .z(mac1b8));
j_mx21 mas010 (.s(c0b[9]), .i0(s0b[10]),.i1(s1b[10]),.z(mas0b10));
j_mx21 mas110 (.s(c1b[9]), .i0(s0b[10]),.i1(s1b[10]),.z(mas1b10));
j_mx21 mac010 (.s(c0b[9]), .i0(c0b[10]),.i1(c1b[10]),.z(mac0b10));
j_mx21 mac110 (.s(c1b[9]), .i0(c0b[10]),.i1(c1b[10]),.z(mac1b10));
// second rank of muxes:
j_mx21 mbs01 (.s(mac0b0), .i0(s0b[1]), .i1(s1b[1]), .z(s[1]));
j_mx21 mbs02 (.s(mac0b0), .i0(mas0b2), .i1(mas1b2), .z(s[2]));
j_mx21 mbc02 (.s(mac0b0), .i0(mac0b2), .i1(mac1b2), .z(mbc0b2));
j_mx21 mbs05 (.s(mac0b4), .i0(s0b[5]), .i1(s1b[5]), .z(mbs0b5));
j_mx21 mbs15 (.s(mac1b4), .i0(s0b[5]), .i1(s1b[5]), .z(mbs1b5));
j_mx21 mbs06 (.s(mac0b4), .i0(mas0b6), .i1(mas1b6), .z(mbs0b6));
j_mx21 mbs16 (.s(mac1b4), .i0(mas0b6), .i1(mas1b6), .z(mbs1b6));
j_mx21 mbc06 (.s(mac0b4), .i0(mac0b6), .i1(mac1b6), .z(mbc0b6));
j_mx21 mbc16 (.s(mac1b4), .i0(mac0b6), .i1(mac1b6), .z(mbc1b6));
j_mx21 mbs09 (.s(mac0b8), .i0(s0b[9]), .i1(s1b[9]), .z(mbs0b9));
j_mx21 mbs19 (.s(mac1b8), .i0(s0b[9]), .i1(s1b[9]), .z(mbs1b9));
j_mx21 mbs010 (.s(mac0b8), .i0(mas0b10),.i1(mas1b10),.z(mbs0b10));
j_mx21 mbs110 (.s(mac1b8), .i0(mas0b10),.i1(mas1b10),.z(mbs1b10));
j_mx21 mbc010 (.s(mac0b8), .i0(mac0b10),.i1(mac1b10),.z(mbc0b10));
j_mx21 mbc110 (.s(mac1b8), .i0(mac0b10),.i1(mac1b10),.z(mbc1b10));
// third rank of muxes:
j_mx21 mcs03 (.s(mbc0b2), .i0(s0b[3]), .i1(s1b[3]), .z(s[3]));
j_mx21 mcs04 (.s(mbc0b2), .i0(mas0b4), .i1(mas1b4), .z(s[4]));
j_mx21 mcs05 (.s(mbc0b2), .i0(mbs0b5), .i1(mbs1b5), .z(s[5]));
j_mx21 mcs06 (.s(mbc0b2), .i0(mbs0b6), .i1(mbs1b6), .z(s[6]));
j_mx21 mcc06 (.s(mbc0b2), .i0(mbc0b6), .i1(mbc1b6), .z(mcc0b6));
j_mx21 mcs011 (.s(mbc0b10),.i0(s0b[11]),.i1(s1b[11]),.z(mcs0b11));
j_mx21 mcs111 (.s(mbc1b10),.i0(s0b[11]),.i1(s1b[11]),.z(mcs1b11));
j_mx21 mcc011 (.s(mbc0b10),.i0(c0b[11]),.i1(c1b[11]),.z(mcc0b11));
j_mx21 mcc111 (.s(mbc1b10),.i0(c0b[11]),.i1(c1b[11]),.z(mcc1b11));
// fourth rank of muxes:
j_mx21 mds07 (.s(mcc0b6), .i0(s0b[7]), .i1(s1b[7]), .z(s[7]));
j_mx21 mds08 (.s(mcc0b6), .i0(mas0b8), .i1(mas1b8), .z(s[8]));
j_mx21 mds09 (.s(mcc0b6), .i0(mbs0b9), .i1(mbs1b9), .z(s[9]));
j_mx21 mds010 (.s(mcc0b6), .i0(mbs0b10),.i1(mbs1b10),.z(s[10]));
j_mx21 mds011 (.s(mcc0b6), .i0(mcs0b11),.i1(mcs1b11),.z(s[11]));
j_mx21 mdc0co (.s(mcc0b6), .i0(mcc0b11),.i1(mcc1b11),.z(co));
endmodule // cc_add12