/*** * This code is a part of EvoApproxLib library (ehw.fit.vutbr.cz/approxlib) distributed under The MIT License. * When used, please cite the following article(s): M. Ceska, J. Matyas, V. Mrazek, and T. Vojnar, Designing Approximate Arithmetic Circuits with Combined Error Constraints. In: Proceeding of 25th Euromicro Conference on Digital System Design 2022 (DSD'22). Gran Canaria, 2022. * This file contains a circuit from a sub-set of pareto optimal circuits with respect to the pwr and mre parameters ***/ // MAE% = 0.44 % // MAE = 285 // WCE% = 4.13 % // WCE = 2709 // WCRE% = 125.00 % // EP% = 98.68 % // MRE% = 5.03 % // MSE = 172520 // PDK45_PWR = 0.142 mW // PDK45_AREA = 347.8 um2 // PDK45_DELAY = 0.91 ns #include #include uint16_t mul8u_2NDH(uint8_t a, uint8_t b) { uint8_t w0; uint8_t w1; uint8_t w2; uint8_t w3; uint8_t w4; uint8_t w5; uint8_t w6; uint8_t w7; uint8_t w8; uint8_t w9; uint8_t w10; uint8_t w11; uint8_t w12; uint8_t w13; uint8_t w14; uint8_t w15; uint8_t w18; uint8_t w20; uint8_t w21; uint8_t w23; uint8_t w24; uint8_t w27; uint8_t w31; uint8_t w33; uint8_t w36; uint8_t w37; uint8_t w39; uint8_t w42; uint8_t w43; uint8_t w44; uint8_t w45; uint8_t w49; uint8_t w50; uint8_t w51; uint8_t w52; uint8_t w53; uint8_t w54; uint8_t w55; uint8_t w56; uint8_t w58; uint8_t w59; uint8_t w60; uint8_t w63; uint8_t w64; uint8_t w65; uint8_t w69; uint8_t w73; uint8_t w78; uint8_t w79; uint8_t w81; uint8_t w84; uint8_t w86; uint8_t w91; uint8_t w92; uint8_t w93; uint8_t w94; uint8_t w99; uint8_t w100; uint8_t w103; uint8_t w104; uint8_t w112; uint8_t w116; uint8_t w121; uint8_t w124; uint8_t w125; uint8_t w129; uint8_t w131; uint8_t w133; uint8_t w134; uint8_t w138; uint8_t w143; uint8_t w146; uint8_t w147; uint8_t w148; uint8_t w149; uint8_t w151; uint8_t w153; uint8_t w157; uint8_t w161; uint8_t w163; uint8_t w164; uint8_t w165; uint8_t w166; uint8_t w167; uint8_t w168; uint8_t w172; uint8_t w173; uint8_t w176; uint8_t w179; uint8_t w180; uint8_t w181; uint8_t w183; uint8_t w187; uint8_t w193; uint8_t w197; uint8_t w201; uint8_t w202; uint8_t w203; uint8_t w206; uint8_t w207; uint8_t w208; uint8_t w213; uint8_t w216; uint8_t w217; uint8_t w218; uint8_t w219; uint8_t w220; uint8_t w221; uint8_t w222; uint8_t w223; uint8_t w224; uint8_t w228; uint8_t w230; uint8_t w232; uint8_t w233; uint8_t w235; uint8_t w238; uint8_t w240; uint8_t w248; uint8_t w251; uint8_t w253; uint8_t w256; uint8_t w257; uint8_t w258; uint8_t w259; uint8_t w264; uint8_t w266; uint8_t w267; uint8_t w269; uint8_t w274; uint8_t w275; uint8_t w276; uint8_t w281; uint8_t w287; uint8_t w289; uint8_t w290; uint8_t w292; uint8_t w297; uint8_t w302; uint8_t w304; uint8_t w309; uint8_t w322; uint8_t w330; uint8_t w349; uint8_t w350; uint8_t w353; uint8_t w354; uint8_t w356; uint8_t w357; uint8_t w358; uint8_t w359; uint8_t w360; uint8_t w361; uint8_t w362; uint16_t res = 0; w0 = (a >> 0) & 0x1; w1 = (a >> 1) & 0x1; w2 = (a >> 2) & 0x1; w3 = (a >> 3) & 0x1; w4 = (a >> 4) & 0x1; w5 = (a >> 5) & 0x1; w6 = (a >> 6) & 0x1; w7 = (a >> 7) & 0x1; w8 = (b >> 0) & 0x1; w9 = (b >> 1) & 0x1; w10 = (b >> 2) & 0x1; w11 = (b >> 3) & 0x1; w12 = (b >> 4) & 0x1; w13 = (b >> 5) & 0x1; w14 = (b >> 6) & 0x1; w15 = (b >> 7) & 0x1; w18 = w7 & w13; w20 = w4 & w15; w21 = w0 & w15; w23 = w7 & w9; w24 = w2 & w13; w27 = w3 & w13; w31 = w5 & w15; w33 = w4 & w12; w36 = w2 & w14; w37 = w7 & w11; w39 = w6 & w12; w42 = w4 & w11; w43 = w6 & w10; w44 = w3 & w12; w45 = w6 & w14; w49 = w7 & w10; w50 = w6 & w11; w51 = w1 & w15; w52 = w7 & w8; w53 = w7 & w12; w54 = w3 & w14; w55 = w1 & w14; w56 = w5 & w14; w58 = w6 & w15; w59 = w5 & w10; w60 = w5 & w12; w63 = w5 & w13; w64 = w7 & w14; w65 = w3 & w15; w69 = w6 & w9; w73 = w7 & w15; w78 = w4 & w13; w79 = w5 & w11; w81 = w2 & w15; w84 = w6 & w13; w86 = w4 & w14; w91 = w23 | w43; w92 = w58 & w64; w93 = w64 ^ w58; w94 = w50 | w60; w99 = w37 ^ w39; w100 = w37 & w39; w103 = w99 ^ w63; w104 = w79 | w33; w112 = w42 | w36; w116 = w94 | w78; w121 = w79 & w39; w124 = w78 & w94; w125 = w73 ^ w92; w129 = w84 & w53; w131 = w53 ^ w84; w133 = w129 ^ w45; w134 = w31 & w133; w138 = w63 & w99; w143 = w24 | w44; w146 = w100 | w138; w147 = w143 | w55; w148 = w104 | w27; w149 = w124 & w14; w151 = w146 ^ w56; w153 = w133 ^ w31; w157 = w124 ^ w86; w161 = w49 | w116; w163 = w116 & w49; w164 = w103 ^ w163; w165 = w146 & w56; w166 = w153 & w18; w167 = w112 | w59; w168 = w151 ^ w20; w172 = w121 | w54; w173 = w93 & w166; w176 = w129 & w14; w179 = w131 ^ w168; w180 = w91 ^ w167; w181 = w168 & w131; w183 = w157 | w65; w187 = w103 & w163; w193 = w20 & w151; w197 = w18 ^ w153; w201 = w176 | w134; w202 = w93 ^ w166; w203 = w65 & w157; w206 = w165 | w193; w207 = w91 & w167; w208 = w197 & w181; w213 = w164 ^ w183; w216 = w197 ^ w181; w217 = w201 & w202; w218 = w149 | w203; w219 = w148 & w180; w220 = w36 | w51; w221 = w173 | w217; w222 = w202 ^ w201; w223 = w183 & w164; w224 = w180 ^ w148; w228 = w73 & w221; w230 = w206 & w216; w232 = w216 ^ w206; w233 = w187 | w223; w235 = w172 | w81; w238 = w125 ^ w221; w240 = w179 & w233; w248 = w208 | w230; w251 = w207 | w219; w253 = w179 ^ w233; w256 = w161 ^ w251; w257 = w222 ^ w248; w258 = w222 & w248; w259 = w235 & w256; w264 = w253 ^ w218; w266 = w218 & w253; w267 = w240 | w266; w269 = w161 & w251; w274 = w256 ^ w235; w275 = w232 & w267; w276 = w232 ^ w267; w281 = w222 & w275; w287 = w269 | w259; w289 = w224 | w220; w290 = w147 | w69; w292 = w258 | w281; w297 = w290 | w52; w302 = w213 & w287; w304 = w213 ^ w287; w309 = w297 | w21; w322 = w264 ^ w302; w330 = w264 & w302; w349 = w276 ^ w330; w350 = w276 & w330; w353 = w257 & w350; w354 = w275 | w350; w356 = w257 ^ w354; w357 = w292 | w353; w358 = w238 ^ w357; w359 = w322; w360 = w73 & w357; w361 = w228 | w360; w362 = w92 | w361; res |= ((long) w151 & 0x1) << 0; res |= ((long) w222 & 0x1) << 1; res |= ((long) w143 & 0x1) << 2; res |= ((long) w143 & 0x1) << 3; res |= ((long) w290 & 0x1) << 4; res |= ((long) w289 & 0x1) << 5; res |= ((long) w309 & 0x1) << 6; res |= ((long) w309 & 0x1) << 7; res |= ((long) w289 & 0x1) << 8; res |= ((long) w274 & 0x1) << 9; res |= ((long) w304 & 0x1) << 10; res |= ((long) w359 & 0x1) << 11; res |= ((long) w349 & 0x1) << 12; res |= ((long) w356 & 0x1) << 13; res |= ((long) w358 & 0x1) << 14; res |= ((long) w362 & 0x1) << 15; return res; }