从netlist中查找subckt 比如在做dracula LVS时,会显示出如下一些信息 ************************** DISCREPANCY 1 ********************************** ----------------------------------------MATCHED DEVICE UN-MATCHED NODE--------- *DEV5404 MOS N ---- XI1-XI1-XI0- : *DEV1423 MOS N XI1-XI1-XI0-MI7 : X=1643.95 Y=94.41 XI1-net2<0>, ?BL_R<287>, XI1-net2<0>, XI1-XI1-XI0-XI1-XI1-XI0-net9 XI1-XI1-XI0-XI1-XI1-XI0-net9, BL_R<279> 这是一些节点匹配情况,但你不知道这些节点的位置到底在什么地方,如果有电路图可能会找起来很 方便,但如果只有netlist时,就有些麻烦。本程序就是来查找这些节点信息。 比如我们来查找 XI1-XI1-XI0-XI1-XI1-XI0-net9,看看到底在电路的哪一个子电路中 程序在Solaris 中测试 程序工具:bash 其中ckt_inst为netlist的top circuit;cir_file为netlist路径与文件名。 运行结果如下: 其中,括号中就是这inst所用的subckt,最前面为subckt所在的行号。 程序代码如下: #!/bin/bash #this program for search node in subckt form netlist #copyrign ?nfmao 2004-11-26 # #cJournalPath= ckt_inst="ROM2M" cir_file="../loglvs/ROM2M.cir" cir_end=".ENDS" #process in uppercase cat $cir_filetr "[a-z]" "[A-Z]">.tempcir cir_file=".tempcir" #get node format xx-xx-xx echo -n "Please input node:" read err_node err_node=`echo $err_nodesed -e 's/-/ /g'tr "[a-z]" "[A-Z]"` node_number=`echo $err_nodeawk '{sum=sum+NF}END{print sum}'` #loop node node_box=() i=1 while((i<$node_number)) do node_box[$i]=`echo $err_nodeawk '{print $'$i'}'` node_level=${node_box[i]} bg_number=`grep -n -i '^.SUBCKT '$ckt_inst' ' $cir_filecut -f 1 -d :` pro_number=`sed -n ''$bg_number',/^'$node_level'/'p $cir_fileawk 'END{print NR}'` ((bg_number=bg_number+pro_number)) #+ not at begin ((jk=bg_number-1)) add_number=`sed -n ''$jk',/^[^+]/'p $cir_fileawk 'END{print NR}'` ((jk=jk+add_number-2)) ckt_inst=`awk 'NR=='$jk'{print $NF}' $cir_file` ((node_row=jk)) echo $node_row : $node_level \( $ckt_inst \) ((i=i+1)) done #process node name node_box[$i]=`echo $err_nodeawk '{print $'$node_number'}'` node_level=${node_box[i]} bg_number=`grep -n -i '^.SUBCKT '$ckt_inst' ' $cir_filecut -f 1 -d :` seg_number=`echo $bg_numberawk '{sum=sum+NF}END{print sum}'` first_seg=`echo $bg_numberawk '{print $1}'` echo echo $bg_number : $node_level in SUBCKT $ckt_inst if((seg_number > 1)) then ((k=first_seg)) sed -n ''$k',/^.ENDS/'p $cir_filegrep -i -n $node_level else pro_number=`sed -n '/^.SUBCKT '$ckt_inst'/;/^.ENDS/'p $cir_fileawk 'END{print NR}'` ((big_number=bg_number+pro_number)) sed -n ''$bg_number','$big_number''p $cir_filegrep -i -n $node_level fi echo |