/*** * 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): V. Mrazek, Z. Vasicek, L. Sekanina, H. Jiang and J. Han, "Scalable Construction of Approximate Multipliers With Formally Guaranteed Worst Case Error" in IEEE Transactions on Very Large Scale Integration (VLSI) Systems, vol. 26, no. 11, pp. 2572-2576, Nov. 2018. doi: 10.1109/TVLSI.2018.2856362 * This file contains a circuit from a sub-set of pareto optimal circuits with respect to the pwr and mae parameters ***/ // MAE% = 0.081 % // MAE = 53 // WCE% = 0.39 % // WCE = 255 // WCRE% = 300.00 % // EP% = 74.61 % // MRE% = 4.41 % // MSE = 5462 // PDK45_PWR = 0.301 mW // PDK45_AREA = 558.9 um2 // PDK45_DELAY = 1.36 ns #include #include uint16_t mul8s_1L2J(uint8_t A, uint8_t B) { uint16_t O; uint8_t n162,O13,n85,O15,n38,n39,n88,O10,n290,n319,n95,O5,n36,n37,n349,n348,O11,n303,n341,O2,n343,n345,n117,n346,n132,n133,n228,n229,n136,n137,n134,n135,n222,n223,n138,n139,n226,n227,n224,O1,n160,n87,n327,n86,n316,n151,n231,O4,n325,n80,n235,n234,n237,n236,n81,n233,n83,n82,n200,n232,n239,n238,n320,n201,n169,n129,n128,n168,n334,n335,n127,n126,n330,n331,n332,n122,n89,O12,n64,n155,O6,n211,n317,n240,n98,n99,n245,n246,n247,n92,n93,n90,n91,n96,n97,n94,O0,n158,n159,n342,n329,n328,n150,n152,n153,n323,n322,n321,n157,n67,n66,n65,n333,n63,n62,n60,n284,n291,n307,n69,n230,n125,n175,n124,n301,n68,n173,n253,n252,n304,n257,n170,n255,n254,n121,O3,n171,n318,n120,n161,n149,n148,n123,n340,n143,n142,n310,n140,n147,n146,n145,n144,n74,n75,n76,n77,n70,n71,n72,n73,O9,n262,n339,n78,n79,n263,n338,n294,n178,n293,n261,n176,n177,n174,n306,n172,n300,n268,n269,n266,n267,n264,n265,n309,n308,n260,n179,n248,n131,n289,n326,n344,n49,n48,n286,n287,n280,n282,n283,n40,n43,n42,n45,n44,n47,O14,n250,n299,n251,O8,n298,n220,n256,n279,n278,n163,n221,n165,n164,n167,n166,n271,n270,n273,n272,n275,n274,n277,n276,n209,n324,n130,n225,n259,n315,n297,n296,n295,n258,n156,n292,n58,n59,n56,n57,n54,n55,n52,n53,n50,n51,n350,n314,n305,n351,n337,n198,n199,n106,n195,n196,n190,n191,n192,n193,n114,n116,n302,n110,n111,n112,n113,n204,n205,n206,n207,n118,n119,n202,n203,n219,n249,n218,n288,n100,n242,n285,O7,n312,n243,n313,n244,n208,n141,n214,n189,n188,n187,n186,n185,n184,n183,n182,n181,n180,n107,n194,n105,n104,n103,n102,n101,n217,n216,n215,n210,n213,n212,n109,n108; O0=0; O1=0; O2=((B >> 1)&1)&((A >> 1)&1); n108=((B >> 4)&1)&((A >> 3)&1); n110=((B >> 6)&1)&((A >> 1)&1); n111=((B >> 5)&1)&((A >> 2)&1); n112=((B >> 3)&1)&((A >> 4)&1); n113=((B >> 2)&1)&((A >> 5)&1); n114=((B >> 1)&1)&((A >> 6)&1); n122=((B >> 1)&1)&((A >> 7)&1); n147=((B >> 5)&1)&((A >> 3)&1); n149=((B >> 7)&1)&((A >> 1)&1); n150=((B >> 6)&1)&((A >> 2)&1); n151=((B >> 4)&1)&((A >> 4)&1); n152=((B >> 3)&1)&((A >> 5)&1); n153=((B >> 2)&1)&((A >> 6)&1); n167=((B >> 2)&1)&((A >> 7)&1); n192=((B >> 6)&1)&((A >> 3)&1); n193=((B >> 7)&1)&((A >> 2)&1); n194=((B >> 5)&1)&((A >> 4)&1); n195=((B >> 4)&1)&((A >> 5)&1); n196=((B >> 3)&1)&((A >> 6)&1); n212=((B >> 3)&1)&((A >> 7)&1); n227=((B >> 5)&1)&((A >> 5)&1); n235=((B >> 6)&1)&((A >> 4)&1); n238=~(((A >> 3)&1)|((A >> 2)&1)); n240=((B >> 4)&1)&((A >> 6)&1); n260=((B >> 4)&1)&((A >> 7)&1); n277=((B >> 7)&1)&((A >> 4)&1); n279=((B >> 6)&1)&((A >> 5)&1); n280=((B >> 5)&1)&((A >> 6)&1); n300=((B >> 5)&1)&((A >> 7)&1); n308=((B >> 6)&1)&((A >> 6)&1); n310=((B >> 7)&1)&((A >> 5)&1); n330=((B >> 6)&1)&((A >> 7)&1); n334=((B >> 7)&1)&((A >> 6)&1); n346=((B >> 7)&1)&((A >> 7)&1); n37=((B >> 2)&1)&((A >> 2)&1); n39=((B >> 1)&1)&((A >> 2)&1); n40=((B >> 2)&1)&((A >> 1)&1); n43=((B >> 1)&1)&((A >> 3)&1); n45=((B >> 3)&1)&((A >> 1)&1); n56=((B >> 2)&1)&((A >> 3)&1); n58=((B >> 4)&1)&((A >> 1)&1); n59=((B >> 3)&1)&((A >> 2)&1); n60=((B >> 1)&1)&((A >> 4)&1); n78=((B >> 3)&1)&((A >> 3)&1); n80=((B >> 5)&1)&((A >> 1)&1); n81=((B >> 4)&1)&((A >> 2)&1); n82=((B >> 2)&1)&((A >> 4)&1); n83=((B >> 1)&1)&((A >> 5)&1); n107=n81&n80; n109=n111^n110; n146=n111&n110; n148=~(n150^n149); n191=n150&~n149; n233=n192&n193; n237=((B >> 7)&1)&~n238; n239=((A >> 3)&1)&n193; n36=n37&O2; n38=~(n40|n39); n44=n45^n37; n55=n45&n37; n57=n59^n58; n77=n59&n58; n79=n81^n80; O3=~(n38|n36); n102=n78&n77; n103=n78&n79; n104=n79&n77; n106=~(n108^n107); n141=n108&n107; n142=n108&n109; n143=n109&n107; n145=~(n147^n146); n186=n147&n146; n187=n147&n148; n188=n148&n146; n190=~(n192^n191); n232=n192&n191; n234=n193&n191; n236=~n239&n237; n276=~(n277|n237); n278=((A >> 4)&1)&n237; n42=~(n43^n36); n50=n43&n36; n51=n43&n44; n52=n44&n36; n54=~(n56^n55); n72=n56&n55; n73=n56&n57; n74=n57&n55; n76=~(n78^n77); O4=~(n44^n42); n101=~(n103|n102); n105=n109^n106; n140=~(n142|n141); n144=n148^n145; n185=~(n187|n186); n189=n193^n190; n231=~(n233|n232); n273=n235&n236; n275=~(n278|n276); n309=~(n310^n276); n333=~n310&n276; n49=~(n51|n50); n53=n57^n54; n71=~(n73|n72); n75=n79^n76; n100=~n104&n101; n135=n112&~n105; n139=~n143&n140; n180=n151&~n144; n184=~n188&n185; n225=n194&~n189; n230=~n234&n231; n306=n279&n275; n328=n308&n309; n332=~n334&n333; n335=((A >> 6)&1)&~n333; n48=~n52&n49; n66=n60&~n53; n70=~n74&n71; n96=n82&~n75; n134=~(n105|n100); n136=n112&~n100; n138=~(n144^n139); n179=~(n144|n139); n181=n151&~n139; n183=~(n189^n184); n224=~(n189|n184); n226=n194&~n184; n229=n235^n230; n272=n235&~n230; n274=n236&~n230; n331=~(n335|n332); n345=~(n346^n332); n350=n346&n332; n47=~(n53^n48); n65=~(n53|n48); n67=n60&~n48; n69=~(n75^n70); n95=~(n75|n70); n97=n82&~n70; n99=~(n105^n100); O5=~(n60^n47); n133=~(n135|n134); n137=n151^n138; n178=~(n180|n179); n182=n194^n183; n223=~(n225|n224); n228=n236^n229; n271=~(n273|n272); n64=~(n66|n65); n68=n82^n69; n94=~(n96|n95); n98=n112^n99; n129=n113&~n98; n132=~n136&n133; n174=n152&~n137; n177=~n181&n178; n219=n195&~n182; n222=~n226&n223; n266=n227&~n228; n270=~n274&n271; n63=~n67&n64; n90=n83&~n68; n93=~n97&n94; n127=~(n98|n93); n128=n113&~n93; n131=~(n137^n132); n172=~(n137|n132); n173=n152&~n132; n176=~(n182^n177); n217=~(n182|n177); n218=n195&~n177; n221=n227^n222; n265=n227&~n222; n267=~(n228|n222); n269=n275^n270; n305=n275&~n270; n307=n279&~n270; n62=~(n68^n63); n88=~(n68|n63); n89=n83&~n63; n92=~(n98^n93); O6=~(n83^n62); n126=~(n128|n127); n130=n152^n131; n171=~(n173|n172); n175=n195^n176; n216=~(n218|n217); n220=~(n228^n221); n264=~(n266|n265); n268=n279^n269; n304=~(n306|n305); n87=~(n89|n88); n91=n113^n92; n121=n114&~n91; n125=~n129&n126; n166=n153&~n130; n170=~n174&n171; n211=n196&~n175; n215=~n219&n216; n258=n240&~n220; n263=~n267&n264; n298=n280&~n268; n303=~n307&n304; n86=~n90&n87; n119=~(n91|n86); n120=n114&~n86; n124=~(n130^n125); n164=~(n130|n125); n165=n153&~n125; n169=~(n175^n170); n209=~(n175|n170); n210=n196&~n170; n214=~(n220^n215); n257=~(n220|n215); n259=n240&~n215; n262=~(n268^n263); n297=~(n268|n263); n299=n280&~n263; n302=n308^n303; n327=n308&~n303; n329=n309&~n303; n85=~(n91^n86); O7=~(n114^n85); n118=~(n120|n119); n123=n153^n124; n163=~(n165|n164); n168=n196^n169; n208=~(n210|n209); n213=n240^n214; n256=~(n258|n257); n261=n280^n262; n296=~(n298|n297); n301=n309^n302; n326=~(n328|n327); n117=~n121&n118; n158=~(n122|n123); n162=~n166&n163; n203=~(n167|n168); n207=~n211&n208; n251=~(n212|n213); n255=~n259&n256; n291=~(n260|n261); n295=~n299&n296; n321=~(n300|n301); n325=~n329&n326; n116=~(n122^n117); n157=~(n122|n117); n159=~(n123|n117); n161=~(n167^n162); n202=~(n167|n162); n204=~(n168|n162); n206=~(n212^n207); n250=~(n212|n207); n252=~(n213|n207); n254=~(n260^n255); n290=~(n260|n255); n292=~(n261|n255); n294=~(n300^n295); n320=~(n300|n295); n322=~(n301|n295); n324=n330^n325; n343=~(n330|n325); O8=n123^n116; n156=~(n158|n157); n160=~(n168^n161); n201=~(n203|n202); n205=~(n213^n206); n249=~(n251|n250); n253=~(n261^n254); n289=~(n291|n290); n293=~(n301^n294); n319=~(n321|n320); n323=n331^n324; n342=~(n331|n343); n155=~n159&n156; n200=~n204&n201; n248=~n252&n249; n288=~n292&n289; n318=~n322&n319; O9=n160^n155; n198=~(n160|n155); n199=~(n205^n200); n246=~(n205|n200); n286=~(n253|n248); n316=~(n293|n288); n341=n323&~n318; O10=~(n199^n198); n245=~n205&n198; n247=~n200&n198; n340=n342&~n341; n244=~(n246|n245); n243=~n247&n244; n242=~(n248^n243); n285=~(n248|n243); n287=~(n253|n243); O11=n253^n242; n284=~(n286|n285); n283=~n287&n284; n282=~(n288^n283); n315=~(n288|n283); n317=~(n293|n283); O12=n293^n282; n314=~(n316|n315); n313=~n317&n314; n312=~(n318^n313); n339=~(n318|n313); n344=n323&~n313; O13=~(n323^n312); n338=n340&~n339; n337=~n344&n338; O14=n345^n337; n349=n346&~n337; n351=n332&~n337; n348=~(n350|n349); O15=~n351&n348; O = (O0 << 0)|(O1 << 1)|(O2 << 2)|(O3 << 3)|(O4 << 4)|(O5 << 5)|(O6 << 6)|(O7 << 7)|(O8 << 8)|(O9 << 9)|(O10 << 10)|(O11 << 11)|(O12 << 12)|(O13 << 13)|(O14 << 14)|(O15 << 15); return O; }