mirror of https://github.com/openXC7/prjxray.git
timfuz: QoR checker
Signed-off-by: John McMaster <johndmcmaster@gmail.com>
This commit is contained in:
parent
7fd5e77935
commit
0ddd9fd33c
|
|
@ -0,0 +1,60 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from timfuz import Benchmark, load_sub, load_bounds, loadc_Ads_b
|
||||
import numpy as np
|
||||
|
||||
|
||||
def run(fns_in, corner, bounds_csv, verbose=False):
|
||||
print('Loading data')
|
||||
Ads, borig = loadc_Ads_b(fns_in, corner, ico=True)
|
||||
|
||||
bounds = load_bounds(bounds_csv, corner)
|
||||
# verify is flattened
|
||||
for k in bounds.keys():
|
||||
assert 'GROUP_' not in k, 'Must operate on flattened bounds'
|
||||
|
||||
# compute our timing model delay at the given corner
|
||||
bgots = []
|
||||
for row_ds in Ads:
|
||||
delays = [n * bounds[x] for x, n in row_ds.items()]
|
||||
bgots.append(sum(delays))
|
||||
|
||||
ses = (np.asarray(bgots) - np.asarray(borig))**2
|
||||
mse = (ses).mean(axis=None)
|
||||
print('MSE aggregate: %0.1f' % mse)
|
||||
print('Min SE: %0.1f' % min(ses))
|
||||
print('Max SE: %0.1f' % max(ses))
|
||||
|
||||
|
||||
def main():
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description='Report a timing fit score')
|
||||
|
||||
parser.add_argument('--verbose', action='store_true', help='')
|
||||
parser.add_argument('--corner', required=True, default="slow_max", help='')
|
||||
parser.add_argument(
|
||||
'--bounds-csv',
|
||||
required=True,
|
||||
help='Previous solve result starting point')
|
||||
parser.add_argument('fns_in', nargs='+', help='timing3.csv input files')
|
||||
args = parser.parse_args()
|
||||
# Store options in dict to ease passing through functions
|
||||
bench = Benchmark()
|
||||
|
||||
fns_in = args.fns_in
|
||||
if not fns_in:
|
||||
fns_in = glob.glob('specimen_*/timing3.csv')
|
||||
|
||||
try:
|
||||
run(
|
||||
fns_in=fns_in,
|
||||
corner=args.corner,
|
||||
bounds_csv=args.bounds_csv,
|
||||
verbose=args.verbose)
|
||||
finally:
|
||||
print('Exiting after %s' % bench)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Loading…
Reference in New Issue