位置:51电子网 » 技术资料 » 其它综合

从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


相关IC型号

热门点击

 

推荐技术资料

罗盘误差及补偿
    造成罗盘误差的主要因素有传感器误差、其他磁材料干扰等。... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!