点击上面“蓝字”关注我们!
前篇文章介绍的configure.tcl文件用来设置全局参数,这些参数将应用到所有的cells中,是library level的设置。对于cell level的参数设置,定义在instance文件里。
2
Cell level设置 – instance file
Instance file (cellname.inst) 是基于Tcl的脚本,描述每一个cell的结构,逻辑行为,定义配置信息,告诉工具如何去做characterization和modeling。Instance一般会放在<charpoint>/control/路径下。一个完整的instance file主要包含这些信息–
- cell网表的存放路径
- 每个pin的方向和类型
- Cell的function
- 激励和测量控制
- 用来告诉工具如何做characterization和modeling的其他配置信息
那么我们如何拿到这个instance文件呢?主要有四种途径:一是走rechar flow,import参考库的同时,工具会自动产生instance文件,import -liberty seed.lib;二是functional recognition flow(这个flow后面会详细介绍),import -netlist_dir data/netlists -extension .cir BUFX16,三是使用golden instance,针对像STD cell这样的标准单元,instance文件有时是可以重复使用的;最后一个是完全手写,这个对刚接触工具的同学可能不太友好。
既然Instance文件能自动产生,那是不是就不需要用户干预了?NO!下面几种情况还是需要我们手动编辑修改的:
- Rechar flow,对于复杂的cell,seed.lib里function信息不全,或者压根就没有。
- FR (Functional Recognition) flow,一些复杂的cell工具认不出来或者认不对。
- 用户需要做一些自定义的arc。
- 有些arc需要提供cell内部节点 (internal node)。
- 有些cell的pin的定义需要更新。
- 其他我没想到的。
Instance文件长什么样?基本就长成下面这个样子了。
下面分别看看instance文件里的内容:
Pin definitions
add_pin定义每个pin的电气特性,pin的名字,pintye(这个上篇文章做过介绍),pin的方向等。add_pin的语法在User Guide上有非常详细的说明,这里就不罗列了。需要提一下的是-internal,告诉工具这个pin定义成internal node,因此后面还需要跟上-spice_node指定在netlist里具体的net节点。这在retention cell,memory characterization的时候经常会碰到。
Cell function
Instance文件里另一个非常重要的部分就是cell function,描述cell的逻辑行为。有几种描述function的方式:
1. add_function – 通过布尔表达式来描述,这是最简单的描述逻辑行为的方式之一,对于一些比较简单的function可以用它来描述。
2. add_table – 通过真值表或者状态表的形式描述cell的行为。这种表格的形式可以描述add_function难以描述的cell行为。对一些复杂的cell,如memory,一般都是采用这种方式。
3. add_flop和add_latch – 描述时序逻辑寄存器和锁存器的行为。
4. define_differential_receiver和set_output_differential – 有些cell有差分输入或者差分输出,输出function不是由单一的输入信号决定的,通过定义差分输入和输出告诉工具注意处理差分信号。
5. 对于非常复杂的cell,上面的任何一种定义方式都不足以描述它的function,这时就需要组合使用以上多种定义方式。如果组合使用还是不足以描述,那就要上AUS/AUA了。关于AUS/AUA,后面再详细介绍。
这里简单举几个栗子:
add_function的栗子
add_function output_pin expression [-hi_z expression] [-illegalexpression]
add_function Z A -hi_z !EN – 三态缓冲器,当EN为高输出使能,EN为低输出为三态。
add_table的栗子
比如一个NAND,真值表如下,跟定义add_function Z { (!A) | (!B) }是等价的。
add_table {
A B : Z
0 0 : 1
0 1 : 1
1 0/1 : 1/0
}
add_table和add_function组合使用的栗子
add_table {
EN SE CK : IQ : IQ
- - 1 : - : n
0 0 0 : - : 0
1 0 0 : - : 1
1 1 0 : - : 1
}
add_function Q { IQ&CK }
add_flop的栗子
add_flop IQ IQN !CK { D&SEL | IQN&!SEL } -clear !RB -preset S-preset_clear {1 0}
add_function Q IQ
To be continued…
长按二维码关注我们
点一下"在看"再走吧