mirror of
https://github.com/openhwgroup/cvw
synced 2025-01-24 21:44:29 +00:00
75 lines
2.1 KiB
Python
Executable File
75 lines
2.1 KiB
Python
Executable File
#!/usr/bin/python3
|
|
# Madeleine Masser-Frye mmasserfrye@hmc.edu 5/22
|
|
|
|
import subprocess
|
|
import re
|
|
from multiprocessing import Pool
|
|
|
|
|
|
def runCommand(module, width, tech, freq):
|
|
command = "make synth DESIGN=ppa_{}_{} TECH={} DRIVE=INV FREQ={} MAXOPT=1".format(module, width, tech, freq)
|
|
subprocess.Popen(command, shell=True)
|
|
|
|
def deleteRedundant(LoT):
|
|
'''removes any previous runs for the current synthesis specifications'''
|
|
synthStr = "rm -rf runs/ppa_{}_{}_rv32e_{}nm_{}_*"
|
|
for synth in LoT:
|
|
bashCommand = synthStr.format(*synth)
|
|
outputCPL = subprocess.check_output(['bash','-c', bashCommand])
|
|
|
|
def getData():
|
|
bashCommand = "grep 'Critical Path Length' runs/ppa_*/reports/*qor*"
|
|
outputCPL = subprocess.check_output(['bash','-c', bashCommand])
|
|
linesCPL = outputCPL.decode("utf-8").split('\n')[:-1]
|
|
|
|
cpl = re.compile('\d{1}\.\d{6}')
|
|
f = re.compile('_\d*_MHz')
|
|
wm = re.compile('ppa_\w*_\d*_qor')
|
|
|
|
allSynths = []
|
|
|
|
for i in range(len(linesCPL)):
|
|
line = linesCPL[i]
|
|
mwm = wm.findall(line)[0][4:-4].split('_')
|
|
freq = int(f.findall(line)[0][1:-4])
|
|
delay = float(cpl.findall(line)[0])
|
|
mod = mwm[0]
|
|
width = int(mwm[1])
|
|
|
|
oneSynth = [mod, width, freq, delay]
|
|
allSynths += [oneSynth]
|
|
|
|
return allSynths
|
|
|
|
allSynths = getData()
|
|
arr = [-40, -20, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10, 14, 20, 40]
|
|
|
|
widths = [32, 64, 128]
|
|
modules = ['flopr']
|
|
tech = 'sky90'
|
|
LoT = []
|
|
|
|
# # # initial sweep to get estimate of min delay
|
|
# freqs = ['7500']
|
|
# for module in modules:
|
|
# for width in widths:
|
|
# for freq in freqs:
|
|
# LoT += [[module, width, tech, freq]]
|
|
|
|
# thorough sweep based on estimate of min delay
|
|
for m in modules:
|
|
for w in widths:
|
|
delays = []
|
|
for oneSynth in allSynths:
|
|
if (oneSynth[0] == m) & (oneSynth[1] == w):
|
|
delays += [oneSynth[3]]
|
|
try: f = 1000/min(delays)
|
|
except: print(m)
|
|
for freq in [str(round(f+f*x/100)) for x in arr]:
|
|
LoT += [[m, w, tech, freq]]
|
|
|
|
deleteRedundant(LoT)
|
|
|
|
pool = Pool()
|
|
pool.starmap(runCommand, LoT)
|
|
pool.close() |