从netlist中查找subckt

时间:2007-04-29
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

  
上一篇:PCB 的简单介绍
下一篇:PCB Layout从零开始

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料