前言
提取寄生参数以进行后仿真是电路设计的必由之路。
一、寄生参数提取的基本介绍
在calibre PEX流程中,常见的输出方式有calibre view和spectre netlist。
前者直接生成一幅直观的电路图,甚至器件的位置都和版图大致对应,非常方便观察内部的节点,但缺点是生成这么大一幅电路图,很容易卡顿;而仿真时要将这么大一幅电路图生成netlist,也会很卡顿。
注:最重要的是很多low工艺不提供接口文件,无法生成calibre view。
后者是以网表文件形式存储寄生参数,不是很直观,但是速度相对较快。以最复杂的r+c+cc为例,输出方式选取为spectre netlist时,会生成三个文件。top.pex.netlist, top.xxx.pxi, top.xxx.pex.
其中netlist后缀的文件是顶层文件,列出了电路中用到的所有器件。
二、如何用生成的netlist仿真?
和AMS混仿相似,需要为已有的仿真电路建立config,然后在config中将某个模块的view设置为spice文件:
其后的流程和正常仿真相同。
三、常见的问题
3.1 生成的netlist端口不对应
pex生成spectre netlist时,默认的端口顺序是按照字母进行排列的。这就会导致端口不对应的问题。按照下图方式进行设置即可:
3.2 仿真时不支持总线
有的电路中存在总线端口,例如test<3:0>,仿真时可能会出错。解决方法是先打开config的properties:
然后在下图中输入-auto_bus:
四、屏蔽部分模块
后仿真可能会看到性能的衰退,例如在一个SAR ADC中,电容阵列版图必然存在着不对称的寄生,导致后仿真性能下降。但是,电容阵列的失配将在测试时被校准,仿真时不必在意。因此,后仿时需要屏蔽掉电容阵列的寄生来评估性能。
为了屏蔽某个模块的寄生参数,首先选择gate level格式:
然后配置xcell文件,例如要屏蔽cellA这个模块,xcell文件里这样写即可:cellA cellA.
此时,生成的netlist文件中,只会对cellA这个模块进行例化。注意此时并不能正常仿真,因为生成的netlist只是例化了cellA,并没有给出cellA内部的电路。为了正常仿真,在ADE窗口-setup-simulation file添加cellA的spectre网表。
五、观测内部节点
按照如上的方式进行后仿真时,所有的内部节点均被“埋在”了pex生成的netlist中,无法用ADE–>OUTPUT–>Saved这种方式直接保存。
此时需要用到deepprobe来观测内部节点,具体用法不再赘述。
如果采用AMS仿真,问题会稍麻烦。此时AMS仿真器生成的网表格式如下:
module top_testbench:
port:
I0
I1
...
I_pex(xxx xxx xxx)
...
endmodule
include I_pex.netlist
概括来说就是:Verilog格式的网表调用spectre格式的网表。
笔者目前使用的cadence版本中,deep probe不支持probe这种形式的内部节点。为解决这个问题,需要将I_pex.netlist中需要探测的节点做成端口,在顶层的top_testbench中增加一根线来连接到I_pex.netlist中新增的端口。
例如要观测I_pex.netlist中的test001节点,此时需要在I_pex.netlist中手动增加一个test001端口,再将上述网表改为:
module top_testbench:
port:
wire test001;
I0
I1
...
I_pex(xxx xxx xxx test001)
...
endmodule
include I_pex.netlist
此时,deepprobe即可探测test001节点的电压。