caravel/scripts/parse_antenna_reports.py

41 lines
2.0 KiB
Python
Raw Normal View History

2022-11-10 09:04:12 -06:00
import os
coor_ind = None
cell_ind = 0
block_name = "caravel"
log_file = open(f"calculated_vios_{block_name}.txt", "w")
for file in os.listdir(block_name):
if file.startswith("ar_"):
if file.endswith(".db"):
db_file = os.path.join(block_name, file)
met_layer = db_file.split('_')[1].split('.')[0]
if 'met' in met_layer:
with open(db_file) as f:
for num, line in enumerate(f, 1):
if line.startswith('CELL='):
cell = line.split(' ')[0].split('=')[1]
if line.startswith('fgate'):
g_area = float(line.split(' ')[1].split('=')[1])
if line.startswith(met_layer.capitalize()):
per = float(line.split(' ')[2].split('=')[1])
coor_ind = 0
cell_ind = num
if line.startswith('p 1') and num > cell_ind:
coor_ind = num + 1
if num == coor_ind:
coor = line
if line.startswith('Ant_diode'):
ant_area = float(line.split(' ')[1].split('=')[1])
if ant_area != 0:
ratio = (per / g_area) - 400*ant_area - 2200
# if round(ratio/400,2) > 10:
log_file.write(f"antenna violation on {met_layer} in cell {cell}: {round(ratio,2)} || with diffusion area: {round(ant_area,2)} || ratio/400 = {round(ratio/400,2)} || coordinates = {coor}")
else:
ratio = per / g_area
# if round(ratio/400,2) > 10:
log_file.write(f"antenna violation on {met_layer} in cell {cell}: {round(ratio,2)} || without diffusion || ratio/400 = {round(ratio/400,2)} || coordinates = {coor}")