cleanup, plots for paper

This commit is contained in:
Madeleine Masser-Frye 2022-06-15 18:28:36 +00:00
parent d23d5d12f2
commit 76e30ed8ab
3 changed files with 289 additions and 172 deletions

View File

@ -549,6 +549,30 @@ module ppa_mux8d_1 #(parameter WIDTH = 1) (
assign y = s[2] ? (s[1] ? (s[0] ? d5 : d4) : (s[0] ? d6 : d7)) : (s[1] ? (s[0] ? d3 : d2) : (s[0] ? d1 : d0));
endmodule
module ppa_mux2_1 #(parameter WIDTH = 1) (
input logic [WIDTH-1:0] d0, d1,
input logic s,
output logic [WIDTH-1:0] y);
assign y = s ? d1 : d0;
endmodule
module ppa_mux4_1 #(parameter WIDTH = 1) (
input logic [WIDTH-1:0] d0, d1, d2, d3,
input logic [1:0] s,
output logic [WIDTH-1:0] y);
assign y = s[1] ? (s[0] ? d3 : d2) : (s[0] ? d1 : d0);
endmodule
module ppa_mux8_1 #(parameter WIDTH = 1) (
input logic [WIDTH-1:0] d0, d1, d2, d3, d4, d5, d6, d7,
input logic [2:0] s,
output logic [WIDTH-1:0] y);
assign y = s[2] ? (s[1] ? (s[0] ? d5 : d4) : (s[0] ? d6 : d7)) : (s[1] ? (s[0] ? d3 : d2) : (s[0] ? d1 : d0));
endmodule
module ppa_mux2_8 #(parameter WIDTH = 8) (
input logic [WIDTH-1:0] d0, d1,
input logic s,

View File

@ -1,101 +1,101 @@
Module,Tech,Width,Target Freq,Delay,Area,L Power (nW),D energy (fJ)
priorityencoder,sky90,8,7994,0.12495882036527395,60.760001,44.346,13.42057730723042
priorityencoder,sky90,16,5761,0.16976997552508244,136.220003,77.243,21.28915493084534
priorityencoder,sky90,32,4776,0.20887023450586265,379.260006,246.78,50.06619521105528
priorityencoder,sky90,64,4096,0.244021625,794.780014,364.853,72.71844425000002
priorityencoder,sky90,128,3409,0.2933331557641537,1602.300031,610.009,126.1332569785861
add,sky90,8,3652,0.2733695629791895,245.000005,139.276,101.6934774282585
add,sky90,16,2931,0.33991248447628797,623.280012,352.919,268.5308627362675
add,sky90,32,2420,0.4132191404958678,1330.840024,582.809,520.6561170247934
add,sky90,64,2139,0.4674681813931744,2781.240054,1050.0,939.1435764188874
add,sky90,128,1885,0.5304949787798409,6186.740118,2230.0,2147.9741690795754
csa,sky90,8,5740,0.16671402787456446,290.080006,207.654,143.04063591637635
csa,sky90,16,5984,0.16522529946524064,588.000011,322.135,321.19798216042784
csa,sky90,32,5740,0.16671402787456446,1160.320023,826.559,570.4954033867597
csa,sky90,64,5984,0.16522529946524064,2469.600048,1440.0,1354.3517797165773
csa,sky90,128,5984,0.16522529946524064,4897.060095,2990.0,2649.0572263262034
shiftleft,sky90,8,4321,0.23108991020597083,250.880004,181.951,70.25133270261513
shiftleft,sky90,16,3355,0.29803959314456036,666.400006,558.433,195.51397310283156
shiftleft,sky90,32,2500,0.39945200000000003,1400.420023,738.137,368.29474400000004
shiftleft,sky90,64,2203,0.45385946391284615,3914.120062,2680.0,1144.633567988198
shiftleft,sky90,128,1907,0.5242938489774515,9192.400136,6080.0,2900.3935725432616
comparator,sky90,8,4829,0.2066692116380203,198.940004,136.459,48.56726473493477
comparator,sky90,16,4014,0.24886605181863478,355.740006,188.666,62.714245058295965
comparator,sky90,32,3596,0.27763876307007784,697.760013,316.793,109.38967264961067
comparator,sky90,64,3129,0.31954192361776923,1372.980026,508.393,204.82637303899006
comparator,sky90,128,2682,0.37267507755406415,2836.120055,772.571,463.6077964772558
flop,sky90,8,10,0.1143419999999935,133.279999,64.8145,0.22163481569998741
flop,sky90,16,10,0.1143419999999935,266.5599975,129.629,0.4426750529999749
flop,sky90,32,10,0.1143419999999935,533.119995,259.258,0.88306326599995
flop,sky90,64,10,0.1143419999999935,1066.23999,520.0,1.7717864609998994
flop,sky90,128,10,0.1143419999999935,2132.4799805,1035.0,3.537741479999799
mux2,sky90,8,5280,0.1887229393939394,63.700001,23.506,19.476207345454547
mux2,sky90,16,4815,0.20207331983385254,119.560002,32.354,37.76750347694705
mux2,sky90,32,5049,0.21904002158843336,237.160005,57.793,84.98752837631214
mux2,sky90,64,4087,0.2460982481037436,482.160008,124.422,156.51848579398091
mux2,sky90,128,3920,0.25878504081632653,955.500018,279.611,313.9062545102041
mux4,sky90,8,4655,0.21455177121374866,159.740002,86.462,42.03069198077337
mux4,sky90,16,4452,0.22313914914645103,392.0,398.313,103.09028690566036
mux4,sky90,32,3802,0.2622634634402946,465.500009,150.568,139.26189908679646
mux4,sky90,64,3699,0.2695173360367667,877.100017,304.149,274.9076827575021
mux4,sky90,128,3166,0.3157249696778269,1984.500039,725.267,569.5678452987997
mux8,sky90,8,3577,0.2789168803466592,287.140006,116.648,60.83177160360637
mux8,sky90,16,3419,0.2915101822170225,588.000006,280.193,150.71076420620065
mux8,sky90,32,3092,0.33231726520051746,1062.320021,325.058,219.99402956274258
mux8,sky90,64,3020,0.33032882781456957,2207.940042,730.503,445.61358872185434
mux8,sky90,128,2666,0.37501377344336084,3761.240072,1460.0,854.281375903976
mult,sky90,8,1310,0.7631557786259543,2194.220041,1440.0,1420.996059801527
mult,sky90,16,997,1.0029260270812437,7519.540137,4940.0,6375.600754155466
mult,sky90,32,763,1.3106129895150722,25200.700446,14900.0,24931.79089954522
mult,sky90,64,632,1.5822664810126583,86011.661365,42600.0,88845.84517534176
mult,sky90,128,524,1.9083759465648855,296198.144128,114000.0,273311.87793918326
priorityencoder,tsmc28,8,31306,0.03191275857663067,8.316,34.836,1.713715135565067
priorityencoder,tsmc28,16,21202,0.04705136175832468,21.294,73.912,3.815865438600132
priorityencoder,tsmc28,32,16453,0.060740189205615996,62.118,205.801,9.439025402552724
priorityencoder,tsmc28,64,13786,0.07244435673872045,137.088001,428.365,18.328422254896275
priorityencoder,tsmc28,128,11439,0.0874122290410001,315.252,980.365,40.908923191188045
add,tsmc28,8,13787,0.07226709545223761,33.012,176.194,12.328766484151734
add,tsmc28,16,11520,0.08680155555555555,90.972001,475.452,33.67900355555555
add,tsmc28,32,9810,0.1019177991845056,209.286002,1060.0,81.43232154841998
add,tsmc28,64,8203,0.12186861952944045,392.616003,1800.0,142.34254761038645
add,tsmc28,128,7210,0.13869425520110956,868.140006,4090.0,331.3405756754508
csa,tsmc28,8,23865,0.04077636748376283,49.392,473.393,20.91827651917033
csa,tsmc28,16,23865,0.04077636748376283,98.783999,946.879,41.75500030337314
csa,tsmc28,32,23865,0.04077636748376283,197.567999,1890.0,83.30611876932745
csa,tsmc28,64,23865,0.04077636748376283,395.135998,3790.0,166.5306848036874
csa,tsmc28,128,23865,0.04077636748376283,790.271996,7570.0,333.1021459748586
shiftleft,tsmc28,8,15183,0.06578013640255549,48.384,333.876,15.51753417736284
shiftleft,tsmc28,16,11800,0.0847177627118644,130.788,613.549,33.71766955932203
shiftleft,tsmc28,32,9587,0.10430391697089808,384.803997,1940.0,101.80062296359652
shiftleft,tsmc28,64,8269,0.12088260744951022,967.427998,4980.0,272.83204501354453
shiftleft,tsmc28,128,7023,0.14238329232521713,1836.953994,8670.0,566.543120162039
comparator,tsmc28,8,17054,0.05854826984871585,32.256,160.477,8.752966342383019
comparator,tsmc28,16,13709,0.07280278080093369,48.132,204.944,11.852292714392004
comparator,tsmc28,32,12136,0.08238147264337507,146.16,623.674,35.50641470929466
comparator,tsmc28,64,10862,0.09205807659731172,291.312,1240.0,69.41178975437303
comparator,tsmc28,128,9371,0.10671119720414043,558.432,2400.0,127.9467254477644
flop,tsmc28,8,10,0.048889000000002625,15.12,78.6345,0.013320296940000717
flop,tsmc28,16,10,0.048889000000002625,30.24,157.29,0.026541838100001425
flop,tsmc28,32,10,0.048889000000002625,60.4799995,314.5805,0.05332812120000287
flop,tsmc28,64,10,0.048889000000002625,120.959999,630.0,0.10640935295000573
flop,tsmc28,128,10,0.048889000000002625,241.919998,1260.0,0.21305826200001143
mux2,tsmc28,8,27000,0.04027303703703704,10.332,86.166,4.244778103703704
mux2,tsmc28,16,19440,0.052470329218107,15.372,84.373,5.1473392962962965
mux2,tsmc28,32,17903,0.05585556035301346,32.130001,171.146,9.897605294553983
mux2,tsmc28,64,18546,0.05385698274560552,90.846,517.414,27.359347234767604
mux2,tsmc28,128,16594,0.0601057455706882,184.968,1150.0,58.603101931421
mux4,tsmc28,8,18130,0.05509219801434087,27.971999,133.963,8.021424030888031
mux4,tsmc28,16,16440,0.06065625060827251,39.438,185.149,12.373875124087593
mux4,tsmc28,32,15168,0.0658052700421941,69.174,324.969,23.229260324894515
mux4,tsmc28,64,13915,0.07180589399928135,137.465999,648.086,45.59674268954365
mux4,tsmc28,128,13089,0.07639603056001222,296.603997,1440.0,94.50188980273512
mux8,tsmc28,8,12885,0.07750962359332557,44.856,215.13,11.90547818393481
mux8,tsmc28,16,12256,0.08154268929503918,121.841998,521.624,25.93057519582246
mux8,tsmc28,32,11695,0.08537362676357418,168.21,815.694,46.35787933262078
mux8,tsmc28,64,11000,0.0907930909090909,304.037999,1490.0,81.89536799999999
mux8,tsmc28,128,10464,0.09547474923547401,664.775992,2850.0,153.04602302446486
mult,tsmc28,8,5000,0.19998100000000002,444.150001,3260.0,306.970835
mult,tsmc28,16,3819,0.26184265147944485,1634.472002,11800.0,1455.3214569227544
mult,tsmc28,32,2973,0.3363555785401951,5141.430011,36900.0,5416.333881232761
mult,tsmc28,64,2390,0.4184090418410042,16045.092071,109000.0,18545.980779602512
mult,tsmc28,128,1868,0.5353279057815846,44272.49428,262000.0,50011.4036139272
priorityencoder,sky90,8,7683,0.12508649056358195,50.960001,24.761,1.0685929975270078e-05
priorityencoder,sky90,16,5773,0.16977016282695304,136.220003,77.243,2.1773774467348e-05
priorityencoder,sky90,32,4500,0.2218912222222222,372.400007,189.626,4.371111111111111e-05
priorityencoder,sky90,64,4098,0.2439914738897023,797.720015,382.205,7.393850658857981e-05
priorityencoder,sky90,128,3409,0.2933331557641537,1602.300031,610.009,0.0001261366969785861
add,sky90,8,3658,0.27337042810278844,253.820005,154.438,0.00010825587752870422
add,sky90,16,2942,0.3393218266485384,722.260013,485.109,0.00032460910944935416
add,sky90,32,2468,0.40496338573743923,1440.600027,714.057,0.0006580226904376014
add,sky90,64,2139,0.4674681813931744,2781.240054,1050.0,0.0009392239364188873
add,sky90,128,1885,0.5304949787798409,6186.740118,2230.0,0.0021480106100795755
csa,sky90,8,5758,0.16536141368530738,266.560005,154.202,0.00013650573115665162
csa,sky90,16,5931,0.1654056314280897,533.12001,308.404,0.00027263530601922105
csa,sky90,32,5758,0.16536141368530738,1066.240021,616.808,0.0005448072247308093
csa,sky90,64,5931,0.1654056314280897,2132.480042,1230.0,0.0010905412240768842
csa,sky90,128,5931,0.1654056314280897,4264.960083,2470.0,0.002178553363682347
shiftleft,sky90,8,4327,0.23025600254217704,259.700005,196.451,7.534088282874971e-05
shiftleft,sky90,16,3355,0.29803959314456036,666.400006,558.433,0.00019552906110283157
shiftleft,sky90,32,2503,0.39951757530962845,1475.880027,768.262,0.0003807431082700759
shiftleft,sky90,64,2203,0.45385946391284615,3914.120062,2680.0,0.001144802541988198
shiftleft,sky90,128,1907,0.5242938489774515,9192.400136,6080.0,0.0029008914525432616
comparator,sky90,8,4839,0.20629126741062204,200.900004,136.6,5.001033271337053e-05
comparator,sky90,16,4018,0.24806303982080635,358.680007,189.253,6.321553011448482e-05
comparator,sky90,32,3602,0.276293542476402,690.900013,315.709,0.00010771793448084398
comparator,sky90,64,3129,0.31954192361776923,1372.980026,508.393,0.0002048577820389901
comparator,sky90,128,2791,0.35824651809387315,2744.980052,796.047,0.0003439627373701182
flop,sky90,8,10,0.1143419999999935,133.279999,64.8145,0.000193835
flop,sky90,16,10,0.1143419999999935,266.5599975,129.629,0.00038715000000000006
flop,sky90,32,10,0.1143419999999935,533.119995,259.258,0.0007723000000000001
flop,sky90,64,10,0.1143419999999935,1066.23999,520.0,0.00154955
flop,sky90,128,10,0.1143419999999935,2132.4799805,1035.0,0.003094
mux2,sky90,8,5299,0.1883518518588413,63.700001,21.541,1.932440083034535e-05
mux2,sky90,16,4850,0.20207356701030926,119.560002,32.354,3.884536082474227e-05
mux2,sky90,32,5003,0.19908807195682593,375.340008,259.372,0.00013671796921846892
mux2,sky90,64,3989,0.24961239583855604,479.220007,148.175,0.00016570569064928555
mux2,sky90,128,4004,0.24974824975024976,1302.420025,767.078,0.0004665334665334665
mux4,sky90,8,4661,0.21448923471358078,164.640002,88.494,4.31452478009011e-05
mux4,sky90,16,4392,0.22421770309653916,359.659999,419.855,0.0001006375227686703
mux4,sky90,32,4118,0.24283532831471588,594.860011,331.197,0.00013161728994657602
mux4,sky90,64,3710,0.26931477897574124,899.640016,344.331,0.00028625336927223723
mux4,sky90,128,3167,0.31575023618566467,2016.840039,722.109,0.0005917271866119355
mux8,sky90,8,3585,0.2789170278940028,287.140006,116.648,6.089260808926081e-05
mux8,sky90,16,3362,0.295237998810232,582.120003,282.366,0.00014455681142177274
mux8,sky90,32,3178,0.3140553102580239,1319.079995,670.683,0.0003577721837633732
mux8,sky90,64,2906,0.3440756228492774,2132.48004,808.482,0.0004428768066070199
mux8,sky90,128,2667,0.3749401308586427,4575.620089,1830.0,0.0009786276715410573
mult,sky90,8,1310,0.7631557786259543,2194.220041,1440.0,0.0014213740458015268
mult,sky90,16,997,1.0029260270812437,7519.540137,4940.0,0.0063761283851554666
mult,sky90,32,763,1.3106129895150722,25200.700446,14900.0,0.024931847968545216
mult,sky90,64,632,1.5822664810126583,86011.661365,42600.0,0.08884651898734176
mult,sky90,128,524,1.9083759465648855,296198.144128,114000.0,0.2733148854961832
priorityencoder,tsmc28,8,31335,0.031912196106590074,8.316,34.836,1.716929950534546e-06
priorityencoder,tsmc28,16,21253,0.04703118086858326,21.672,78.026,4.008845810003294e-06
priorityencoder,tsmc28,32,16464,0.06071258114674442,61.614,207.499,9.323372206025267e-06
priorityencoder,tsmc28,64,13804,0.07239877021153289,137.466,425.592,1.847290640394089e-05
priorityencoder,tsmc28,128,11440,0.0874065874125874,317.646,973.649,4.117132867132867e-05
add,tsmc28,8,13838,0.07207477814713109,34.272,187.089,1.3311172134701546e-05
add,tsmc28,16,11521,0.08678002100512108,90.972001,475.207,3.367763214998698e-05
add,tsmc28,32,9812,0.1018860211985324,209.286002,1060.0,8.153281695882594e-05
add,tsmc28,64,8206,0.12185605215695831,388.836003,1770.0,0.0001409943943456008
add,tsmc28,128,7354,0.13597341881968997,907.452008,4360.0,0.00034511830296437315
csa,tsmc28,8,24524,0.040663382319360626,52.416,482.462,2.173381177621921e-05
csa,tsmc28,16,24524,0.040663382319360626,104.832,964.99,4.346762355243842e-05
csa,tsmc28,32,24524,0.040663382319360626,209.664,1930.0,8.677214157559942e-05
csa,tsmc28,64,24524,0.040663382319360626,419.327999,3860.0,0.00017342195400424075
csa,tsmc28,128,24524,0.040663382319360626,838.655998,7720.0,0.00034717011906703634
shiftleft,tsmc28,8,15202,0.0656078183133798,50.652,367.074,1.6991185370346006e-05
shiftleft,tsmc28,16,11804,0.08465604506946797,127.511999,602.29,3.388681802778719e-05
shiftleft,tsmc28,32,9587,0.10430391697089808,384.803997,1940.0,0.00010180452696359654
shiftleft,tsmc28,64,8272,0.12086674854932303,1041.263998,5460.0,0.0002895309477756286
shiftleft,tsmc28,128,7023,0.14238329232521713,1836.953994,8670.0,0.000566566994162039
comparator,tsmc28,8,17422,0.05733769130983814,35.784,170.595,9.488003673516243e-06
comparator,tsmc28,16,13736,0.07273839778683751,54.558,250.167,1.4349155503785673e-05
comparator,tsmc28,32,12139,0.08236710865804432,145.782,622.975,3.567015404893319e-05
comparator,tsmc28,64,11080,0.09024670758122744,294.21,1250.0,6.84115523465704e-05
comparator,tsmc28,128,9371,0.10671119720414043,558.432,2400.0,0.00012794792444776438
flop,tsmc28,8,10,0.048889000000002625,15.12,78.6345,2.7246000000000003e-05
flop,tsmc28,16,10,0.048889000000002625,30.24,157.29,5.4290000000000004e-05
flop,tsmc28,32,10,0.048889000000002625,60.4799995,314.5805,0.00010908
flop,tsmc28,64,10,0.048889000000002625,120.959999,630.0,0.00021765500000000003
flop,tsmc28,128,10,0.048889000000002625,241.919998,1260.0,0.00043579999999999997
mux2,tsmc28,8,29614,0.03374481252110488,16.758,114.564,5.436617815897886e-06
mux2,tsmc28,16,18767,0.053046021580433735,15.75,88.025,5.142004582511856e-06
mux2,tsmc28,32,17903,0.05585556035301346,32.130001,171.146,9.897782494553986e-06
mux2,tsmc28,64,18568,0.05371109651012495,91.35,523.884,2.757432141318397e-05
mux2,tsmc28,128,16637,0.05991099044298852,176.525999,941.106,5.012923002945243e-05
mux4,tsmc28,8,18151,0.055092383284667513,27.971999,133.963,8.032615282904523e-06
mux4,tsmc28,16,16486,0.06057952759917506,39.438,186.231,1.2556108213029237e-05
mux4,tsmc28,32,15196,0.06580579126085812,69.174,324.969,2.3229797315082915e-05
mux4,tsmc28,64,13926,0.07180612868016659,137.465999,648.086,4.5741777969266124e-05
mux4,tsmc28,128,13090,0.07636619404125286,294.335997,1420.0,9.358288770053477e-05
mux8,tsmc28,8,12902,0.07750336319950395,44.604,214.286,1.17501162610448e-05
mux8,tsmc28,16,12264,0.08147446510110894,128.771998,548.714,2.666340508806262e-05
mux8,tsmc28,32,11713,0.08517122410996329,172.115999,823.633,4.695637326047981e-05
mux8,tsmc28,64,11014,0.09067453550027238,304.163999,1460.0,8.498274922825495e-05
mux8,tsmc28,128,10474,0.09542350830628223,683.045996,2820.0,0.00015705556616383426
mult,tsmc28,8,5200,0.1922996923076923,577.206,4340.0,0.00037769230769230767
mult,tsmc28,16,3819,0.26184265147944485,1634.472002,11800.0,0.0014553548049227546
mult,tsmc28,32,3033,0.3295775611605671,6343.721998,47200.0,0.0063033300362677225
mult,tsmc28,64,2390,0.4184090418410042,16045.092071,109000.0,0.01854602510460251
mult,tsmc28,128,1868,0.5353279057815846,44272.49428,262000.0,0.05001177730192719

1 Module Tech Width Target Freq Delay Area L Power (nW) D energy (fJ)
2 priorityencoder sky90 8 7994 7683 0.12495882036527395 0.12508649056358195 60.760001 50.960001 44.346 24.761 13.42057730723042 1.0685929975270078e-05
3 priorityencoder sky90 16 5761 5773 0.16976997552508244 0.16977016282695304 136.220003 77.243 21.28915493084534 2.1773774467348e-05
4 priorityencoder sky90 32 4776 4500 0.20887023450586265 0.2218912222222222 379.260006 372.400007 246.78 189.626 50.06619521105528 4.371111111111111e-05
5 priorityencoder sky90 64 4096 4098 0.244021625 0.2439914738897023 794.780014 797.720015 364.853 382.205 72.71844425000002 7.393850658857981e-05
6 priorityencoder sky90 128 3409 0.2933331557641537 1602.300031 610.009 126.1332569785861 0.0001261366969785861
7 add sky90 8 3652 3658 0.2733695629791895 0.27337042810278844 245.000005 253.820005 139.276 154.438 101.6934774282585 0.00010825587752870422
8 add sky90 16 2931 2942 0.33991248447628797 0.3393218266485384 623.280012 722.260013 352.919 485.109 268.5308627362675 0.00032460910944935416
9 add sky90 32 2420 2468 0.4132191404958678 0.40496338573743923 1330.840024 1440.600027 582.809 714.057 520.6561170247934 0.0006580226904376014
10 add sky90 64 2139 0.4674681813931744 2781.240054 1050.0 939.1435764188874 0.0009392239364188873
11 add sky90 128 1885 0.5304949787798409 6186.740118 2230.0 2147.9741690795754 0.0021480106100795755
12 csa sky90 8 5740 5758 0.16671402787456446 0.16536141368530738 290.080006 266.560005 207.654 154.202 143.04063591637635 0.00013650573115665162
13 csa sky90 16 5984 5931 0.16522529946524064 0.1654056314280897 588.000011 533.12001 322.135 308.404 321.19798216042784 0.00027263530601922105
14 csa sky90 32 5740 5758 0.16671402787456446 0.16536141368530738 1160.320023 1066.240021 826.559 616.808 570.4954033867597 0.0005448072247308093
15 csa sky90 64 5984 5931 0.16522529946524064 0.1654056314280897 2469.600048 2132.480042 1440.0 1230.0 1354.3517797165773 0.0010905412240768842
16 csa sky90 128 5984 5931 0.16522529946524064 0.1654056314280897 4897.060095 4264.960083 2990.0 2470.0 2649.0572263262034 0.002178553363682347
17 shiftleft sky90 8 4321 4327 0.23108991020597083 0.23025600254217704 250.880004 259.700005 181.951 196.451 70.25133270261513 7.534088282874971e-05
18 shiftleft sky90 16 3355 0.29803959314456036 666.400006 558.433 195.51397310283156 0.00019552906110283157
19 shiftleft sky90 32 2500 2503 0.39945200000000003 0.39951757530962845 1400.420023 1475.880027 738.137 768.262 368.29474400000004 0.0003807431082700759
20 shiftleft sky90 64 2203 0.45385946391284615 3914.120062 2680.0 1144.633567988198 0.001144802541988198
21 shiftleft sky90 128 1907 0.5242938489774515 9192.400136 6080.0 2900.3935725432616 0.0029008914525432616
22 comparator sky90 8 4829 4839 0.2066692116380203 0.20629126741062204 198.940004 200.900004 136.459 136.6 48.56726473493477 5.001033271337053e-05
23 comparator sky90 16 4014 4018 0.24886605181863478 0.24806303982080635 355.740006 358.680007 188.666 189.253 62.714245058295965 6.321553011448482e-05
24 comparator sky90 32 3596 3602 0.27763876307007784 0.276293542476402 697.760013 690.900013 316.793 315.709 109.38967264961067 0.00010771793448084398
25 comparator sky90 64 3129 0.31954192361776923 1372.980026 508.393 204.82637303899006 0.0002048577820389901
26 comparator sky90 128 2682 2791 0.37267507755406415 0.35824651809387315 2836.120055 2744.980052 772.571 796.047 463.6077964772558 0.0003439627373701182
27 flop sky90 8 10 0.1143419999999935 133.279999 64.8145 0.22163481569998741 0.000193835
28 flop sky90 16 10 0.1143419999999935 266.5599975 129.629 0.4426750529999749 0.00038715000000000006
29 flop sky90 32 10 0.1143419999999935 533.119995 259.258 0.88306326599995 0.0007723000000000001
30 flop sky90 64 10 0.1143419999999935 1066.23999 520.0 1.7717864609998994 0.00154955
31 flop sky90 128 10 0.1143419999999935 2132.4799805 1035.0 3.537741479999799 0.003094
32 mux2 sky90 8 5280 5299 0.1887229393939394 0.1883518518588413 63.700001 23.506 21.541 19.476207345454547 1.932440083034535e-05
33 mux2 sky90 16 4815 4850 0.20207331983385254 0.20207356701030926 119.560002 32.354 37.76750347694705 3.884536082474227e-05
34 mux2 sky90 32 5049 5003 0.21904002158843336 0.19908807195682593 237.160005 375.340008 57.793 259.372 84.98752837631214 0.00013671796921846892
35 mux2 sky90 64 4087 3989 0.2460982481037436 0.24961239583855604 482.160008 479.220007 124.422 148.175 156.51848579398091 0.00016570569064928555
36 mux2 sky90 128 3920 4004 0.25878504081632653 0.24974824975024976 955.500018 1302.420025 279.611 767.078 313.9062545102041 0.0004665334665334665
37 mux4 sky90 8 4655 4661 0.21455177121374866 0.21448923471358078 159.740002 164.640002 86.462 88.494 42.03069198077337 4.31452478009011e-05
38 mux4 sky90 16 4452 4392 0.22313914914645103 0.22421770309653916 392.0 359.659999 398.313 419.855 103.09028690566036 0.0001006375227686703
39 mux4 sky90 32 3802 4118 0.2622634634402946 0.24283532831471588 465.500009 594.860011 150.568 331.197 139.26189908679646 0.00013161728994657602
40 mux4 sky90 64 3699 3710 0.2695173360367667 0.26931477897574124 877.100017 899.640016 304.149 344.331 274.9076827575021 0.00028625336927223723
41 mux4 sky90 128 3166 3167 0.3157249696778269 0.31575023618566467 1984.500039 2016.840039 725.267 722.109 569.5678452987997 0.0005917271866119355
42 mux8 sky90 8 3577 3585 0.2789168803466592 0.2789170278940028 287.140006 116.648 60.83177160360637 6.089260808926081e-05
43 mux8 sky90 16 3419 3362 0.2915101822170225 0.295237998810232 588.000006 582.120003 280.193 282.366 150.71076420620065 0.00014455681142177274
44 mux8 sky90 32 3092 3178 0.33231726520051746 0.3140553102580239 1062.320021 1319.079995 325.058 670.683 219.99402956274258 0.0003577721837633732
45 mux8 sky90 64 3020 2906 0.33032882781456957 0.3440756228492774 2207.940042 2132.48004 730.503 808.482 445.61358872185434 0.0004428768066070199
46 mux8 sky90 128 2666 2667 0.37501377344336084 0.3749401308586427 3761.240072 4575.620089 1460.0 1830.0 854.281375903976 0.0009786276715410573
47 mult sky90 8 1310 0.7631557786259543 2194.220041 1440.0 1420.996059801527 0.0014213740458015268
48 mult sky90 16 997 1.0029260270812437 7519.540137 4940.0 6375.600754155466 0.0063761283851554666
49 mult sky90 32 763 1.3106129895150722 25200.700446 14900.0 24931.79089954522 0.024931847968545216
50 mult sky90 64 632 1.5822664810126583 86011.661365 42600.0 88845.84517534176 0.08884651898734176
51 mult sky90 128 524 1.9083759465648855 296198.144128 114000.0 273311.87793918326 0.2733148854961832
52 priorityencoder tsmc28 8 31306 31335 0.03191275857663067 0.031912196106590074 8.316 34.836 1.713715135565067 1.716929950534546e-06
53 priorityencoder tsmc28 16 21202 21253 0.04705136175832468 0.04703118086858326 21.294 21.672 73.912 78.026 3.815865438600132 4.008845810003294e-06
54 priorityencoder tsmc28 32 16453 16464 0.060740189205615996 0.06071258114674442 62.118 61.614 205.801 207.499 9.439025402552724 9.323372206025267e-06
55 priorityencoder tsmc28 64 13786 13804 0.07244435673872045 0.07239877021153289 137.088001 137.466 428.365 425.592 18.328422254896275 1.847290640394089e-05
56 priorityencoder tsmc28 128 11439 11440 0.0874122290410001 0.0874065874125874 315.252 317.646 980.365 973.649 40.908923191188045 4.117132867132867e-05
57 add tsmc28 8 13787 13838 0.07226709545223761 0.07207477814713109 33.012 34.272 176.194 187.089 12.328766484151734 1.3311172134701546e-05
58 add tsmc28 16 11520 11521 0.08680155555555555 0.08678002100512108 90.972001 475.452 475.207 33.67900355555555 3.367763214998698e-05
59 add tsmc28 32 9810 9812 0.1019177991845056 0.1018860211985324 209.286002 1060.0 81.43232154841998 8.153281695882594e-05
60 add tsmc28 64 8203 8206 0.12186861952944045 0.12185605215695831 392.616003 388.836003 1800.0 1770.0 142.34254761038645 0.0001409943943456008
61 add tsmc28 128 7210 7354 0.13869425520110956 0.13597341881968997 868.140006 907.452008 4090.0 4360.0 331.3405756754508 0.00034511830296437315
62 csa tsmc28 8 23865 24524 0.04077636748376283 0.040663382319360626 49.392 52.416 473.393 482.462 20.91827651917033 2.173381177621921e-05
63 csa tsmc28 16 23865 24524 0.04077636748376283 0.040663382319360626 98.783999 104.832 946.879 964.99 41.75500030337314 4.346762355243842e-05
64 csa tsmc28 32 23865 24524 0.04077636748376283 0.040663382319360626 197.567999 209.664 1890.0 1930.0 83.30611876932745 8.677214157559942e-05
65 csa tsmc28 64 23865 24524 0.04077636748376283 0.040663382319360626 395.135998 419.327999 3790.0 3860.0 166.5306848036874 0.00017342195400424075
66 csa tsmc28 128 23865 24524 0.04077636748376283 0.040663382319360626 790.271996 838.655998 7570.0 7720.0 333.1021459748586 0.00034717011906703634
67 shiftleft tsmc28 8 15183 15202 0.06578013640255549 0.0656078183133798 48.384 50.652 333.876 367.074 15.51753417736284 1.6991185370346006e-05
68 shiftleft tsmc28 16 11800 11804 0.0847177627118644 0.08465604506946797 130.788 127.511999 613.549 602.29 33.71766955932203 3.388681802778719e-05
69 shiftleft tsmc28 32 9587 0.10430391697089808 384.803997 1940.0 101.80062296359652 0.00010180452696359654
70 shiftleft tsmc28 64 8269 8272 0.12088260744951022 0.12086674854932303 967.427998 1041.263998 4980.0 5460.0 272.83204501354453 0.0002895309477756286
71 shiftleft tsmc28 128 7023 0.14238329232521713 1836.953994 8670.0 566.543120162039 0.000566566994162039
72 comparator tsmc28 8 17054 17422 0.05854826984871585 0.05733769130983814 32.256 35.784 160.477 170.595 8.752966342383019 9.488003673516243e-06
73 comparator tsmc28 16 13709 13736 0.07280278080093369 0.07273839778683751 48.132 54.558 204.944 250.167 11.852292714392004 1.4349155503785673e-05
74 comparator tsmc28 32 12136 12139 0.08238147264337507 0.08236710865804432 146.16 145.782 623.674 622.975 35.50641470929466 3.567015404893319e-05
75 comparator tsmc28 64 10862 11080 0.09205807659731172 0.09024670758122744 291.312 294.21 1240.0 1250.0 69.41178975437303 6.84115523465704e-05
76 comparator tsmc28 128 9371 0.10671119720414043 558.432 2400.0 127.9467254477644 0.00012794792444776438
77 flop tsmc28 8 10 0.048889000000002625 15.12 78.6345 0.013320296940000717 2.7246000000000003e-05
78 flop tsmc28 16 10 0.048889000000002625 30.24 157.29 0.026541838100001425 5.4290000000000004e-05
79 flop tsmc28 32 10 0.048889000000002625 60.4799995 314.5805 0.05332812120000287 0.00010908
80 flop tsmc28 64 10 0.048889000000002625 120.959999 630.0 0.10640935295000573 0.00021765500000000003
81 flop tsmc28 128 10 0.048889000000002625 241.919998 1260.0 0.21305826200001143 0.00043579999999999997
82 mux2 tsmc28 8 27000 29614 0.04027303703703704 0.03374481252110488 10.332 16.758 86.166 114.564 4.244778103703704 5.436617815897886e-06
83 mux2 tsmc28 16 19440 18767 0.052470329218107 0.053046021580433735 15.372 15.75 84.373 88.025 5.1473392962962965 5.142004582511856e-06
84 mux2 tsmc28 32 17903 0.05585556035301346 32.130001 171.146 9.897605294553983 9.897782494553986e-06
85 mux2 tsmc28 64 18546 18568 0.05385698274560552 0.05371109651012495 90.846 91.35 517.414 523.884 27.359347234767604 2.757432141318397e-05
86 mux2 tsmc28 128 16594 16637 0.0601057455706882 0.05991099044298852 184.968 176.525999 1150.0 941.106 58.603101931421 5.012923002945243e-05
87 mux4 tsmc28 8 18130 18151 0.05509219801434087 0.055092383284667513 27.971999 133.963 8.021424030888031 8.032615282904523e-06
88 mux4 tsmc28 16 16440 16486 0.06065625060827251 0.06057952759917506 39.438 185.149 186.231 12.373875124087593 1.2556108213029237e-05
89 mux4 tsmc28 32 15168 15196 0.0658052700421941 0.06580579126085812 69.174 324.969 23.229260324894515 2.3229797315082915e-05
90 mux4 tsmc28 64 13915 13926 0.07180589399928135 0.07180612868016659 137.465999 648.086 45.59674268954365 4.5741777969266124e-05
91 mux4 tsmc28 128 13089 13090 0.07639603056001222 0.07636619404125286 296.603997 294.335997 1440.0 1420.0 94.50188980273512 9.358288770053477e-05
92 mux8 tsmc28 8 12885 12902 0.07750962359332557 0.07750336319950395 44.856 44.604 215.13 214.286 11.90547818393481 1.17501162610448e-05
93 mux8 tsmc28 16 12256 12264 0.08154268929503918 0.08147446510110894 121.841998 128.771998 521.624 548.714 25.93057519582246 2.666340508806262e-05
94 mux8 tsmc28 32 11695 11713 0.08537362676357418 0.08517122410996329 168.21 172.115999 815.694 823.633 46.35787933262078 4.695637326047981e-05
95 mux8 tsmc28 64 11000 11014 0.0907930909090909 0.09067453550027238 304.037999 304.163999 1490.0 1460.0 81.89536799999999 8.498274922825495e-05
96 mux8 tsmc28 128 10464 10474 0.09547474923547401 0.09542350830628223 664.775992 683.045996 2850.0 2820.0 153.04602302446486 0.00015705556616383426
97 mult tsmc28 8 5000 5200 0.19998100000000002 0.1922996923076923 444.150001 577.206 3260.0 4340.0 306.970835 0.00037769230769230767
98 mult tsmc28 16 3819 0.26184265147944485 1634.472002 11800.0 1455.3214569227544 0.0014553548049227546
99 mult tsmc28 32 2973 3033 0.3363555785401951 0.3295775611605671 5141.430011 6343.721998 36900.0 47200.0 5416.333881232761 0.0063033300362677225
100 mult tsmc28 64 2390 0.4184090418410042 16045.092071 109000.0 18545.980779602512 0.01854602510460251
101 mult tsmc28 128 1868 0.5353279057815846 44272.49428 262000.0 50011.4036139272 0.05001177730192719

View File

@ -60,7 +60,7 @@ def synthsintocsv():
delay = 1000/int(freq) - metrics[0]
area = metrics[1]
lpower = metrics[4]
denergy = (metrics[2] + metrics[3])*delay*1000 # (switching + internal powers)*delay, more practical units for regression coefs
denergy = (metrics[2] + metrics[3])/int(freq) # (switching + internal powers)*delay, more practical units for regression coefs
if ('flop' in module): # since two flops in each module
[area, lpower, denergy] = [n/2 for n in [area, lpower, denergy]]
@ -85,22 +85,26 @@ def cleanup():
output = subprocess.check_output(['bash','-c', bashCommand])
allSynths = output.decode("utf-8").split('\n')[:-1]
for oneSynth in allSynths:
for phrase in [['Path Length', 'qor'], ['Design Area', 'qor'], ['100', 'power']]:
for phrase in [['Path Length', 'qor']]: #, ['Design Area', 'qor'], ['100', 'power']]:
bashCommand = 'grep "{}" '+ oneSynth[2:]+'/reports/*{}*'
bashCommand = bashCommand.format(*phrase)
try: output = subprocess.check_output(['bash','-c', bashCommand])
except:
bc = 'rm -r '+ oneSynth[2:]
try: output = subprocess.check_output(['bash','-c', bc])
except: pass
output = subprocess.check_output(['bash','-c', bc])
print("All cleaned up!")
def getVals(tech, module, var, freq=None):
def getVals(tech, module, var, freq=None, width=None):
''' for a specified tech, module, and variable/metric
returns a list of values for that metric in ascending width order
works at a specified target frequency or if none is given, uses the synthesis with the best achievable delay for each width
'''
if width != None:
widthsToGet = width
else:
widthsToGet = widths
metric = []
widthL = []
@ -112,7 +116,7 @@ def getVals(tech, module, var, freq=None):
metric += [osdict[var]]
metric = [x for _, x in sorted(zip(widthL, metric))] # ordering
else:
for w in widths:
for w in widthsToGet:
for oneSynth in bestSynths:
if (oneSynth.width == w) & (oneSynth.tech == tech) & (oneSynth.module == module):
osdict = oneSynth._asdict()
@ -120,30 +124,59 @@ def getVals(tech, module, var, freq=None):
metric += [met]
return metric
def csvOfBest():
def csvOfBest(filename):
bestSynths = []
for tech in [x.tech for x in techSpecs]:
for mod in modules:
for w in widths:
m = np.Inf # large number to start
best = None
if [mod, tech, w] in leftblue:
for oneSynth in allSynths:
if ([mod, tech, w] in leftblue):
for oneSynth in allSynths: # leftmost blue
if (oneSynth.width == w) & (oneSynth.tech == tech) & (oneSynth.module == mod):
if (oneSynth.freq < m) & (1000/oneSynth.delay < oneSynth.freq):
if ([mod, tech, w] != ['mux2', 'sky90', 128]) or (oneSynth.area < 1100):
m = oneSynth.freq
best = oneSynth
# if ([mod, tech, w] != ['mux2', 'sky90', 128]) or (oneSynth.area < 1100):
m = oneSynth.freq
best = oneSynth
else:
for oneSynth in allSynths:
for oneSynth in allSynths: # best achievable, rightmost green
if (oneSynth.width == w) & (oneSynth.tech == tech) & (oneSynth.module == mod):
if (oneSynth.delay < m) & (1000/oneSynth.delay > oneSynth.freq):
m = oneSynth.delay
best = oneSynth
# contenders = []
# delays = []
# for oneSynth in allSynths: # choose synth w minimal delay
# if (oneSynth.width == w) & (oneSynth.tech == tech) & (oneSynth.module == mod):
# contenders += [oneSynth]
# delays += [oneSynth.delay]
# if oneSynth.delay < m:
# m = oneSynth.delay
# best = oneSynth
# for oneSynth in contenders: # if m is min delay, choose best area within s as percent of m
# s = oneSynth.delay/m - 1
# if s < 0.1:
# if oneSynth.area < best.area:
# best = oneSynth
# bestval = 1.9 # score algorithm
# for oneSynth in contenders:
# delaydif = abs(1 - oneSynth.delay/best.delay)
# areadif = 1 - oneSynth.area/best.area
# try: val = areadif/delaydif
# except: val = 1
# # if (oneSynth.width == 64) & (oneSynth.tech == 'sky90') & (oneSynth.module == 'comparator'):
# # print(oneSynth.freq, ' ', delaydif, ' ', areadif, ' ', val)
# if val > bestval:
# bestval = val
# best = oneSynth
if (best != None) & (best not in bestSynths):
bestSynths += [best]
file = open("bestSynths.csv", "w")
file = open(filename, "w")
writer = csv.writer(file)
writer.writerow(['Module', 'Tech', 'Width', 'Target Freq', 'Delay', 'Area', 'L Power (nW)', 'D energy (fJ)'])
for synth in bestSynths:
@ -234,20 +267,18 @@ def oneMetricPlot(module, var, freq=None, ax=None, fits='clsgn', norm=True, colo
else:
ylabeldic = {"lpower": "Leakage Power (nW)", "denergy": "Dynamic Energy (fJ)", "area": "Area (sq microns)", "delay": "Delay (ns)"}
# fullLeg += genLegend(fits, coefs, r2, combined, ale=ale)
# legLoc = 'upper left' if ale else 'center right'
# ax.add_artist(ax.legend(handles=fullLeg, loc=legLoc))
ax.set_xticks(widths)
ax.set_xlabel("Width (bits)")
ax.set_ylabel(ylabeldic[var])
ax.set_xticks(widths)
if (module in ['flop', 'csa']) & (var == 'delay'):
ax.set_ylim(ymin=0)
ytop = ax.get_ylim()[1]
ax.set_ylim(ymax=1.1*ytop)
if singlePlot or (var == 'lpower') or (var == 'denergy'):
ax.set_xlabel("Width (bits)")
if not singlePlot and ((var == 'delay') or (var == 'area')):
ax.tick_params(labelbottom=False)
if singlePlot:
fullLeg += genLegend(fits, coefs, r2, combined, ale=ale)
legLoc = 'upper left' if ale else 'center right'
ax.add_artist(ax.legend(handles=fullLeg, loc=legLoc))
titleStr = " (target " + str(freq)+ "MHz)" if freq != None else " (best achievable delay)"
ax.set_title(module + titleStr)
plt.savefig('./plots/PPA/'+ module + '_' + var + '.png')
@ -260,7 +291,7 @@ def regress(widths, var, fits='clsgn', ale=False):
'''
funcArr = genFuncs(fits)
xp = np.linspace(4, 140, 200)
xp = np.linspace(min(widths)/2, max(widths)*1.1, 200)
xpToCalc = xp
if ale:
@ -413,7 +444,7 @@ def freqPlot(tech, mod, width):
median = np.median(list(flatten(freqsL)))
f, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
for ax in (ax1, ax2): #, ax3, ax4):
for ax in (ax1, ax2):
ax.ticklabel_format(useOffset=False, style='plain')
for ind in [0,1]:
@ -421,15 +452,11 @@ def freqPlot(tech, mod, width):
delays = delaysL[ind]
freqs = freqsL[ind]
# freqs, delays, areas = noOutliers(median, freqs, delays, areas) # comment out to see all syntheses
freqs, delays, areas = noOutliers(median, freqs, delays, areas) # comment out to see all syntheses
c = 'blue' if ind else 'green'
# adprod = adprodpow(areas, delays, 1)
# adpow = adprodpow(areas, delays, 2)
ax1.scatter(freqs, delays, color=c)
ax2.scatter(freqs, areas, color=c)
# ax3.scatter(freqs, adprod, color=c)
# ax4.scatter(freqs, adpow, color=c)
legend_elements = [lines.Line2D([0], [0], color='green', ls='', marker='o', label='timing achieved'),
lines.Line2D([0], [0], color='blue', ls='', marker='o', label='slack violated')]
@ -440,8 +467,6 @@ def freqPlot(tech, mod, width):
ax2.set_xlabel("Target Freq (MHz)")
ax1.set_ylabel('Delay (ns)')
ax2.set_ylabel('Area (sq microns)')
# ax3.set_ylabel('Area * Delay')
# ax4.set_ylabel('Area * $Delay^2$')
ax1.set_title(mod + '_' + width)
if ('mux' in mod) & ('d' in mod):
width = mod
@ -524,22 +549,13 @@ def squarify(fig):
l = (1.-axs/h)/2
fig.subplots_adjust(bottom=l, top=1-l)
def adprodpow(areas, delays, pow):
''' for each value in [areas] returns area*delay^pow
helper function for freqPlot'''
result = []
for i in range(len(areas)):
result += [(areas[i])*(delays[i])**pow]
return result
def plotPPA(mod, freq=None, norm=True, aleOpt=False):
''' for the module specified, plots width vs delay, area, leakage power, and dynamic energy with fits
if no freq specified, uses the synthesis with best achievable delay for each width
overlays data from both techs
'''
plt.rcParams["figure.figsize"] = (10,7)
plt.rcParams["figure.figsize"] = (7,3.6)
fig, axs = plt.subplots(2, 2)
arr = [['delay', 'area'], ['lpower', 'denergy']]
@ -557,14 +573,17 @@ def plotPPA(mod, freq=None, norm=True, aleOpt=False):
r2 = oneMetricPlot(mod, arr[i][j], ax=axs[i, j], freq=f, norm=norm)
ls = '--' if f else '-'
leg += [lines.Line2D([0], [0], color='red', label='$R^2$='+str(round(r2, 4)), linestyle=ls)]
axs[i, j].legend(handles=leg)
if (mod in ['flop', 'csa']) & (arr[i][j] == 'delay'):
axs[i, j].set_ylim(ymin=0)
ytop = axs[i, j].get_ylim()[1]
axs[i, j].set_ylim(ymax=1.1*ytop)
else:
axs[i, j].legend(handles=leg, handlelength=1.5)
titleStr = " (target " + str(freq)+ "MHz)" if freq != None else ""
plt.suptitle(mod + titleStr)
fullLeg = [lines.Line2D([0], [0], color='black', label='fastest', linestyle='-')]
fullLeg += [lines.Line2D([0], [0], color='black', label='smallest', linestyle='--')]
fig.legend(handles=fullLeg, ncol=3, loc='center', bbox_to_anchor=(0.3, 0.82, 0.4, 0.2))
plt.tight_layout(pad=0.05, w_pad=1, h_pad=0.5, rect=(0,0,1,0.97))
if freq != 10:
n = 'normalized' if norm else 'unnormalized'
@ -574,32 +593,103 @@ def plotPPA(mod, freq=None, norm=True, aleOpt=False):
def plotBestAreas(mod):
fig, axs = plt.subplots(1, 1)
### all areas on one
# mods = ['priorityencoder', 'add', 'csa', 'shiftleft', 'comparator', 'flop']
# colors = ['red', 'orange', 'yellow', 'green', 'blue', 'purple']
# legend_elements = []
# for i in range(len(mods)):
# oneMetricPlot(mods[i], 'area', ax=axs, freq=10, norm=False, color=colors[i])
# legend_elements += [lines.Line2D([0], [0], color=colors[i], ls='', marker='o', label=mods[i])]
# plt.suptitle('Optimized Areas (target freq 10MHz)')
# plt.legend(handles=legend_elements)
# plt.savefig('./plots/bestareas.png')
# plt.show()
oneMetricPlot(mod, 'area', freq=10)
plt.title(mod + ' Optimized Areas (target freq 10MHz)')
plt.savefig('./plots/bestAreas/' + mod + '.png')
def makeDaLegend():
plt.rcParams["figure.figsize"] = (5.5,0.3)
fig = plt.figure()
fullLeg = [lines.Line2D([0], [0], color='black', label='fastest', linestyle='-')]
fullLeg += [lines.Line2D([0], [0], color='black', label='smallest', linestyle='--')]
fullLeg += [lines.Line2D([0], [0], color='blue', label='tsmc28', marker='^')]
fullLeg += [lines.Line2D([0], [0], color='green', label='sky90', marker='o')]
fullLeg += [lines.Line2D([0], [0], color='red', label='combined', marker='_')]
fig.legend(handles=fullLeg, ncol=5, handlelength=1.4, loc='center')
saveStr = './plots/PPA/legend.png'
plt.savefig(saveStr)
def calcAvgRsq():
with open('ppaFitting.csv', newline='') as csvfile:
csvreader = csv.reader(csvfile)
allSynths = list(csvreader)[1:]
csvfile.close()
others = []
muxes = []
for synth in allSynths:
if ('easy' not in synth) or ('delay' not in synth):
if 'mux' in synth[0]:
muxes += [float(synth[8])]
elif '0.0' != synth[8]:
others += [float(synth[8])]
print('Others: ', np.mean(others))
print('Muxes: ', np.mean(muxes))
def muxPlot(fits='clsgn', norm=True):
''' module: string module name
freq: int freq (MHz)
var: string delay, area, lpower, or denergy
fits: constant, linear, square, log2, Nlog2
plots given variable vs width for all matching syntheses with regression
'''
ax = plt.gca()
inputs = [2, 4, 8]
allInputs = inputs*2
fullLeg = []
for crit in ['data', 'control']:
allMetrics = []
muxes = ['mux2', 'mux4', 'mux8']
if crit == 'data':
ls = '--'
muxes = [m + 'd' for m in muxes]
elif crit == 'control':
ls = '-'
for spec in techSpecs:
metric = []
for module in muxes:
metric += getVals(spec.tech, module, 'delay', width=[1])
if norm:
techdict = spec._asdict()
norm = techdict['delay']
metric = [m/norm for m in metric]
if len(metric) == 3: # don't include the spec if we don't have points for all
xp, pred, coefs, r2 = regress(inputs, metric, fits, ale=False)
ax.scatter(inputs, metric, color=spec.color, marker=spec.shape)
ax.plot(xp, pred, color=spec.color, linestyle=ls)
allMetrics += metric
xp, pred, coefs, r2 = regress(allInputs, allMetrics, fits)
ax.plot(xp, pred, color='red', linestyle=ls)
fullLeg += [lines.Line2D([0], [0], color='red', label=crit, linestyle=ls)]
ax.set_ylabel('Delay (FO4)')
ax.set_xticks(inputs)
ax.set_xlabel("Number of inputs")
ax.set_title('mux timing')
ax.legend(handles = fullLeg)
plt.savefig('./plots/PPA/mux.png')
if __name__ == '__main__':
##############################
# set up stuff, global variables
widths = [8, 16, 32, 64, 128]
modules = ['priorityencoder', 'add', 'csa', 'shiftleft', 'comparator', 'flop', 'mux2', 'mux4', 'mux8', 'mult'] #, 'mux2d', 'mux4d', 'mux8d',]
modules = ['priorityencoder', 'add', 'csa', 'shiftleft', 'comparator', 'flop', 'mux2', 'mux4', 'mux8', 'mult'] # 'mux2d', 'mux4d', 'mux8d']
normAddWidth = 32 # divisor to use with N since normalizing to add_32
fitDict = {'add': ['cg', 'l', 'l'], 'mult': ['cg', 'ls', 'ls'], 'comparator': ['cg', 'l', 'l'], 'csa': ['c', 'l', 'l'], 'shiftleft': ['cg', 'l', 'ln'], 'flop': ['c', 'l', 'l'], 'priorityencoder': ['cg', 'l', 'l']}
fitDict.update(dict.fromkeys(['mux2', 'mux4', 'mux8'], ['cg', 'l', 'l']))
leftblue = [['mux2', 'sky90', 32], ['mux2', 'sky90', 64], ['mux2', 'sky90', 128], ['mux8', 'sky90', 32], ['mux2', 'tsmc28', 8], ['mux2', 'tsmc28', 64]]
leftblue = [] #[['mux2', 'tsmc28', 8], ['mux4', 'sky90', 16]]
TechSpec = namedtuple("TechSpec", "tech color shape delay area lpower denergy")
techSpecs = [['sky90', 'green', 'o', 43.2e-3, 1330.84, 582.81, 520.66], ['tsmc28', 'blue', '^', 12.2e-3, 209.29, 1060, 81.43]]
@ -612,20 +702,23 @@ if __name__ == '__main__':
# synthsintocsv() # slow, run only when new synth runs to add to csv
allSynths = synthsfromcsv('ppaData.csv') # your csv here!
bestSynths = csvOfBest()
bestSynths = csvOfBest('bestSynths.csv')
# ### plotting examples
# squareAreaDelay('sky90', 'add', 32)
# oneMetricPlot('add', 'delay')
# oneMetricPlot('add', 'area')
# freqPlot('sky90', 'mux4', 16)
# plotBestAreas('add')
# makeCoefTable()
# calcAvgRsq()
# makeEqTable()
for mod in modules:
plotPPA(mod, norm=False)
plotPPA(mod, aleOpt=True)
for w in [8, 16, 32, 64, 128]:
freqPlot('sky90', mod, w)
freqPlot('tsmc28', mod, w)
plt.close('all')
# makeDaLegend()
# muxPlot()
# for mod in modules:
# # plotPPA(mod, norm=False)
# # plotPPA(mod, aleOpt=True)
# for w in widths:
# freqPlot('sky90', mod, w)
# freqPlot('tsmc28', mod, w)
# plt.close('all')