从netlist中查找subckt
发布时间:2008/6/5 0:00:00 访问次数:1158
从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 |
从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 |