mirror of https://github.com/efabless/caravel.git
41 lines
2.0 KiB
Python
41 lines
2.0 KiB
Python
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}")
|
|
|