PT:pt write_change to innovus 脚本

2024-05-10 13:36
文章标签 脚本 change write pt innovus

本文主要是介绍PT:pt write_change to innovus 脚本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

7b0b406f5e7b4f36a876346d5703a6e8.png

6a628bd160cb49099f8a9622849a011d.png

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

拾陆楼知识星球入口

0e09f6874287495aad250a66f26f9d41.png

#!usr/bin/perl
open rf,"$ARGV[0]";
open wf,">test. tcl";

while (<rf>) {
          s/\[(\D[^\s\]]*)?\]/\\\[$1\\\]/g;
          if (/current _ instances$/) {
                 $curinst = "";
                 $hinst = "";
                 $orient_mark=0;
                 next
          }
          if (/current_instance\s+{(\S+)}/) {
                 $curinst = "$1";
                 $curinst =~s/^{//g;
                 $curinst =~s/}$//g;
                 $hinst ="-hinstGuide ${curinst}
                 $curinst ="${curinst}\/";
                 next
          }
          if (/insert _ buffer\s+\[get_ pins\s+\{(.*)\}\]\s+(\S+)\s+-new_net_names\s+\{(\S+)\}\s+-new_cell_names\s+\{(\S+)\}\s+-location\s+\{(.*)\}\s+-orientation\s+(\S+)/ ) {
                 $term_name = "${curinst}$1";
                 $cell_name = $2;
                 $net_name = $3;
                 $name = $4;
                 $location = $5;
                 $ori2 = $6;
                 if ($ori2 eq "N") {$ori = "R0"}

                 if ($ori2 eq"FS") {$ori = "MX"}

                 if ($ori2 eq "S") {$ori = "R180"}

                 if ($ori2 eq"FN") {$ori = "MY"}

                 print wf "set result [ecoAddRepeater -term $term_name -cell $cell_name -newNetName $net_name -name $name -loc {$location} -bufOrient $ori $hinst]\n"; 

                next

        }

       if (/add buffer_on_route\s+\[get _ net -of (.*)\]\s+-user_specified_buffers\s+\{\s*(.*)\s*\}\s+.*/) {

               $pin = $1;

               $ll = $2;

               $i = 0;

               $inst_list = "";

               $cell_list = "";

               $pt = "";

               $j = 0;

               $pin =~ s/^{//g;

               $pin =~ s/}$//g;

               foreach (split(/\s+/,$ll)) {

                       $i+=1;

                       if ($i==1) {

                               $inst_list="$inst_list $_";

                       } elsif ($i==2) {

                               $cell_list="$cell_list $_";

                       } elsif ($i==3) {

                               $pt="$pt $_";

                       } elsif ($i==4) {

                               $pt="$pt $_";

                       } elsif ($i==5) {

                               $i=0;

                       }

                      $orient_mark=1;

             }

             @cell_list = split(/\s+/,$cell _ list);

             if ( @cell_list > 1) {

                      print wf "set result  [ecoAddRepeater -net [get_object_name [get_net -of ${curinst}$pin]] -cell \"$cell _ list\" -loc \"$pt\" -name \"$inst _ list\"]\n";

             } else {

                      print wf "set result [ecoAddRepeater -net [get_object_name [get_net -of ${curinst}$pin]] -cell \"$cell_ list\" -loc \"$pt\" -name \"$inst_list\" $hinst]\n";

            }

    } elsif (/set_cell_location -coordinates\s+{(.*)}\s+-orientation\s+(\S+)\s+\[get_cells\s+{(.*)}/) {

         $ori2= $2;

         $loc2 = $1;

         $c2 = $3;

        if ($ori2 eq"N") {$ori = "R0"}

        if ($ori2 eq"FS") {$ori = "MX"}

        if ($ori2 eq "S") {$ori = "R180"}

        if ($ori2 eq"FN") {$ori = "MY"}

       @cell_list = split(/\s+/,$cell_list);

       if ($orient_mark && @cell_list > 1) {

                  print wf "dbSet [dbGet -p top.inst.name [lindex \$result $j ]].orient $ori\n";

print wf "dbSet [dbGet -p top.inst.name [lindex \$result $j ]]. pt \"$loc2\"\n";

} else {

print wf "dbSet [dbGet -p top.inst.name ${curinst}$c2]. orient $ori\n";

print wf "dbSet [dbGet -p top.inst.name ${curinst}$c2]. pt \"$loc2\"\n";

}

$j+=3;

} elsif (/size_cell\s{(\S+)}\s+{(\S+)}$/) {

print wf "ecoChangeCell -inst ${curinst}$1 -cell $2\n";

$orient_mark=0;

} else {

$j=0;

print wf $_;

}

close rf;

close wf

 

 

这篇关于PT:pt write_change to innovus 脚本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/976587

相关文章

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删