/
add8_242.v
144 lines (139 loc) · 4.32 KB
/
add8_242.v
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
// Library = EvoApprox8b
// Circuit = add8_242
// Area (180) = 1392
// Delay (180) = 0.850
// Power (180) = 390.20
// Area (45) = 99
// Delay (45) = 0.360
// Power (45) = 30.85
// Nodes = 35
// HD = 184704
// MAE = 4.46094
// MSE = 31.75000
// MRE = 2.36 %
// WCE = 15
// WCRE = 600 %
// EP = 92.4 %
module add8_242(A, B, O);
input [7:0] A;
input [7:0] B;
output [8:0] O;
wire [2031:0] N;
assign N[0] = A[0];
assign N[1] = A[0];
assign N[2] = A[1];
assign N[3] = A[1];
assign N[4] = A[2];
assign N[5] = A[2];
assign N[6] = A[3];
assign N[7] = A[3];
assign N[8] = A[4];
assign N[9] = A[4];
assign N[10] = A[5];
assign N[11] = A[5];
assign N[12] = A[6];
assign N[13] = A[6];
assign N[14] = A[7];
assign N[15] = A[7];
assign N[16] = B[0];
assign N[17] = B[0];
assign N[18] = B[1];
assign N[19] = B[1];
assign N[20] = B[2];
assign N[21] = B[2];
assign N[22] = B[3];
assign N[23] = B[3];
assign N[24] = B[4];
assign N[25] = B[4];
assign N[26] = B[5];
assign N[27] = B[5];
assign N[28] = B[6];
assign N[29] = B[6];
assign N[30] = B[7];
assign N[31] = B[7];
PDKGEPDKGENNOR2X1 n42(.A(N[28]), .B(N[12]), .Y(N[42]));
assign N[43] = N[42];
PDKGEPDKGENNOR2X1 n44(.A(N[28]), .B(N[12]), .Y(N[44]));
assign N[45] = N[44];
PDKGENAND2X1 n46(.A(N[26]), .B(N[10]), .Y(N[46]));
PDKGENNOR3X1 n48(.A(N[24]), .B(N[8]), .C(N[6]), .Y(N[48]));
assign N[49] = N[48];
PDKGENBUFX2 n50(.A(N[45]), .Y(N[50]));
assign N[51] = N[50];
NPDKGEPDKGENNOR2X1 n54(.A(N[6]), .B(N[4]), .Y(N[54]));
PDKGENAND2X1 n68(.A(N[8]), .B(N[24]), .Y(N[68]));
assign N[69] = N[68];
PDKGENBUFX2 n70(.A(N[69]), .Y(N[70]));
PDKGENHAX1 n72(.A(N[24]), .B(N[8]), .YS(N[72]), .YC(N[73]));
PDKGENHAX1 n78(.A(N[10]), .B(N[26]), .YS(N[78]), .YC(N[79]));
PDKGENHAX1 n86(.A(N[12]), .B(N[28]), .YS(N[86]), .YC(N[87]));
PDKGENHAX1 n96(.A(N[14]), .B(N[30]), .YS(N[96]), .YC(N[97]));
PDKGENAND2X1 n104(.A(N[70]), .B(N[54]), .Y(N[104]));
PDKGEPDKGENNOR2X1 n134(.A(N[26]), .B(N[10]), .Y(N[134]));
PDKGENBUFX2 n136(.A(N[134]), .Y(N[136]));
assign N[137] = N[136];
PDKGENBUFX2 n142(.A(N[87]), .Y(N[142]));
PDKGENBUFX2 n152(.A(N[70]), .Y(N[152]));
assign N[153] = N[152];
PDKGENBUFX2 n160(.A(N[96]), .Y(N[160]));
PDKGENAND2X1 n162(.A(N[43]), .B(N[46]), .Y(N[162]));
assign N[163] = N[162];
PDKGENBUFX2 n164(.A(N[160]), .Y(N[164]));
assign N[165] = N[164];
PDKGENAND2X1 n170(.A(N[51]), .B(N[136]), .Y(N[170]));
assign N[171] = N[170];
NPDKGEPDKGENNOR2X1 n176(.A(N[49]), .B(N[104]), .Y(N[176]));
assign N[177] = N[176];
PDKGEPDKGENNOR2X1 n180(.A(N[142]), .B(N[163]), .Y(N[180]));
PDKGENBUFX2 n206(.A(N[137]), .Y(N[206]));
assign N[207] = N[206];
PDKGENAND2X1 n226(.A(N[207]), .B(N[152]), .Y(N[226]));
PDKGEPDKGENNOR2X1 n244(.A(N[46]), .B(N[226]), .Y(N[244]));
assign N[245] = N[244];
PDKGENAND2X1 n254(.A(N[171]), .B(N[153]), .Y(N[254]));
PDKGEPDKGENNOR2X1 n272(.A(N[180]), .B(N[254]), .Y(N[272]));
assign N[273] = N[272];
PDKGEPDKGENNOR2X1 n344(.A(N[48]), .B(N[72]), .Y(N[344]));
assign N[345] = N[344];
PDKGENBUFX2 n348(.A(N[273]), .Y(N[348]));
PDKGENBUFX2 n376(.A(N[165]), .Y(N[376]));
assign N[377] = N[376];
PDKGENHAX1 n394(.A(N[78]), .B(N[73]), .YS(N[394]), .YC(N[395]));
PDKGENHAX1 n404(.A(N[86]), .B(N[245]), .YS(N[404]), .YC(N[405]));
PDKGENHAX1 n412(.A(N[377]), .B(N[348]), .YS(N[412]), .YC(N[413]));
PDKGEPDKGENNOR2X1 n422(.A(N[97]), .B(N[413]), .Y(N[422]));
assign O[0] = N[20];
assign O[1] = N[345];
assign O[2] = N[344];
assign O[3] = N[22];
assign O[4] = N[177];
assign O[5] = N[394];
assign O[6] = N[404];
assign O[7] = N[412];
assign O[8] = N[422];
endmodule
/* mod */
module PDKGENHAX1( input A, input B, output YS, output YC );
assign YS = A ^ B;
assign YC = A & B;
endmodule
/* mod */
module PDKGEPDKGENNOR2X1(input A, input B, output Y );
assign Y = A | B;
endmodule
/* mod */
module PDKGENAND2X1(input A, input B, output Y );
assign Y = A & B;
endmodule
/* mod */
module PDKGENNOR2X1(input A, input B, output Y );
assign Y = ~(A | B);
endmodule
/* mod */
module PDKGENNOR3X1(input A, input B, input C, output Y );
assign Y = ~((A | B) | C);
endmodule
/* mod */
module PDKGENBUFX2(input A, output Y );
assign Y = A;
endmodule