数字模块前端DC+电路Spice仿真

本人学生,凝聚态物理专业,方向是IC(FPGA)的辐照单粒子效应。最近老板有个项目,涉及到用spice仿真,想在此分享一下自己摸索这一流程的经验。由于第一次涉及到这部分内容(虽然是很简单的工作),所以这个流程也是走的不是那么顺利,希望能让看到这篇文章的伙伴少走点弯路。

这篇文章的流程很简单,后面我会细化每个部分的工作内容,也会更新文章。

DC是synopsys公司的RTL编译器,可以将RTL映射成对应工艺下的gate netlist; spice就是仿真电路模拟器,这两个可以自行百度,就不在这给大家介绍了。

首先最重要的是你要有某个工艺下的库,并且提前将库成功导入到virtuoso里。这里我用的是NCSU的45nmFreePDK。

进入正题,dc综合+spice仿真的流程如下,就拿我自己写的非常简单的测试代码举例了:

DC综合

1. 首先要根据任务需求设计HDL代码。为了说明流程我就放一个简单的移位寄存器,便于理解

数字模块前端DC+电路Spice仿真

2. 下面运行DC。因为gui界面适合图形化演示,所以这里就不用tcl跑综合流程了。

linux下DC的gui界面命令是design_vision。这一步要设置相关工艺库的.db文件的路径(如果有.lib也可以,因为.lib可以转成.db格式),这样才能link并且compile design。

        首先在.synopsys_dc.setup这个文件里(没有这个文件就要自己创建了)设置各种文件,包括DC自带的lib, target.lib, link lib, symbol.lib 以及synthetic.lib等等的路径,具体大家可以去网上找找,这个文件里的tcl都是有代码模板的。如果你想图省事,只想先把流程过一遍,可以直接在菜单栏file-setup里面设置,打开以后是下面这张图这样,因为我自己写的tcl,所以一启动DC这些路径就自动设置好了。带红色“*”的三项是必须设置的,具体的library是干什么用的可以百度了解一下,就不给大家讲解了。最后一个是IP库,像我这里写的简单的移位寄存器代码根本用不到IP,添加与否还是要根据自己的需求而定。

数字模块前端DC+电路Spice仿真

 3. 设置好库路径后就要读入设计。选择file菜单下的read或者elaborate & analyze,我随便选择的read,因为这三个读入方式都满足我的需求。读入设计后DC界面的log栏会提示你代码有没有问题,注意一下是否有warnings以及errors。

        在DC中非常重要的就是各种约束的建立,包括芯片工作环境、电压、温度,IO负载,扇出等等,但是为了摸索流程,我就没有进行约束,等后面项目要求出来了再设计就可以。

4. 下一步选择file-link design,这样你的设计就和工艺库link上了。如果你想查看电路的schematic,可以按下图的顺序操作数字模块前端DC+电路Spice仿真

5. 之后就是综合了,点击菜单栏中的design,选择compile design,然后再点击check design检查一下编译有没有问题,没问题的话就可以点击file-save as保存网表了。为了进行后面的spice仿真,在format一栏选择保存成verilog格式。

数字模块前端DC+电路Spice仿真

Spice仿真

1. spice仿真有两种方式,第一种是virtuoso的ADE,它是gui界面,方便一些;第二种是用synopsys的Hspice,是纯用脚本跑的。Hspice貌似要用mentor的calibre中的v2lvs把网表转成.spi作为输入。第一种方法比较简单,但是这两种方法得到结果的具体差别我还没搞清楚。这里为了操作方便可以选择第一种。

2. 打开virtuoso后,我们要做的第一件事就是通过file-new-library新建一个库,用来将DC输出的网表导入进来。

数字模块前端DC+电路Spice仿真

这里我新建的一个库叫test,建好库后会弹出一个窗口,选择第三项:“attach to an existing technology library”,之后在新出现的窗口中选择要映射的库,比如我的就是"NCSU_TechLib_FreePDK45"。

数字模块前端DC+电路Spice仿真

 3. 然后在下图窗口中点击file-import-verilog。

数字模块前端DC+电路Spice仿真

会出现下图的窗口,只需要管前四项即可。第一栏中选择的是DC综合出的.v网表文件,第二栏选择新建的test库,第三栏填上你的工艺库名字,第四项默认。

数字模块前端DC+电路Spice仿真

4. 这时我们发现网表成功的导入到了virtuoso里。

数字模块前端DC+电路Spice仿真 双击schematic进入下图窗口数字模块前端DC+电路Spice仿真

由于我的库是academic library,内置的symbol什么的都不全,所以我们还得改一下schematic,通过create instance添加vdd以及gnd,这里要注意全局变量vdd!gnd!和普通的vdd以及gnd的区别。

5. 点击上图的launch-ADE L,会打开下面这个界面。spice仿真可以开始了。要设置的就是下图中的simulator/directory/host, model libraries, temperature, stimuli.

数字模块前端DC+电路Spice仿真

首先simulator可以选择cadence自带的spectre。当然如果你的synopsys的Hspice成功嵌入到了cadence里,也可以选择比如hspice或者hspiceD。

model libraries选择你的库文件中的spice model,路径一般是这样:../xx/models/hspice/。

temperature就很简单了,不说了。

stimuli要设置的是模块的输入,以及全局信号(比如vdd这种)。

数字模块前端DC+电路Spice仿真

6. 最后还要在analyses下选择choose,用来设置仿真类型

数字模块前端DC+电路Spice仿真

这里有很多选择,我们可以选择tran(瞬态仿真),并填上相关信息。

 数字模块前端DC+电路Spice仿真

7. 各个参数设置完之后,我们还要选择电路中的节点观察其中的电流/电压变化。点击outputs-to be plotted-select on design,会自动跳转到ADE的schematic界面。我们可以鼠标点击net或者pin,选择net的话,可以观察到电压的波形;选择pin的话就是看电流。

数字模块前端DC+电路Spice仿真

 比如我选择的是移位寄存器的输入din的net以及第一级触发器输出的net。

数字模块前端DC+电路Spice仿真

8. 选好后我们再进入ADE界面,点击上图中的运行按钮,就可以出spice仿真结果了,如下图所示。

数字模块前端DC+电路Spice仿真

至此,这一流程就是我最近一周多在网上调研以及和周围的人讨论摸索得到的一些方法,如有不对还请各位指正。(抱拳)

上一篇:LDO和DC-DC


下一篇:(7)漏洞注入