我有一个文件并包含一些数据
Net Name: VDD
Pin Name: VDD
Instance Name: ld_slice_logic_wrap_inst/ld_slice_logic_top_inst/ld_clk_gen_top_inst/ld_wdqs_clk_gen
Layer/Via# PGResistor Resistance(cumulative) Ohm Voltage_Drop(cumulative) V Length
VSRC N 0.0000e+00 0.0000e+00 3.7865e-03 3.7865e-03 0 144.43150,550.00000
AP N 1.0000e-06 1.0000e-06 0.0000e+00 3.7865e-03 0.000100000001 144.43150,550
AP N 3.1474e-03 3.1484e-03 5.6028e-06 3.7921e-03 6.8432998 144.43200,550.0000
AP N 1.0000e-06 3.1494e-03 0.0000e+00 3.7921e-03 0.000200000003 144.43200,543
AP N 1.9433e-03 5.0927e-03 1.1802e-05 3.8039e-03 4.1663999 144.43200,543.1565
AP N 2.5653e-03 7.6580e-03 1.7583e-05 3.8215e-03 5.5001001 144.43200,538.9900
AP N 1.0137e-02 1.7795e-02 7.0572e-05 3.8921e-03 8.851 144.43200,533.49000
AP N 2.1164e-02 3.8959e-02 1.5050e-04 4.0426e-03 16.0295 144.43200,524.63900
AP N 9.9838e-07 3.8960e-02 0.0000e+00 4.0426e-03 0.054 128.40250,524.63900
RV N 3.3405e-02 7.2365e-02 2.3925e-04 4.2818e-03 2.7 128.40250,524.69300
M15 N 9.9838e-07 7.2366e-02 0.0000e+00 4.2818e-03 0.6985 128.40250,524.69300
M15 N 1.0580e-01 1.7817e-01 4.3488e-04 4.7167e-03 14.947 127.70400,524.69300
VIA14 N 8.8155e-03 1.8698e-01 5.1737e-05 4.7684e-03 0.324 127.70400,539.64000
M14 N 3.5033e-02 2.2201e-01 1.1855e-04 4.8870e-03 4.96 127.70400,539.64000
M14 N 1.6951e-01 3.9153e-01 1.3857e-03 6.2727e-03 24 132.66400,539.64000
M9 N 9.5367e-07 6.2670e+00 0.0000e+00 7.4605e-03 0.26 187.49200,516.86300
Layer/Via Resistance(Ohm) Voltage_Drop(V) R_Cumulative(Ohm) Vdrop_Cummulative(V)
VSRC 0.0000e+00 3.7865e-03 0.0000e+00 3.7865e-03
AP 3.8960e-02 2.5606e-04 3.8960e-02 4.0426e-03
RV 3.3405e-02 2.3925e-04 7.2365e-02 4.2818e-03
M15 1.0580e-01 4.3488e-04 1.7817e-01 4.7167e-03
VIA14 8.8155e-03 5.1737e-05 1.8698e-01 4.7684e-03
M9 2.2392e+00 5.8532e-05 6.2670e+00 7.4605e-03
Net Name: VDD
Pin Name: VDD
Instance Name: ld_slice_logic_wrap_inst/ld_slice_logic_top_inst/ld_clk_gen_top_inst/ld_wdqs_clk_gen1
Layer/Via# PGResistor Resistance(cumulative) Ohm Voltage_Drop(cumulative) V Length
VSRC N 0.0000e+00 0.0000e+00 3.7865e-03 3.7865e-03 0 144.43150,550.00000
AP N 1.0000e-06 1.0000e-06 0.0000e+00 3.7865e-03 0.000100000001 144.43150,550
AP N 3.1474e-03 3.1484e-03 5.6028e-06 3.7921e-03 6.8432998 144.43200,550.0000
AP N 1.0000e-06 3.1494e-03 0.0000e+00 3.7921e-03 0.000200000003 144.43200,543
AP N 1.9433e-03 5.0927e-03 1.1802e-05 3.8039e-03 4.1663999 144.43200,543.1565
AP N 2.5653e-03 7.6580e-03 1.7583e-05 3.8215e-03 5.5001001 144.43200,538.9900
AP N 1.0137e-02 1.7795e-02 7.0572e-05 3.8921e-03 8.851 144.43200,533.49000
AP N 2.1164e-02 3.8959e-02 1.5050e-04 4.0426e-03 16.0295 144.43200,524.63900
AP N 9.9838e-07 3.8960e-02 0.0000e+00 4.0426e-03 0.054 128.40250,524.63900
RV N 3.3405e-02 7.2365e-02 2.3925e-04 4.2818e-03 2.7 128.40250,524.69300
M15 N 9.9838e-07 7.2366e-02 0.0000e+00 4.2818e-03 0.6985 128.40250,524.69300
M15 N 1.0580e-01 1.7817e-01 4.3488e-04 4.7167e-03 14.947 127.70400,524.69300
VIA14 N 8.8155e-03 1.8698e-01 5.1737e-05 4.7684e-03 0.324 127.70400,539.64000
M14 N 3.5033e-02 2.2201e-01 1.1855e-04 4.8870e-03 4.96 127.70400,539.64000
M14 N 1.6951e-01 3.9153e-01 1.3857e-03 6.2727e-03 24 132.66400,539.64000
M9 N 9.5367e-07 6.2670e+00 0.0000e+00 7.4605e-03 0.26 187.49200,516.86300
Layer/Via Resistance(Ohm) Voltage_Drop(V) R_Cumulative(Ohm) Vdrop_Cummulative(V)
VSRC 0.0000e+00 3.7865e-03 0.0000e+00 3.7865e-03
AP 3.8960e-02 2.5606e-04 3.8960e-02 4.0426e-03
RV 3.3405e-02 2.3925e-04 7.2365e-02 4.2818e-03
M15 1.0580e-01 4.3488e-04 1.7817e-01 4.7167e-03
VIA14 8.8155e-03 5.1737e-05 1.8698e-01 4.7684e-03
M9 2.2392e+00 5.8532e-05 6.2670e+00 7.4655e-03 文件数据将重复使用网名和Pin Name作为VDD、VSS、VDDA、VSSA。就这样.
我想跳过数据在层/Via#之后的数据,直到层/Via之前,并且我只想考虑在层/Via之后的M9数据,最后一个值为“例如: 7.4605e-03,7.4655e-03”e 216
我试过的逻辑
def readPinFile(filename):
result = None
with open(filename, "r") as file:
flag_count = 0
flag_count1 = 0
result = {}
result1 = {}
lastPin = None
for line in file:
lines = line.strip()
if lines[-3:] == "VDD":
Pin = lines.split(" ")[3]
result[Pin] = {"INST": None, "M9": None}
if lines[-3:] == "VSS":
Pin = lines.split(" ")[3]
result[Pin] = {"INST": None, "M9": None}
if lines[:9] == "Instance ":
result[Pin]["INST"] = lines.split(" ")[3]
if lines.startswith("Layer/Via "):
flag_count1 = 1
if lines[:2] == "M9" and flag_count1 == 1:
result[Pin]["M9"] = lines.split(" ")[14]
return result
pin_of_file1 = readPinFile("inst_1.txt")
for pin, pin_data in pin_of_file1.items():
# pass
print(pin_data) 我之所以使用这个块,是因为这个文件包含了作为VSS的net和pin名称(上面的数据,例如,网名、和引脚名将更改每个块,格式是相同的)
if lines[-3:] == "VSS":
Pin = lines.split(" ")[3]
result[Pin] = {"INST": None, "M9": None} 与我为其他程序处理文件数据所用的逻辑相同,它在这里用作循环,而不是循环期望的输出
{'Pin_Name': 'VDD', 'inst': 'ld_slice_logic_wrap_inst/ld_slice_logic_top_inst/ld_clk_gen_top_inst/ld_wdqs_clk_gen', 'M9': '7.4605e-03'}
{'Pin_Name': 'VDD', 'inst': 'ld_slice_logic_wrap_inst/ld_slice_logic_top_inst/ld_clk_gen_top_inst/ld_wdqs_clk_gen', 'M9': '7.4655e-03'}我得到的输出是
{'Pin_Name': 'VDD', 'Net_Name': 'VSS', 'M9': '7.4605e-03'}有人能引导我走出这个世界吗?
发布于 2022-09-27 15:00:29
def readPinFile(filename):
result = None
overall_result = None
with open(filename, "r") as file:
flag_count = 0
flag_count1 = 0
result = {}
result1 = {}
lastPin = None
for line in file:
lines = line.strip()
if lines[-3:] == "VDD":
Pin = lines.split(" ")[3] + str(flag_count)
result[Pin] = {"INST": None, "M9": None}
if lines[-3:] == "VSS":
Pin = lines.split(" ")[3]
result[Pin] = {"INST": None, "M9": None}
if lines[:9] == "Instance ":
result[Pin]["INST"] = lines.split(" ")[3]
if lines.startswith("Layer/Via "):
flag_count1 = 1
if lines[:2] == "M9" and flag_count1 == 1:
result[Pin]["M9"] = lines.split(" ")[14]
flag_count1 = 0
flag_count = flag_count + 1
return result
pin_of_file1 = readPinFile("inst_1.txt")
for pin, pin_data in pin_of_file1.items():
# pass
print(pin_data)发布于 2022-09-27 15:02:00
您可能会发现这种方法更健壮:
def readPinFile(filename):
values = []
inLayer = False
d = {}
with open(filename) as data:
for line in map(str.strip, data):
if not inLayer:
for k1, k2 in ('Net Name:', 'Net_Name'), ('Pin Name:', 'Pin_Name'):
if line.startswith(k1):
d[k2] = line.split()[-1]
continue
if len(tokens := line.split()) > 1:
if tokens[0] == 'Layer/Via':
inLayer = True
elif inLayer and tokens[0] == 'M9':
d['M9'] = tokens[-1]
values.append(d)
d = {}
inLayer = False
return values输出:
[{'Net_Name': 'VDD', 'Pin_Name': 'VDD', 'M9': '7.4605e-03'}, {'Net_Name': 'VDD', 'Pin_Name': 'VDD', 'M9': '7.4655e-03'}]https://stackoverflow.com/questions/73869233
复制相似问题