tf_lerp_csa_add12.v
5.88 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
// Module instances modified by /home/rws/workarea/rf/sw/bbplayer/tools/necprimfix
//
// 11 instances of an02d2 changed to j_an02.
// 43 instances of mx21d1h changed to j_mx21.
// 10 instances of or02d2 changed to j_or02.
// 9 instances of xn02d2 changed to j_xn02.
// 9 instances of xo02d2 changed to j_xo02.
//
////////////////////////////////////////////////////////////////////////
//
// Project Reality
//
// module: tf_lerp_csa_add12
// description: Final carry-propigating adder for csa tree for lerp for
// texture filter unit. 12 bits in, 9 ms out, no carry i/o.
// Conditional sum adder.
//
// designer: Phil Gossett
// date: 6/25/94
//
////////////////////////////////////////////////////////////////////////
module tf_lerp_csa_add12 (a, b, s);
input [11:0] a;
input [11:0] b;
wire [8:0] s0b; // shifted down three bits (unused)
wire [8:0] s1b; // shifted down three bits (unused)
wire [10:0] c0b;
wire [10:0] c1b;
output [8:0] s; // only output ms 9 bits of 12
// conditional cells:
j_an02 c00 (.a1(a[0]), .a2(b[0]), .z(c0b[0]));
assign c1b[0] = c0b[0]; // just to avoid warning (net not driven)
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_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[0]));
j_xn02 s13 (.a1(a[3]), .a2(b[3]), .zn(s1b[0]));
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[1]));
j_xn02 s14 (.a1(a[4]), .a2(b[4]), .zn(s1b[1]));
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[2]));
j_xn02 s15 (.a1(a[5]), .a2(b[5]), .zn(s1b[2]));
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[3]));
j_xn02 s16 (.a1(a[6]), .a2(b[6]), .zn(s1b[3]));
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[4]));
j_xn02 s17 (.a1(a[7]), .a2(b[7]), .zn(s1b[4]));
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[5]));
j_xn02 s18 (.a1(a[8]), .a2(b[8]), .zn(s1b[5]));
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[6]));
j_xn02 s19 (.a1(a[9]), .a2(b[9]), .zn(s1b[6]));
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[7]));
j_xn02 s110 (.a1(a[10]),.a2(b[10]),.zn(s1b[7]));
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[8]));
j_xn02 s111 (.a1(a[11]),.a2(b[11]),.zn(s1b[8]));
// first rank of muxes (all muxes should be high performance):
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[1]), .i1(s1b[1]), .z(mas0b4));
j_mx21 mas14 (.s(c1b[3]), .i0(s0b[1]), .i1(s1b[1]), .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[3]), .i1(s1b[3]), .z(mas0b6));
j_mx21 mas16 (.s(c1b[5]), .i0(s0b[3]), .i1(s1b[3]), .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[5]), .i1(s1b[5]), .z(mas0b8));
j_mx21 mas18 (.s(c1b[7]), .i0(s0b[5]), .i1(s1b[5]), .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[7]), .i1(s1b[7]), .z(mas0b10));
j_mx21 mas110 (.s(c1b[9]), .i0(s0b[7]), .i1(s1b[7]), .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 mbc02 (.s(c0b[0]), .i0(mac0b2), .i1(mac1b2), .z(mbc0b2));
j_mx21 mbs05 (.s(mac0b4), .i0(s0b[2]), .i1(s1b[2]), .z(mbs0b5));
j_mx21 mbs15 (.s(mac1b4), .i0(s0b[2]), .i1(s1b[2]), .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[6]), .i1(s1b[6]), .z(mbs0b9));
j_mx21 mbs19 (.s(mac1b8), .i0(s0b[6]), .i1(s1b[6]), .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[0]), .i1(s1b[0]), .z(s[0]));
j_mx21 mcs04 (.s(mbc0b2), .i0(mas0b4), .i1(mas1b4), .z(s[1]));
j_mx21 mcs05 (.s(mbc0b2), .i0(mbs0b5), .i1(mbs1b5), .z(s[2]));
j_mx21 mcs06 (.s(mbc0b2), .i0(mbs0b6), .i1(mbs1b6), .z(s[3]));
j_mx21 mcc06 (.s(mbc0b2), .i0(mbc0b6), .i1(mbc1b6), .z(mcc0b6));
j_mx21 mcs011 (.s(mbc0b10),.i0(s0b[8]), .i1(s1b[8]), .z(mcs0b11));
j_mx21 mcs111 (.s(mbc1b10),.i0(s0b[8]), .i1(s1b[8]), .z(mcs1b11));
// fourth rank of muxes:
j_mx21 mds07 (.s(mcc0b6), .i0(s0b[4]), .i1(s1b[4]), .z(s[4]));
j_mx21 mds08 (.s(mcc0b6), .i0(mas0b8), .i1(mas1b8), .z(s[5]));
j_mx21 mds09 (.s(mcc0b6), .i0(mbs0b9), .i1(mbs1b9), .z(s[6]));
j_mx21 mds010 (.s(mcc0b6), .i0(mbs0b10),.i1(mbs1b10),.z(s[7]));
j_mx21 mds011 (.s(mcc0b6), .i0(mcs0b11),.i1(mcs1b11),.z(s[8]));
endmodule // tf_lerp_csa_add12