diff --git a/synthDC/extractSummary.py b/synthDC/extractSummary.py index 4469d4bea..a2f6a9b50 100755 --- a/synthDC/extractSummary.py +++ b/synthDC/extractSummary.py @@ -7,6 +7,7 @@ import subprocess from matplotlib.cbook import flatten import matplotlib.pyplot as plt import matplotlib.lines as lines +from wallySynth import testFreq def synthsintocsv(): @@ -26,7 +27,7 @@ def synthsintocsv(): writer.writerow(['Width', 'Config', 'Special', 'Tech', 'Target Freq', 'Delay', 'Area']) for oneSynth in allSynths: - descrip = specReg.findall(oneSynth) + descrip = specReg.findall(oneSynth) #[30:] width = descrip[2][:4] config = descrip[2][4:] if descrip[3][-2:] == 'nm': @@ -46,7 +47,7 @@ def synthsintocsv(): nums = [float(m) for m in nums] metrics += nums except: - print(config + tech + freq + " doesn't have reports") + print(width + config + tech + '_' + freq + " doesn't have reports") if metrics == []: pass else: @@ -56,7 +57,7 @@ def synthsintocsv(): file.close() def synthsfromcsv(filename): - Synth = namedtuple("Synth", " width config special tech freq delay area") + Synth = namedtuple("Synth", "width config special tech freq delay area") with open(filename, newline='') as csvfile: csvreader = csv.reader(csvfile) global allSynths @@ -110,23 +111,26 @@ def freqPlot(tech, width, config): plt.savefig('./plots/wally/freqSweep_' + tech + '_' + width + config + '.png') # plt.show() -def areaDelay(width, tech, freq, config=None, special=None): +def areaDelay(tech, freq, width=None, config=None, special=None): delays, areas, labels = ([] for i in range(3)) for oneSynth in allSynths: - if (width == oneSynth.width) & (tech == oneSynth.tech) & (freq == oneSynth.freq): - if (special != None) & (oneSynth.special == special): - delays += [oneSynth.delay] - areas += [oneSynth.area] - labels += [oneSynth.config] - elif (config != None) & (oneSynth.config == config): - delays += [oneSynth.delay] - areas += [oneSynth.area] - labels += [oneSynth.special] - else: - delays += [oneSynth.delay] - areas += [oneSynth.area] - labels += [oneSynth.config + '_' + oneSynth.special] + if (width==None) or (width == oneSynth.width): + if (tech == oneSynth.tech) & (freq == oneSynth.freq): + if (special != None) & (oneSynth.special == special): + delays += [oneSynth.delay] + areas += [oneSynth.area] + labels += [oneSynth.width + oneSynth.config] + elif (config != None) & (oneSynth.config == config): + delays += [oneSynth.delay] + areas += [oneSynth.area] + labels += [oneSynth.special] + # else: + # delays += [oneSynth.delay] + # areas += [oneSynth.area] + # labels += [oneSynth.config + '_' + oneSynth.special] + if width == None: + width = '' f, (ax1) = plt.subplots(1, 1) plt.scatter(delays, areas) @@ -154,8 +158,11 @@ def areaDelay(width, tech, freq, config=None, special=None): # ending freq in 42 means fpu was turned off manually if __name__ == '__main__': - synthsintocsv() + # synthsintocsv() synthsfromcsv('Summary.csv') - freqPlot('tsmc28', 'rv64', 'gc') - areaDelay('rv32', 'tsmc28', 4200, config='gc') - areaDelay('rv32', 'tsmc28', 3042, special='') \ No newline at end of file + freqPlot('tsmc28', 'rv32', 'e') + freqPlot('sky90', 'rv32', 'e') + areaDelay('tsmc28', testFreq[1], width= 'rv64', config='gc') + areaDelay('tsmc28', testFreq[1], special='') + areaDelay('sky90', testFreq[0], width='rv64', config='gc') + areaDelay('sky90', testFreq[0], special='') \ No newline at end of file diff --git a/synthDC/wallySynth.py b/synthDC/wallySynth.py index bf32b6f9b..99d70e813 100755 --- a/synthDC/wallySynth.py +++ b/synthDC/wallySynth.py @@ -8,20 +8,22 @@ def runCommand(config, tech, freq): command = "make synth DESIGN=wallypipelinedcore CONFIG={} TECH={} DRIVE=FLOP FREQ={} MAXOPT=0 MAXCORES=1".format(config, tech, freq) subprocess.Popen(command, shell=True) +testFreq = [3000, 10000] + if __name__ == '__main__': techs = ['sky90', 'tsmc28'] - bestAchieved = [750, 3000] + sweepCenter = [870, 3000] synthsToRun = [] - arr = [-8, -6, -4, -2, 0, 2, 4, 6, 8] for i in [0, 1]: tech = techs[i] - f = bestAchieved[i] - for freq in [round(f+f*x/100) for x in arr]: # rv32e freq sweep + sc = sweepCenter[i] + f = testFreq[i] + for freq in [round(sc+sc*x/100) for x in arr]: # rv32e freq sweep synthsToRun += [['rv32e', tech, freq]] - for config in ['rv32gc', 'rv32ic', 'rv64gc', 'rv64i', 'rv64ic']: # configs + for config in ['rv32gc', 'rv32ic', 'rv64gc', 'rv64i', 'rv64ic', 'rv32e']: # configs synthsToRun += [[config, tech, f]] for mod in ['FPUoff', 'noMulDiv', 'noPriv', 'PMP0', 'PMP16']: # rv64gc path variations config = 'rv64gc_' + mod