#!/usr/bin/python3 # Shreya Sanghai (ssanghai@hmc.edu) 2/28/2022 import glob import re import csv import linecache import os # field_names = [ 'Name', 'Critical Path Length', 'Cell Area', 'Synth Time'] # data = [] # for name in glob.glob("/home/ssanghai/riscv-wally/synthDC/runs/*/reports/wallypipelinedcore_qor.rep"): # f = open(name, 'r') # # trimName = re.search("runs\/(.*?)\/reports", name).group(1) # trimName = re.search("wallypipelinedcore_(.*?)_sky9",name).group(1) # for line in f: # if "Critical Path Length" in line: # pathLen = re.search("Length: *(.*?)\\n", line).group(1) # if "Cell Area" in line: # area = re.search("Area: *(.*?)\\n", line).group(1) # if "Overall Compile Time" in line: # time = re.search("Time: *(.*?)\\n", line).group(1) # data += [{'Name' : trimName, 'Critical Path Length': pathLen, 'Cell Area' : area, 'Synth Time' :time}] def main(): data = [] curr_dir = os.path.dirname(os.path.abspath(__file__)) output_file = os.path.join(curr_dir,"..","Summary.csv") runs_dir = os.path.join(curr_dir,"..","runs/*/reports/wallypipelinedcore_qor.rep") # cruns_dir = "/home/ssanghai/Desktop/cleanRun/*/reports/wallypipelinedcore_qor.rep" search_strings = [ "Critical Path Length:", "Cell Area:", "Overall Compile Time:", "Critical Path Clk Period:", "Critical Path Slack:" ] for name in glob.glob(runs_dir): f = open(name, 'r') trimName = re.search("wallypipelinedcore_(.*?)_sky",name).group(1) output = {'Name':trimName} num_lines = len(f.readlines()) curr_line_index = 0 while curr_line_index < num_lines: line = linecache.getline(name, curr_line_index) for search_string in search_strings: if search_string in line: val = getVal(name,search_string,line,curr_line_index) output[search_string] = val curr_line_index +=1 data += [output] with open(output_file, 'w') as csvfile: writer = csv.DictWriter(csvfile, fieldnames=['Name'] + search_strings) writer.writeheader() writer.writerows(data) def getVal(filename, search_string, line, line_index): data = re.search(f"{search_string} *(.*?)\\n", line).group(1) if data == '': #sometimes data is stored in two line data = linecache.getline(filename, line_index+1).strip() return data if __name__=="__main__": main()