
在APR时,通常会对模拟给数字(D2A)的信号插入二极管,来加强信号完整性、减小ESD干扰,或者手动修天线效应(antenna)。
来自美国NanDigits的网表ECO工具,GOF,提供了丰富的网表处理API,结合Perl语言语法的灵活性,可以轻松搞定APR过程中的各种优化需求。
今天介绍GOF的两个API:get_ports和get_loads。
get_ports:
获取顶层的端口列表,可以根据端口方向input、output、inout来筛选。
get_loads:
获取连线的负载列表,有选项控制是否跨模块、是否跳过buffer,是否跳过invertor等。
功能实现
所以今天“为所有input port的负载插二极管”的需求可以分解成两步:
一、找出所有的input port
二、用for循环找出每一个inport port的负载
my @all_inputs = get_ports("-input");
open(FOUT, ">add_diode.tcl");
foreach my $input (@all_inputs){
    my @loads = get_loads($input, "-hier");
    foreach my $load (@loads){
        my @t = @$load;
        if($t[0] =~ m/DIODE/){
            print("skip {$t[0] $t[1]}\n");
        }else{
            print FOUT ("attachDiode -diodeCell ANTENNA27T -prefix DIO1_ {$t[0] $t[1]}\n");
            print FOUT ("attachDiode -diodeCell ANTENNA27T -prefix DIO2_ {$t[0] $t[1]}\n");
            print FOUT ("attachDiode -diodeCell ANTENNA27T -prefix DIO3_ {$t[0] $t[1]}\n");
        }
    }
}
close(FOUT);在gof shell里直接运行这段perl脚本,即可生成tcl文件。在后端工具innovus里source tcl文件,就完成了插入diode。
生成的tcl文件大致如下:

更多API请查阅(或者点击文末的阅读原文):
https://nandigits.cn/doc/index.php?md=gof_api_toc