blob: 55fd89a5ed445d24d09a4004c914cdad9b66d569 [file] [log] [blame] [edit]
""" Generate timing summary from Vivado timing.json output. """
import argparse
import json
def timing_summary(timing_json):
setups = []
holds = []
for net in timing_json:
for ipin in net['ipins']:
if 'setup_timing_path' in ipin and ipin['setup_timing_path'
]['SLACK'] != "":
setups.append(ipin)
if 'hold_timing_path' in ipin and ipin['hold_timing_path']['SLACK'
] != "":
holds.append(ipin)
worst_setup_slack = min(
setups, key=lambda setup: float(setup['setup_timing_path']['SLACK'])
)
worst_hold_slack = min(
holds, key=lambda hold: float(hold['hold_timing_path']['SLACK'])
)
print(
'Worst setup slack: {} = {}'.format(
worst_setup_slack['setup_timing_path']['NAME'],
worst_setup_slack['setup_timing_path']['SLACK']
)
)
print(
'Worst hold slack: {} = {}'.format(
worst_hold_slack['hold_timing_path']['NAME'],
worst_hold_slack['hold_timing_path']['SLACK']
)
)
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('timing_json')
args = parser.parse_args()
with open(args.timing_json) as f:
timing_json = json.load(f)
timing_summary(timing_json)
if __name__ == "__main__":
main()