cc_add12.v
6.41 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
////////////////////////////////////////////////////////////////////////
//
// 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:
xo02d1 s00 (.a1(a[0]), .a2(b[0]), .z(s0b[0]));
xn02d1 s10 (.a1(a[0]), .a2(b[0]), .zn(s1b[0]));
an02d1 c00 (.a1(a[0]), .a2(b[0]), .z(c0b[0]));
or02d1 c10 (.a1(a[0]), .a2(b[0]), .z(c1b[0]));
xo02d1 s01 (.a1(a[1]), .a2(b[1]), .z(s0b[1]));
xn02d1 s11 (.a1(a[1]), .a2(b[1]), .zn(s1b[1]));
an02d1 c01 (.a1(a[1]), .a2(b[1]), .z(c0b[1]));
or02d1 c11 (.a1(a[1]), .a2(b[1]), .z(c1b[1]));
xo02d1 s02 (.a1(a[2]), .a2(b[2]), .z(s0b[2]));
xn02d1 s12 (.a1(a[2]), .a2(b[2]), .zn(s1b[2]));
an02d1 c02 (.a1(a[2]), .a2(b[2]), .z(c0b[2]));
or02d1 c12 (.a1(a[2]), .a2(b[2]), .z(c1b[2]));
xo02d1 s03 (.a1(a[3]), .a2(b[3]), .z(s0b[3]));
xn02d1 s13 (.a1(a[3]), .a2(b[3]), .zn(s1b[3]));
an02d1 c03 (.a1(a[3]), .a2(b[3]), .z(c0b[3]));
or02d1 c13 (.a1(a[3]), .a2(b[3]), .z(c1b[3]));
xo02d1 s04 (.a1(a[4]), .a2(b[4]), .z(s0b[4]));
xn02d1 s14 (.a1(a[4]), .a2(b[4]), .zn(s1b[4]));
an02d1 c04 (.a1(a[4]), .a2(b[4]), .z(c0b[4]));
or02d1 c14 (.a1(a[4]), .a2(b[4]), .z(c1b[4]));
xo02d1 s05 (.a1(a[5]), .a2(b[5]), .z(s0b[5]));
xn02d1 s15 (.a1(a[5]), .a2(b[5]), .zn(s1b[5]));
an02d1 c05 (.a1(a[5]), .a2(b[5]), .z(c0b[5]));
or02d1 c15 (.a1(a[5]), .a2(b[5]), .z(c1b[5]));
xo02d1 s06 (.a1(a[6]), .a2(b[6]), .z(s0b[6]));
xn02d1 s16 (.a1(a[6]), .a2(b[6]), .zn(s1b[6]));
an02d1 c06 (.a1(a[6]), .a2(b[6]), .z(c0b[6]));
or02d1 c16 (.a1(a[6]), .a2(b[6]), .z(c1b[6]));
xo02d1 s07 (.a1(a[7]), .a2(b[7]), .z(s0b[7]));
xn02d1 s17 (.a1(a[7]), .a2(b[7]), .zn(s1b[7]));
an02d1 c07 (.a1(a[7]), .a2(b[7]), .z(c0b[7]));
or02d1 c17 (.a1(a[7]), .a2(b[7]), .z(c1b[7]));
xo02d1 s08 (.a1(a[8]), .a2(b[8]), .z(s0b[8]));
xn02d1 s18 (.a1(a[8]), .a2(b[8]), .zn(s1b[8]));
an02d1 c08 (.a1(a[8]), .a2(b[8]), .z(c0b[8]));
or02d1 c18 (.a1(a[8]), .a2(b[8]), .z(c1b[8]));
xo02d1 s09 (.a1(a[9]), .a2(b[9]), .z(s0b[9]));
xn02d1 s19 (.a1(a[9]), .a2(b[9]), .zn(s1b[9]));
an02d1 c09 (.a1(a[9]), .a2(b[9]), .z(c0b[9]));
or02d1 c19 (.a1(a[9]), .a2(b[9]), .z(c1b[9]));
xo02d1 s010 (.a1(a[10]),.a2(b[10]), .z(s0b[10]));
xn02d1 s110 (.a1(a[10]),.a2(b[10]),.zn(s1b[10]));
an02d1 c010 (.a1(a[10]),.a2(b[10]), .z(c0b[10]));
or02d1 c110 (.a1(a[10]),.a2(b[10]), .z(c1b[10]));
xo02d1 s011 (.a1(a[11]),.a2(b[11]), .z(s0b[11]));
xn02d1 s111 (.a1(a[11]),.a2(b[11]),.zn(s1b[11]));
an02d1 c011 (.a1(a[11]),.a2(b[11]), .z(c0b[11]));
or02d1 c111 (.a1(a[11]),.a2(b[11]), .z(c1b[11]));
// first rank of muxes (all muxes should be high performance):
mx21d1h mas00 (.s(ci), .i0(s0b[0]), .i1(s1b[0]), .z(s[0]));
mx21d1h mac00 (.s(ci), .i0(c0b[0]), .i1(c1b[0]), .z(mac0b0));
mx21d1h mas02 (.s(c0b[1]), .i0(s0b[2]), .i1(s1b[2]), .z(mas0b2));
mx21d1h mas12 (.s(c1b[1]), .i0(s0b[2]), .i1(s1b[2]), .z(mas1b2));
mx21d1h mac02 (.s(c0b[1]), .i0(c0b[2]), .i1(c1b[2]), .z(mac0b2));
mx21d1h mac12 (.s(c1b[1]), .i0(c0b[2]), .i1(c1b[2]), .z(mac1b2));
mx21d1h mas04 (.s(c0b[3]), .i0(s0b[4]), .i1(s1b[4]), .z(mas0b4));
mx21d1h mas14 (.s(c1b[3]), .i0(s0b[4]), .i1(s1b[4]), .z(mas1b4));
mx21d1h mac04 (.s(c0b[3]), .i0(c0b[4]), .i1(c1b[4]), .z(mac0b4));
mx21d1h mac14 (.s(c1b[3]), .i0(c0b[4]), .i1(c1b[4]), .z(mac1b4));
mx21d1h mas06 (.s(c0b[5]), .i0(s0b[6]), .i1(s1b[6]), .z(mas0b6));
mx21d1h mas16 (.s(c1b[5]), .i0(s0b[6]), .i1(s1b[6]), .z(mas1b6));
mx21d1h mac06 (.s(c0b[5]), .i0(c0b[6]), .i1(c1b[6]), .z(mac0b6));
mx21d1h mac16 (.s(c1b[5]), .i0(c0b[6]), .i1(c1b[6]), .z(mac1b6));
mx21d1h mas08 (.s(c0b[7]), .i0(s0b[8]), .i1(s1b[8]), .z(mas0b8));
mx21d1h mas18 (.s(c1b[7]), .i0(s0b[8]), .i1(s1b[8]), .z(mas1b8));
mx21d1h mac08 (.s(c0b[7]), .i0(c0b[8]), .i1(c1b[8]), .z(mac0b8));
mx21d1h mac18 (.s(c1b[7]), .i0(c0b[8]), .i1(c1b[8]), .z(mac1b8));
mx21d1h mas010 (.s(c0b[9]), .i0(s0b[10]),.i1(s1b[10]),.z(mas0b10));
mx21d1h mas110 (.s(c1b[9]), .i0(s0b[10]),.i1(s1b[10]),.z(mas1b10));
mx21d1h mac010 (.s(c0b[9]), .i0(c0b[10]),.i1(c1b[10]),.z(mac0b10));
mx21d1h mac110 (.s(c1b[9]), .i0(c0b[10]),.i1(c1b[10]),.z(mac1b10));
// second rank of muxes:
mx21d1h mbs01 (.s(mac0b0), .i0(s0b[1]), .i1(s1b[1]), .z(s[1]));
mx21d1h mbs02 (.s(mac0b0), .i0(mas0b2), .i1(mas1b2), .z(s[2]));
mx21d1h mbc02 (.s(mac0b0), .i0(mac0b2), .i1(mac1b2), .z(mbc0b2));
mx21d1h mbs05 (.s(mac0b4), .i0(s0b[5]), .i1(s1b[5]), .z(mbs0b5));
mx21d1h mbs15 (.s(mac1b4), .i0(s0b[5]), .i1(s1b[5]), .z(mbs1b5));
mx21d1h mbs06 (.s(mac0b4), .i0(mas0b6), .i1(mas1b6), .z(mbs0b6));
mx21d1h mbs16 (.s(mac1b4), .i0(mas0b6), .i1(mas1b6), .z(mbs1b6));
mx21d1h mbc06 (.s(mac0b4), .i0(mac0b6), .i1(mac1b6), .z(mbc0b6));
mx21d1h mbc16 (.s(mac1b4), .i0(mac0b6), .i1(mac1b6), .z(mbc1b6));
mx21d1h mbs09 (.s(mac0b8), .i0(s0b[9]), .i1(s1b[9]), .z(mbs0b9));
mx21d1h mbs19 (.s(mac1b8), .i0(s0b[9]), .i1(s1b[9]), .z(mbs1b9));
mx21d1h mbs010 (.s(mac0b8), .i0(mas0b10),.i1(mas1b10),.z(mbs0b10));
mx21d1h mbs110 (.s(mac1b8), .i0(mas0b10),.i1(mas1b10),.z(mbs1b10));
mx21d1h mbc010 (.s(mac0b8), .i0(mac0b10),.i1(mac1b10),.z(mbc0b10));
mx21d1h mbc110 (.s(mac1b8), .i0(mac0b10),.i1(mac1b10),.z(mbc1b10));
// third rank of muxes:
mx21d1h mcs03 (.s(mbc0b2), .i0(s0b[3]), .i1(s1b[3]), .z(s[3]));
mx21d1h mcs04 (.s(mbc0b2), .i0(mas0b4), .i1(mas1b4), .z(s[4]));
mx21d1h mcs05 (.s(mbc0b2), .i0(mbs0b5), .i1(mbs1b5), .z(s[5]));
mx21d1h mcs06 (.s(mbc0b2), .i0(mbs0b6), .i1(mbs1b6), .z(s[6]));
mx21d1h mcc06 (.s(mbc0b2), .i0(mbc0b6), .i1(mbc1b6), .z(mcc0b6));
mx21d1h mcs011 (.s(mbc0b10),.i0(s0b[11]),.i1(s1b[11]),.z(mcs0b11));
mx21d1h mcs111 (.s(mbc1b10),.i0(s0b[11]),.i1(s1b[11]),.z(mcs1b11));
mx21d1h mcc011 (.s(mbc0b10),.i0(c0b[11]),.i1(c1b[11]),.z(mcc0b11));
mx21d1h mcc111 (.s(mbc1b10),.i0(c0b[11]),.i1(c1b[11]),.z(mcc1b11));
// fourth rank of muxes:
mx21d1h mds07 (.s(mcc0b6), .i0(s0b[7]), .i1(s1b[7]), .z(s[7]));
mx21d1h mds08 (.s(mcc0b6), .i0(mas0b8), .i1(mas1b8), .z(s[8]));
mx21d1h mds09 (.s(mcc0b6), .i0(mbs0b9), .i1(mbs1b9), .z(s[9]));
mx21d1h mds010 (.s(mcc0b6), .i0(mbs0b10),.i1(mbs1b10),.z(s[10]));
mx21d1h mds011 (.s(mcc0b6), .i0(mcs0b11),.i1(mcs1b11),.z(s[11]));
mx21d1h mdc0co (.s(mcc0b6), .i0(mcc0b11),.i1(mcc1b11),.z(co));
endmodule // cc_add12