冰点火龙的个人空间 https://blog.eetop.cn/1104918 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

shell脚本Run DRC及其解释

热度 3已有 2614 次阅读| 2021-6-1 09:04 |个人分类:Layout·关于脚本|系统分类:芯片设计| 脚本

image.png

上一篇文章中,我们了解了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,也可以看到使用方法。


image.png

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
image.png

2

点赞

刚表态过的朋友 (2 人)

发表评论 评论 (2 个评论)

回复 asuuka 2023-6-26 17:01
请问calibre -drc这一行命令的相关文档在哪可以查阅?谢谢!
回复 冰点火龙 2024-4-20 20:40
asuuka: 请问calibre -drc这一行命令的相关文档在哪可以查阅?谢谢!
Calibre自带的文档就有的。

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 7

    月排名
  • 0

    总排名
  • 0

    关注
  • 24

    粉丝
  • 4

    好友
  • 21

    获赞
  • 20

    评论
  • 572

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-28 15:35 , Processed in 0.017121 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部