forked from Github_Repos/cvw
cleanup, plots for paper
This commit is contained in:
parent
d23d5d12f2
commit
76e30ed8ab
@ -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,
|
||||
|
@ -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
|
||||
|
|
@ -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')
|
Loading…
Reference in New Issue
Block a user