bl_lerp_add10.v
5.21 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
// Module instances modified by /home/rws/workarea/rf/sw/bbplayer/tools/necprimfix
//
// 9 instances of an02d1 changed to j_an02.
// 35 instances of mx21d1h changed to j_mx21.
// 8 instances of or02d1 changed to j_or02.
// 9 instances of xn02d1 changed to j_xn02.
// 10 instances of xo02d1 changed to j_xo02.
//
////////////////////////////////////////////////////////////////////////
//
// Project Reality
//
// module: bl_lerp_add10
// description: Final carry-propigating adder for csa tree for lerp for
// blend unit. 10 bits in and out, no carry i/o.
// Conditional sum adder.
//
// designer: Phil Gossett
// date: 8/12/94
//
////////////////////////////////////////////////////////////////////////
module bl_lerp_add10 (a, b, s);
input [9:0] a;
input [9:0] b;
wire [9:0] s0b;
wire [9:0] s1b;
wire [8:0] c0b;
wire [8:0] c1b;
output [9:0] s;
// conditional cells:
j_xo02 s00 (.a1(a[0]), .a2(b[0]), .z(s[0])); // output
assign s0b[0] = s[0]; // just to avoid warning (net not driven)
assign s1b[0] = s[0]; // just to avoid warning (net not driven)
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_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]));
// first rank of muxes (all muxes should be high performance):
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));
// second rank of muxes:
j_mx21 mbs01 (.s(c0b[0]), .i0(s0b[1]), .i1(s1b[1]), .z(s[1]));
j_mx21 mbs02 (.s(c0b[0]), .i0(mas0b2), .i1(mas1b2), .z(s[2]));
j_mx21 mbc02 (.s(c0b[0]), .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));
// 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));
// 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]));
endmodule // bl_lerp_add10