TCL文件解析需求:将电源头作为键存储对应列值
我来帮你搞定这个TCL解析+PST命令生成的需求!下面是针对你需求的详细实现方案:
TCL脚本实现电源列解析与PST命令生成
核心思路
先明确目标:读取目标文件中的电源列数据,把每个电源名称(vdd、vddpll等)作为键,对应列的所有状态值作为列表存储;同时自动生成create_pst和add_pst_state系列命令。
完整TCL脚本示例
# 1. 指定要解析的输入文件路径 set input_file "power_config.txt" # 2. 打开文件并读取表头(电源名称行) set fh [open $input_file r] set header_line [string trim [gets $fh]] set supply_names [split $header_line] ;# 拆分得到所有电源名称 # 3. 初始化数组存储每个电源的状态序列 array set power_state_map {} foreach supply $supply_names { set power_state_map($supply) [list] } # 4. 逐行读取状态数据,填充数组并生成PST命令 set state_index 1 puts "create_pst top_pst -supplies [list {*}$supply_names]" puts "" while {[gets $fh line] != -1} { set line [string trim $line] if {$line eq ""} continue ;# 跳过空行 set state_values [split $line] # 把当前行的状态对应到每个电源的序列中 foreach supply $supply_names val $state_values { lappend power_state_map($supply) $val } # 生成当前状态对应的add_pst_state命令 puts "add_pst_state state$state_index -pst top_pst -state [list {*}$state_values]" incr state_index } close $fh # 可选:打印解析后的电源-状态映射,用于验证 puts "\n=== 解析完成的电源状态映射 ===" foreach supply $supply_names { puts "* $supply: [join $power_state_map($supply) " "]" }
脚本细节说明
- 文件读取逻辑:先读取表头行拆分出所有电源名称,用数组
power_state_map来存储每个电源对应的状态序列,键是电源名,值是状态列表。 - PST命令生成:先输出
create_pst命令(直接用表头的电源列表),然后逐行读取状态数据时,即时生成对应的add_pst_state命令,自动给状态编号(state1、state2...)。 - 验证输出:最后会打印每个电源对应的完整状态序列,方便你确认解析结果是否符合预期。
示例输入与输出效果
假设你的输入文件内容是:
vdd vddpll vdd_NWELL vdd33 gnd gnd_PWELL
ON ON ON ON gnd_on gnd_on
ON OFF ON ON gnd_on gnd_on
OFF OFF ON OFF gnd_on gnd_on
脚本运行后会输出:
create_pst top_pst -supplies {vdd vddpll vdd_NWELL vdd33 gnd gnd_PWELL} add_pst_state state1 -pst top_pst -state {ON ON ON ON gnd_on gnd_on} add_pst_state state2 -pst top_pst -state {ON OFF ON ON gnd_on gnd_on} add_pst_state state3 -pst top_pst -state {OFF OFF ON OFF gnd_on gnd_on} === 解析完成的电源状态映射 === * vdd: ON ON OFF * vddpll: ON OFF OFF * vdd_NWELL: ON ON ON * vdd33: ON ON OFF * gnd: gnd_on gnd_on gnd_on * gnd_PWELL: gnd_on gnd_on gnd_on
这样就同时实现了电源状态的键值存储和PST命令的自动生成,完全匹配你的需求~
内容的提问来源于stack exchange,提问作者Sri
相关产品推荐
相关产品推荐

