热度 3| |||
上一篇文章中,我们了解了shell脚本导出GDS,接下来,我们来了解shell脚本Run DRC,先看脚本。
#!/bin/bash
cellname=$1drc_rule="/home/work/pdk/RULE_DECK/DRC/cal.drc"
gds_dir="/home/work/project/verify/gds"
sed -e 's#\(LAYOUT PRIMARY\).*#\1 \"'$cellname'\"#g' \
-e 's#\(LAYOUT PATH\).*#\1 \"'$gds_dir/$cellname.gds'\"#g' \
-e 's#\(DRC SUMMARY REPORT\).*#\1 \"'$cellname.drc.rep'\"#g' \
-e 's#\(DRC RESULTS DATABASE\).*#\1 \"'$cellname.DRC_RES.db'\"#g' \
$drc_rule > _drc.cal_
mv -f _drc.cal_ ./rundrc
#run drc dir
cd ./rundrc
calibre -drc -64 -hier -hyper -turbo 2 _drc.cal_
grep "TOTAL Result Count = [1-9]" $cellname.drc.rep
#open rve
calibre -rve $cellname.DRC_RES.db
上一篇文章:shell脚本导GDS及其说明
01
首先,我们把以上脚本保存在文件中,比如:layout_drc.sh。具体运行脚本方式,请参考上一篇文章「shell脚本导GDS及其说明」。
我们一起来看脚本:
#!/bin/bash #这一句是声明shell的名称第一行,是声明该脚本使用的shell的名称。
如果是csh shell,那就是:
#! /bin/csh
cellname=$1
定义cellname。
drc_rule="/home/work/pdk/process_H_/RULE_DECK/DRC/cal.drc"gds_dir="/home/work/project/verify/gds"
以上两句意思是,drc_rule是放drc的文件,gds_dir是放gds的路径。
sed -e 's#\(LAYOUT PRIMARY\).*#\1 \"'$cellname'\"#g' \
-e 's#\(LAYOUT PATH\).*#\1 \"'$gds_dir/$cellname.gds'\"#g' \
-e 's#\(DRC SUMMARY REPORT\).*#\1 \"'$cellname.drc.rep'\"#g' \
-e 's#\(DRC RESULTS DATABASE\).*#\1 \"'$cellname.DRC_RES.db'\"#g' \
$drc_rule > _drc.cal
在我们这个脚本中,运用了sed(Stream editor流编辑器)来替换drc cmd file中有关cell,gds path,drc report和drc运行结果DRC_RES.db。
sed -e 's#\(LAYOUT PRIMARY\).*#\1 \"'$cellname'\"#g' \
sed执行替换,把匹配到的"LAYOUT PRIMARY"后面的内容,替换为我们输入的cellname。
-e :是告诉sed,将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项。
s : 是执行替换命令 substitute。
# :是分界符号,其实这个符号是可以自己定义的,可以为/,或!或 | 或@,只要和表达式中的符号不重复。
\(LAYOUT PRIMARY\):其中的\( \),其实是( ),因为( )是特殊符号,所以需要用 \ 来转义一下。
.* :用来匹配LAYOUT PRIMARY后所有的内容。
\1 :是分组替换,替换第一组。sed 最多能处理 9 个分组,分别用\1 至\9 表示。
g : 是全局(global)标志, 默认情况下,sed 会替换每行中第一次匹配到的,如果要替换每行中出现的所有的,就需要使用 g。
$drc_rule > _drc.cal_该语句是把上面设置好的drc_rule文件重定向到_drc.cal_,而不改变原文件drc_rule。
mv -f _drc.cal_ ./rundrc
#run drc dir
cd ./rundrc
上面两句,是把_drc.cal_放到rundrc的目录下,然后在该目录下run drc。
calibre -drc -64 -hier -hyper -turbo 2 _drc.cal_这句是真正run drc的语句,具体用法,可以自行查看相关文档。
grep "TOTAL Result Count = [1-9]" $cellname.drc.rep查找drc结果中的TOTAL Result Count 字样,并打印出该字符串的行。
#open rvecalibre -rve $cellname.DRC_RES.db打开rve界面,读取drc的结果。
以上是对该脚本大概的解释,脚本使用方法可以参考上一篇文章「shell脚本导GDS及其说明」。
02
sed的使用方法,可以在网络上查看,或者直接在terminal输入sed,也可以看到使用方法。
sed 基本语法:sed [options] {sed-commands} [input-file]
sed 每次从 input-file 中读取一行记录,并在该记录上执行 sed-commands
sed 首先从 input-file 中读取第一行,然后执行所有的 sed-commands;再读取第二行,执行所有 sed-commands,重复这个过程,直到 input-file 结束。通过制定[options] 还可以给 sed 传递一些可选的选项。
我们也可以使用 –e 选项,执行多个 sed 命令,如下所示: -e 的使用方法:sed [ options ] –e {sed-command-1} –e {sed-command-2} [input-file]。
-e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项。我们这里就使用了sed这种用法。
本文由JK_chen原创,欢迎分享!
微信号:JK_LayoutArt