怎么用perl对sdc进行预处理
这篇文章主要介绍“怎么用perl对sdc进行预处理”,在日常操作中,相信很多人在怎么用perl对sdc进行预处理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用perl对sdc进行预处理”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
成都创新互联专业提供成都主机托管四川主机托管成都服务器托管四川服务器托管,支持按月付款!我们的承诺:贵族品质、平民价格,机房位于中国电信/网通/移动机房,遂宁服务器托管服务有保障!
背景
有时候PD会用综合工具写出的sdc进行PR和时序收敛。而综合工具会不可避免的会把专门为综合而加的sdc命令一起写出来。所以一定要对sdc进行处理后才能进入PR阶段。
例如:
set_operating_condition
set_max_area
set_uncertainty
set_max_transition
set_clock_latency
... ...
而对这些命令的删除或者注释的操作通常是手工进行,非常容易遗漏。而且通常由于sdc的更新迭代,这些动作会重复多次。这就需要用脚本对sdc进行预处理,我们只需要维护一个脚本即可, 而sdc处理自动完成。
难点
sdc采用的是tcl语法。对于tcl来说,一行的末端并不意味着一行的结束。因为tcl是可以通过反斜线对换行符进行转义。这带来了美观的同时,也给脚本处理带来了一些难度。
思路1
解决思路之一就是先将所有的转义后的换行符删除。这样的结果就是,所有的sdc命令,都只占用一行。然后再对sdc命令进行替换。
这个思路的问题就是sdc处理后面目全非。行与行完全不对应,对后续的小幅迭代和debug带来困难。
思路2
完全按照tcl的语义,将文件进行重新分割,分割时排除转移后的换行符。
下面是是实现后的脚本:
#!/usr/bin/perlmy @files = @ARGV;my @keywords = qw(set_max_areaset_max_fanouitset_ideal_networkset_timing_derateset_clock_latency);
此处为需要处理的关键词,可以根据情况进行修改。
my $content;open my $fh, "<", $file or die "$!";{local $/;$content=<$fh>;}close $fh;
将整个文件读入到变量中。
这一步是关键:
my @lines = split /(?
将文本用非转义换行符进行分割, 并赋值给了@lines;
之后就可以很方便的对每一行进行处理,而不用担心烦人的”\“了。
for my $line (@lines) {my $prefix = "";for my word (@keywords) { if (line =~ /$word/) { prefix = "#"; } } print "prefix"."$line\n";}
到此,关于“怎么用perl对sdc进行预处理”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
网站名称:怎么用perl对sdc进行预处理
文章网址:http://scjbc.cn/article/phospp.html