Cadence IC设计实验
中国科技大学
电子科学与技术系IC教研组
黄鲁 胡新伟 白雪飞
2005年10月
(实验例题由Cadence 公司提供)
致 谢!
电子科学技术系刘烃海、矫逸书、祝超、梅汪生等同学帮助编写了部分实验章节;信息实验中心屈玉贵主任和方毅、周远远、刘贵英等老师不仅为实验提供了技术支持,准备好EDA软件licence、配置了计算机和软件运行环境,而且热情参与了本实验教学。对于上述老师和同学们的辛勤工作和所做出的贡献,在此一并表示衷心地感谢!
预备知识:UNIX
你掌握UNIX操作系统的基本命令吗?下面几条常用命令可能会对你有用处。提醒一下,UNIX命令是区分大小写的。
查文件:ls (不显示隐含文件)、la (或ls –a,显示所有文件)、ls |mpre(帧显)、la |more 删文件:rm 文件名
建新目录:mkdir 目录名
删目录:\\rm –r目录名 ( 慎用!!!)
拷贝:cp 源文件名(含路径)目标文件名(含路径),
例 将isc用户的abc.suf 文件拷贝到自己的当前目录下:cp ~isc/abc.suf . 解.tar打包文件:tar vxf 打包文件名 解.tar.Z压缩文件:tar vxfZ 压缩文件名 文件改名: mv 原文件名 新文件名 查命令与参数功能:man 命令
***************************************************************************
规定:本实验教材中红色为键入命令或字符,兰色为菜单项,紫色为功能键;“单击”指鼠标左键按下一次。
****************************************************************************
1
实验一、Virtuoso Schematic Editor
实验目的:掌握电原理图(schematic)设计输入方法。
边学边做
[1]启动IC Design 软件:
开机后运行Exceed进入服务器SOLARIS登录界面,输入用户名和密码 (由系统管理员提供);
点击一下cpu disk 菜单项上方的三角箭头,点击This Host出现Terminal窗口,(或点击Console出现Console窗口);
cp /eva01/cdsmgr/ training_IC_data/SchemEd.tar . (提醒:最后是个小点,稍等) tar vxf SchemEd.tar (稍等) cd adelabic5
icfb & (或icms &,你知道后缀&的作用吗?在UNIX命令后加&表示后台运行)
若出现“What’s New”窗口,关掉它。
出现“icfb-log:/…”窗口(CIW:Command Interpreter Window)了吗?
[2]建立新库、新单元以及新视图(view): 在CIW中,File->New->Library,
在弹出的“New Library”窗口,Name栏中:mylib 选中右下方:* Don’t need techfile OK
查看CIW窗口:Tools->Library Manager,在Library中应有mylib,单击它。 在Library Manager 窗口,File->New->Cellview,
在弹出的“Create New File”窗口Cell Name栏中,nand2 Tool栏中,选Composer-Schematic OK
[3]添加元件(实例instance)
在弹出的“Virtuoso Schematic Editing:…”窗口中,左边为工具栏,选instance 图标(或i) 单击“Add instance”窗口Library栏最右侧Browser,
弹出“Library Browser-…”窗口,Library选analogLib,Cell选nmos4, View选symbol 鼠标回到“Add instance”窗口,Model name栏:trnmos, width: 3.0u , Length: 0.5u,Hide 在“Virtuoso Schematic Editing:…”窗口, 鼠标左键单击一次,间隔一定距离再单击一次,这样就增加了2个nmos4元件,ESC(试一试:先选中一个元件,再q ,查看/改变属性)。
仿照上述方法,增加pmos4元件。在“Add instance”窗口,Model name栏:trpmos, width: 2.0u , Length: 0.5u;放置2个pmos4,ESC。(试一试热键f,[,]的功能)
[4]添加管脚(PIN)
2
选“Virtuoso Schematic Editing:…”窗口左边工具栏中的Pin图标(或p)
在“Add Pin”窗口中,Pin Names:INA INB,Direction选input, Usage选schematic,Hide 在“Virtuoso Schematic Editing:…”窗口, 鼠标左键单击一次,间隔一定距离再单击一次,放置2个输入PIN, p,在“Add Pin”窗口中,Pin Names:OUT,Direction选output, Usage选schematic,在“Virtuoso Schematic Editing:…”窗口放置输出PIN,
[5]添加电源和地:
i (或单击instance工具图标)
弹出“Add instance”窗口,Browse,Library选analogLib,Cell栏:vdd, View选symbol 在“Virtuoso Schematic Editing:…”窗口放置vdd,
回到“Add instance”窗口,Browse,Cell栏:gnd, 在“Virtuoso Schematic Editing:…”窗口放置gnd,
ESC , Cancel掉“Add instance”窗口。
[6]摆放元件并加网线:
参照下图放好元件(symbol):(移动用m键,删除用Delete键,取消命令用ESC键)
选“Virtuoso Schematic Editing:…”窗口左边工具栏中的Wire(narrow),连好网线,ESC
[7]保存文件:“Virtuoso Schematic Editing:…”窗口左上角Check and Save 工具。
DIY(Do It Yourself)
3
在mylib库中建立amplifier单元(Cell)如下图所示。
图中所有单元来自analoglib库,参数如下表: Cell Name
属性properties
npn For Q0,Q1:Model Name=trnpn pnp For Q2,Q3,Q4:Model Name=trpnp pmos4 nmos4 pmos4 cap vdd, vss
PIN管脚: Wire Name
输入管脚: iref, inm, inp, 输出管脚: out vdd! , gnode
For M1: Model Name=trpmos, Length=8u, Width=iPar(“l”)*16 For M2,M5: Model Name=trnmos, Length=10u, Width=100u For M3: Model Name=trpmos, Length=iPar(“w”)/16, Width=128u Capacitance=CAP (设计变量) 注意 vss是负电源,不是gnd
res Resistance=2.5K
注意:你画的schematic电路中,双极晶体管Q和FET管M的下标编号可能与上图不同,可用q 查看/改变属性,另外可能使用 m (移动),r(旋转),f(全屏),先m 再 shift + r (左右翻转),先m 再 Ctrl + r (上下翻转)等命令。 ESC(终止操作)
标注线网名:用Wire Name 工具(或l)将M1与M3的衬底连线、M2与M5的栅极连线
4
分别标注为vdd!和gnode。
如发生了错误删除,用“Virtuoso Schematic Editing:…”窗口左边中间的undo工具(或u),注意:只能恢复前一个被删除的对象。最后check and save.
层次化设计——symbol生成 [1]symbol生成
进入“Virtuoso Schematic Editing:mylib nand2 schematic”窗口。
Design -> Create Cellview->From Cellview
在Cellview From Cellview窗口,From View Name栏为:schematic,Tool / Data Type栏为Composer-Symbol。 OK
在“Symbol Generation Options”窗口,单击Load/Save按纽,OK
出现“Virtuoso Schematic Editing:mylib nand2 symbol”窗口,Design->Check and Save
改变symbol形状:用m命令将Symbol的上边界位置和INA管脚向上移动一网格,得到下图:
用m命令将3个cdsParam(n)移到方框外面的下方,将cdsName()移到方框外面上方,将字符OUT移到方框外面右方,删除内部绿色方框。
参照下图,单击菜单Add -> Shape -> Circle,加个小圆圈,Add -> Shape -> Arc,加个圆弧(先确定上下2点,如出现angle not allowed不必紧张,稍微移动鼠标试一试,你会发现如何画弧),用m将左边的红色外框右移(缩短原symbol外框),2个PIN以及连线(INA和INB)同样右移,用Line工具画出缺少的3边。上述步骤中,均使用ESC取消操作命令。 画好后,Design -> Check and Save
5
[2]创建amplifier的symbol:
仿照前述步骤,得到如下symbol:
提示:在“Symbol Generation Options”窗口,将iref 管脚(Pin)设置为Bottom Pin。
然后删除cdsParam(3), r旋转pin名iref,
(选做)删除红色外框,选择Selection Box工具,在“Add Selection Box”中,Automatic
添加Text:Add -> Note -> Note Text,在“Add Note Text”窗口的Note Text文本框中:Amp 将鼠标移至“Virtuoso Symbol Editing:mylib amplifier symbol”窗口,在你希望的位置单击,回到“Add Note Text”窗口,Cancel。 Save。
(如果你无法画斜线,鼠标右键点击1、2次就可切换成功)
6
结果如下图所示:
实验结果查验:
1.申请教员或助教查验你做的实验结果。
2.Close 所有窗口。
注意:你所画的部分电路,以后在spectre仿真实验时会用到。因此不要删除!
7
Cadence IC设计实验
实验二、 Spectre Simulation
实验目的:掌握电路特性仿真方法
进入Cadence系统:
cd adelabic5
icfb &
实验内容与步骤: 一、nand2电路仿真
[1]、创建激励信号电路模块:
在CIW窗口(icfb-Log:/…):Tools->Library Manager,弹出Library Manager 窗口,在Library中应有mylib,点击它。
File->New->Cellview,
在弹出的“Create New File”窗口Cell Name栏中,testnand2 Tool栏中,选Composer-Schematic, OK
在“Virtuoso Schematic Editing:…”窗口中,按下图加入单元(Instance)、Pin并连线。
点击Check and Save
图中所有单元来自analoglib库symbol,参数如下: Cell Name vpulse vpulse cap
Pin管脚:
Name: INA INB OUT, Direction: inputoutput
[2]、编写仿真文件
1.设置仿真环境。点击Tools->Analog Environment
2.设置仿真模型文件路径。在弹出的“Analog Design Environment”(ADE)窗口,点击Setup->Simulation Files
在Include Path中加上 ./Models , ->OK
CDF Parameter
V0: Volt 1:0, Volt2:3, Delay:10n, Rise:500p,Fall:500p,width:10n,Period:20n V1: Volt 1:0, Volt2:3, Delay:15n, Rise:500p,Fall:500p,width:20n,Period:40n For C0: Capacitance: 100f
vdc For V2: DC votlage:3, Number of noise:0 (前面所有电源此项均为0) vdd,gnd
3.输入模型文件名。在ADE窗口,点击Setup->Model Libraries 在Model Library File栏中:allModels.scs,->add->OK
4.选择需要查看的信号。ADE窗口,点击Outputs->To Be Plotted->Select On Schematic 在Schematic原理图中点击3个Pin的连线(线会变颜色)。相应地,此时ADE窗口Outputs框中就有了你所要观察的信号。
5. 保存仿真激励文件。点击ADE窗口的Session->Save State
Save As栏:state1 OK
(可以关掉“Analog Design Environment”窗口)。
[3]、将激励模块加入被仿真电路。
1.回到Schematic窗口,生成testnand2单元的symbol Design -> Create Cellview->From Cellview
在Cellview From Cellview窗口,From View Name栏为:schematic,Tool / Data Type栏为Composer-Symbol。 OK
在“Symbol Generation Options”窗口,将“Top Pins”栏中的“OUT INB INA”拷贝到Right Pins栏中,删除Top Pins栏中的原来内容,OK
出现“Virtuoso Schematic Editing:mylib testnand2 symbol”窗口,Design->Check and Save, 退出testnand2的symbol窗口。
2. 在“Library Manager”窗口,打开mylib中你在实验一画好的nand2原理图,添加
testnand2元件,按下图连线。
保存文件Check and Save。 (不要退出Schematic窗口)
[4]、仿真 1.“Virtuoso Schematic Editing:…”窗口,Tools ->Analog Envienment
2.加激励。弹出ADE(Cadence Analog Design envirnment)窗口,Session -> Load State。 在“Loading State”窗口,Library选mylib,Cell选testnand2, Simulator选spectre; State Name 框中选:state1, OK
3.设置分析模式和仿真时间。点击ADE窗口的Analyses->Choose Analysis选项中tran应有效;Stop Time: 200n Enabled有效, OK
4.计算。点击ADE窗口右边Netlist and Run,弹出“Welcome to Spectre”窗口,OK 你应该看到spectre.out文件和仿真波形Waveform。
5.选择Waveform窗口上方菜单Axes->Strips, 各信号波形分开显示。 6.用鼠标拖Waveform Window的边界,放大显示区域。 7.试一试,怎样看波形数据?
完成后,在ADE窗口,Session -> Quit
二、amplifier电路(运算放大器)仿真
[1]、打开你在实验一画好的amplifier原理图,选中电容,Q,Capacitance值设为800f,Save and Check退出。
[2]、新建testamplifier单元
1、查看CIW窗口:Tools->Library Manager,在Library中应有mylib,点击它。 在Library Manager 窗口,File->New->Cellview,
在弹出的“Create New File”窗口Cell Name栏中,testamplifier Tool栏中,选Composer-Schematic OK
2、添加元件如下图:Amp 单元(Cell)是你在实验一画好的amplifier Cell的Symbol,其余单元在analogLib库中。
图中除amplifier外所有单元来自analoglib库symbol,参数如下: Cell Name
CDF Parameter
vdc For V0、V1:DC votlage:5
vsin For V2: AC phase:0,Offset:0,Amplitude:100m,Frequency:1M, delay:0 idc For I0:DC current:500u,
res For R0、R1:resistance分别为10K和100K vdd,gnd,vss 正负电源、地
Pin管脚: Wire Name
Name: out, Direction: output
Inm, inp, ref (目的是查看仿真波形时,一目了然;否则信号为netXX)
3.将原理图check and save! 4.(选做)选Amp模块,e,Descend窗口OK,进入Amp模块(amplifier),自选一个你希
望检查的网线,q查看网线属性,如果net Name是netXX, 如何将它改为tst?
Design ->Make Editable,左边工具图标全有效了,恭喜你搞定了! Save and Check
CTRL+e,退回到上一层。Save and Check
[3]、设置仿真环境
1.点击Tools->Analog Environment,弹出ADE窗口 2.点击Setup->Simulation Files 在Include Path栏中 ./Models ->OK 3.点击Setup->Model Libraries
在Model Library File下输入:allModels.scs->add->OK 4.点击Outputs->To Be Plotted->Select On Schematic
在原理图中点击与Amp单元4个管角相连的信号线(假设是你希望观察的信号),线会变颜色,端口被圈;选Amp模块,e,Descend窗口OK,进入Amp模块(amplifier),点击gnode线,再选中一个你希望检查的网线;
5.此时ADE窗口Outputs下已有你需要观察的信号,点击Session->Save State Save As:state2->OK
[4]、仿真运算放大器的闭环增益 1.(如未退出ADE,本步可以不做)在ADE(Cadence Analog Design envirnment)窗口,Session -> Load State。
在“Loading State”窗口,Library选mylib,Cell选testampifier, State Name为state2, OK 2.点击Analyses->choose 将stop time从100n改为10u ->OK
3.点击ADE窗口右边Netlist and Run,弹出“Welcome to Spectre”窗口,OK 你应该看到spectre.out文件和仿真波形Waveform。
4.在Waveform窗口,查看波形,Axes -> Strips, 各信号波形分开显示。
三、DIY
]1].仿真运放的开环共模增益
(请不要先看下面的提示,自查一下自己的掌握程度) 提示:
1。将testamplifier单元(Cell)copy 成amptest Cell。
2.修改amptest,删除R0和R1,Amp模块的2输入短接; 3.将正弦电压源改为vpwl,类似HSPICE,第1个时间电压对为(0,-5),第2对为(10u,5)。 [2]。(选做)运放的开环差模增益如何仿?
Cadence IC设计实验
实验三、 Virtuoso Layout Editor
实验目的:使用EDA工具进行版图设计。
运行Cadence版图设计软件:
cp /eva01/cdsmgr/training_IC_data/VLE_5_0.tar . (提醒:最后是空格和小点) tar -vxf VLE_5_0.tar cd Layout
点击屏幕左下方Home Folder,在弹出的“File Manager”窗口一直找到你个人Layout目录下的.cdsinit 文件 (先要将View菜单中的Show Hidden Object设置有效), 删掉下列2条指令前面的分号“;”使得你可以使用快捷键: ;load(prependInstallPath(“samples/local/schBindKeys.il”)) ;load(“leBindKeys.il”)
layoutPlus & (注意字母的大小写! 或icfb &)
实验内容与步骤
边学边做:画INV版图
一、根据设计规则画nmos版图:
[1]、在CIW窗口中,选择File->Open, (若无nmos Cell,则建立New) Library Name design Cell Name nmos View Name layout
OK。
[2]、画poly:在LSW窗口中选择poly drawing层作为当前层
(LSW上方有一栏提示,画任何层之前必须将该层设为当前层。当前层必须可见。 LSW提示:AV:全可见,NV:全不可见;AS:全可选,NS:全不可选。 对于某一层,鼠标中键:可见/不可见,鼠标右键:可选/不可选)
[3]、点击 Create->Path命令;(本实验使你掌握菜单命令,实际上你可以使用图标工具和快捷键完成很多操作)
[4]、单击左键选择一个起点。(此时窗口上方中间的DX, DY坐标变成0,0)
松开左键,向上移动鼠标至DX, DY坐标变成0,4.8;按回车键或者双击鼠标完成它。
提示:你可以用标尺确定长度,点击Windows->Create Ruler;如果你想删除标尺,
Windows->Clear All Rulers。它们的快捷键是什么?
[5]、画ndiff:LSW中选择ndiff drawing层作为当前层,点击Create->Rectangle命令。 [6]、单击左键选择一个起点(注意:此时窗口上方的DX, DY坐标变成0,0); 松开左键,移动鼠标至DX, DY坐标变成4.8,3.6;按回车键,或者双击鼠标。ESC [7]、Edit->Move移动ndiff层,参照下图(DRC规则)把它放在合适的位置。 nmos设计规则(允许的最小尺寸):
(1) ndiff overlap of contact 0.9u
(2) contact minimum width 0.6u (3) contact spacing 0.6u
(4) contact to gate spacing 0.6u (5) poly extension 0.6u
(6) metal overlap of contact 0.4u (7) Device length 0.6u
如果画的尺寸不对,选择Edit->Stretch可以改变大小。
以上各个操作命令都可以选用“Virtuoso Layout Editing”窗口左边工具图标完成。
说明:本设计规则仅是版图实验的假设数据,并非0.6um真实工艺。
现在,你完成的版图应如下图所示:
[8]、画nmos器件源、漏极的外连接contact:
metal1 drawing层作为当前层,在源、漏极画尺寸为1.4um*2.6um的矩形,
contact drawing层作为当前层,在源、漏极各画两个尺寸为0.6um*0.6um的contact, (你也可以先画一边,再用左边工具栏中copy完成另一边)
[9]、Save存盘,关闭nmos版图窗口。
二、根据设计规则画pmos版图。 设计规则:pmos
(1) nwell overlap of pdiff 0.4u (2) pdiff overlap of contact 0.9u (3) contact minimum width 0.6u (4) contact spacing 0.6u
(5) contact to gate spacing 0.6u (6) poly extension 0.6u
(7) metal overlap of contact 0.4u (8) Device length 0.6u
在CIW窗口中,选择File->New-> Cell View,然后输入以下内容 Library Name design Cell Name pmos Tool Virtuoso 这时View Name栏中自动为:layout
OK。
参照下图画pmos版图。
部分矩形的最小尺寸为(最好按最小尺寸画,虽然你可以画得稍微大一些): nwell =5.6um*8.0um pdiff=4.8um*7.2um metal1=1.4um*6.2um
三、完成INV(inverter Cell )版图。 设计规则:inverter
[1]打开(若无,则建立)inverter单元,放置(instance)你画好的nmos和pmos版图(在Create Instance窗口,Browse选择), 连好poly和metal1。
设:metal1最小宽度=0.8um
ndiff与nwell最小间隔=1um,本例间隔已足够。
再画一个nwell将上面metal1(vdd)覆盖(要与pmos的nwell相交叠)。
[2]、MOS衬底加电源(nwell)和地。
Instance,在pcells库中找到PTAP和NTAP,PTAP放在上图gnd金属线上,NTAP放在上图vdd金属线上。PTAP的作用是连接gnd和p衬底;NTAP的作用是连接vdd和nwell。
[3]、poly连接metal1。
Instance,在pcells库中选M1_POLY放在poly适当位置上(见上图)。
[4]、添加输入和输出PIN
1.选择Create->Pin,在Create Shape Pin 窗口Terminal Names 栏,输入:
A Y gnd vdd
然后选中Display Pin Name 按纽,如下图。
Hide
2.选择LSW窗口metal1 pin(或poly pin)为当前层,在M1_POLY上用鼠标直接画一个矩形(不要选择左边的Rectangle工具图标。若在LSW中选择poly pin为当前层,则画在poly上),此时A字符会出现,并且有一跟线连接A字符和矩形框;把A字符放到合适的位置。
3.选择metal1 pin画一个矩形在输出的合适位置,将出现的字符Y放到合适的位置。 4.同样的步骤依次放好gnd和vdd.。
Save退出inverter layout。
DIY:
根据原理图画NOR2版图
要求:1、符合设计规则; 2、版图面积尽量小。
MOS尺寸:(W/L)p=14.4um/0.6um, (W/L)n=2.4um/0.6um。
Cadence IC设计实验
实验四、Diva Interactive Verification
实验目的:掌握DRC和LVS验证方法
版图绘制后要根据foundry厂的工艺要求进行DRC(Design Rule Checker)检查,编辑好的版图必须通过LVS(Layout Versus Schematic)验证,检查是否与schematic电原理图完全一致;版图中还可能存在一些悬空的器件和线网,通过电气规则检查ERC(Electrical Rule Check)可以发现这些错误。进行LVS和ERC之前,需要用Diva验证工具中的Extract程序对版图进行器件提取;Extract还可以进行寄生参数提取,电路仿真程序可以调用这个数据进行后仿真。
DIVA工具集包括以下部分: 1. 设计规则检查(DRC)
2. 提取Extractor:包括器件提取、版图寄生参数提取(LPE)、寄生电阻提取(PRE) 3. 电气规则检查(ERC) 4. 版图与线路图比较(LVS)
预备工作:
cp /eva01/cdsmgr/ training_IC_data/DivaInt_5_0.tar . tar -vxf DivaInt _5_0.tar cd diva
实验内容与步骤:
第一部分:DRC设计规则检查
一、进入DRC菜单:
[1]、 icfb &
[2]、 在CIW 窗口(icfb-Log:/…),点击Tools->Library Manager; [3]、Library列表框中点击design;
Cell列表框中点击peakDetect;
View列表框中双击layout; (或用鼠标右键open)
(注:这是峰值检测器电路版图,你可以查看相应的schematic 了解电路原理) [4]、在出现的Virtuoso Layout Editing窗口,点击Verify->DRC…菜单。
出现下图DRC窗口:
二、查找某层(poly1层)DRC错误
[5]、在DRC窗口,点击右边的Set Switches按钮,在弹出列表中选择poly1,点击OK,再点击DRC窗口OK。
在layout窗口中高亮闪烁显示poly1错误,你也可在CIW窗口查看DRC执行结果。 [6].在Virtuoso Layout Editing窗口,点击Verify->Markers->Find…。弹出Find Marker框。
[7]、在Find Marker窗口置Zoom to Markers按纽有效,点击Next。
弹出marker text 窗口显示错误信息,如果看不到错误形态,按下shift+f。
[8]、点击Virtuoso Layout Editing窗口左下方 Ruler工具或k(按ESC取消工具),
测量高亮边框poly1宽度,比较marker text 窗口显示的错误信息,按shift+k取消版图上的尺寸标记。 在Find Marker窗口:
点击Next寻找下一个错误f位置(Previous是查看前一个错误)。 连续点击Delete,直到不显示错误为止(屏幕不再改变), 点击Cancel,f全屏,高亮闪烁的错误提示消失了。
注意:你并没改正版图错误,只是将错误提示delete掉了,若再次做DRC会发现错
误依旧。
三、另一种查找DRC错误的方法
[9]、选择Verify->DRC。
[10]、点击Set switchs 按钮
在列表中选择allInterconnect,->OK,DRC窗口 OK。 [11]、DRC结束后(出现高亮闪烁的错误提示),选择Edit->search。 在Search窗口:
设置Zoom To Figure 按纽有效
在Search for 菜单:any shape, 在 in 菜单: current cellView [12]、点击Add Criteria, Search窗口中间出现一新选择行。
位于Search for下面最左边的选框内容改置为property,完成表格如下:
property name:drcWhy = = metal1
点击Apply。屏幕将显示一个metal1错误,由于你的设定,Search命令将只查找metal1 错误,总的错误数在Figure count栏显示。 [13]、点击几次Next
[14]、 点击Cancel, f全屏。
四、标注不进行DRC或Extracting的单元
[15]、在layout窗口找到单元fiducial (假设它是个测试基准单元)
Ctrl+f(仅显示顶层Cell),在底部区域找到fiducial单元(不要与右边的fiduciald单元弄混了);
[16]、点击选中fiducial单元,shift+x进入fiducial单元;(稍等)
[17]、通过添加ivIncludeValue性质阻止DRC对fiducial单元进行检查:
A. 在layout窗口中按下shift+q,弹出Edit Cellview Properties窗口 B. 置property按钮有效(黑) C. 点击Edit Cellview Properties窗口中的左下方Add按钮 D. 在弹出的Add property表格设置如下: Name ivIncludeValue
Type Int
Value2
E. OK
F. 点击Edit Cellview Properties窗口中的OK; G. Save 保存fiducial单元版图; H. shift+b,返回到上一层版图。(稍等) [18]、在Layout Editing窗口,Verify—>DRC; [19]、将DRC表中的Inclusion Limit设置为0。 [20]、OK。
查看fiducial单元,不再有错误提示出现。
(注:fiducial单元是一个包含了许多不符合设计规则的测试单元,这个单元与电路没有
任何联系,在实际的芯片制造过程中,会有这样的单元存在,这样的单元的作用是什么,你能想到吗?)
试一下f,Shift+f,Ctrl+f有什么区别?
五、改正DRC检查出来的错误
[21]、根据前面介绍的第一种方法找到poly1的错误。 [22]、Ctrl+(f仅显示顶层Cell),找到control单元,点击选中control单元,shift+x进入control
单元。
(注:错误在in2和vcap中间的control单元中,必须进入control单元才能修改错误) [23]、再次Verify->DRC, 错误原因是什么?
CIW中提示你有下列错误:
Minimum poly1 width = 0.6 (单位um) Minimum poly1spacing = 1.0 Poly1 extension past pdiff = 0.4 用标尺量一下,错误原因是什么? [24]、鼠标左键选中高亮的poly1,q
[25]、在Edit Path Properties窗口,将Width栏0.4(u)改为0.6。OK [26]、Save
[27]、CIW第3个错误提示是指,poly1超过pdiff的最短露头应为0.4u m,而NAND2单元
中左边poly1超过pdiff的露头仅为0.3um,需要改正它。
这个错误出现在control单元中的NAND2单元中,所以必须进入NAND2单元修改。
1)。f(全屏),然后Ctrl+f(仅显示顶层Cell),找到NAND2单元,点击选中NAND2单元,shift+x进入NAND2单元。 2)。选中出错poly1,q。在Edit Rectangle Properties窗口,将Top栏的数据增加0.1。 OK。 3)。用标尺(k)量一下poly1露头是否增加到0.4了。Shift+k取消标尺。 [28]、Save 保存单元版图;
[29]、shift+b,返回到上一层版图(control单元)。Shift + f。 [30]、Verify->DRC,(仍然是查poly1),此时CIW只提示还有1个错误:
Minimum poly1spacing = 1.0。
用标尺量一下出错处的两个poly1之间的间距仅有0.4。
[31]、用标尺标出Path移动的位置,ESC,将出错poly1 Path中心线往上拉(s)到正确位置。
注意:选中心线是件不容易的事,你可以先将点击poly1 drawing为LSW当前层,然后点击NS置所有LSW层不能选,再用鼠标右键点击poly1 drawing使其可选。在layout窗口,shift+r,点击出错poly1直到它边沿变成粗橘红色(不是白色),s,移动鼠标到中心线上就可以拖动了。
LSW中AS。
要特别当心,或许你会产生新的错误,比如移动了其它对象,就用ESC取消。 shift+k(取消标尺)-> Verify/Marker/Find/Delete(取消错误提示)->Save
[32]、,shift+b回到顶层原理图,再对poly1进行DRC,,CIW窗口提示:Total errors found: 0 Save
DIY
对metal1和metal2进行DRC并改正错误。
(提示:metal1有一个错误,metal2有两个错误)
第二部分: Extraction
一、运行extraction
[1]、在peakDetect版图窗口选择Verify->Extract… [2]、设置Extractor表格:
ExtractMethodflat [3]、点击OK。Extraction开始,在运行过程中你可以在CIW窗口看到运行情况,你看到的最终信息为:
Total errors found : 0
生成peakDetect单元extracted View。
[4]、将peakDetect版图窗口最小化,留作以后使用。
二、查看Extracted视图
[5]、打开peakDetect 单元extracted视图
[6]、将in2和vcap压焊管脚(PIN方块)之间的control单元放大,方法是用鼠标右键按住拖出一长方区域,然后松开鼠标。你可以看到pmos,nmos器件符号,表明设计已经被提取,进一步放大符号,可以看到器件的参数也已经被提取; [7]、按下e [或Options->Display。。。]
[8]、在Display Options表中,选中Display Control段的Nets,点击Apply
从器件引脚出发的飞线说明器件的连接也已经被提取
[9]、如果已经看到飞线,关掉刚才选中的Nets选项,点击OK [10]、f 全屏
[11]、选择Verify->Probe…,
注意:只有Extracted和schematic视图可以进行probe [12]、用鼠标进行网络探测(方法一)
1) 。在弹出的Probing窗口中点击一下Add Net 2) 。点击extracted视图中vinput压焊管脚,整个vinput网络被高亮显示出来 [13]、用名字进行网络探测(方法二):
1)。点击Add net 2)。在CIW窗口(icfb-log:/。。。)键入“vdd!”(包括引号),Enter
整个vdd!网络被高亮显示出来
[14]、 解释探测结果 a.选择On CIW选项进行解释,所有的解释将显示在CIW窗口 b.点击Probing窗口中左下方Explain
c.点击vdd!压焊管脚 CIW窗口中显示网点的名称: Object type : net Object name : /vdd! [15]、删除探测结果 a.点击Probing窗口 Remove Nets b.点击vdd!,所有关于vdd!的显示被取消 c.点击Remove all,所有的高亮显示被去除 [16]、Probing 窗口Cancel。
第三部分: LVS
一、运行LVS
[1]、打开peakDetect单元的schematic,在extracted视图选择Verify->LVS, 为了方便你操作,将下列几个窗口排列成:
Schematic extracted CIW LVS 表格
[2]、在LVS 表格
在schematic和extracted下面,用Browse设置好你打开的Labrary、Cell和
View。
检查LVS表格是否如下设置:
Run Directory:LVS
Rules File :divaLVS.rul
Rules library : design
[3]、点击Run,稍等;弹出Analysis Job Succeeded对话框,点击OK。
二、察看LVS运行结果
[4]、在LVS表格中点击Info,弹出Display Run Information表格。
[5]、点击Log File。出现一个文本文件si.log,在文件的最后有错误报告。 [6]、关掉Log File,并将 Display Run Information表格cancel。
(以下选做)
三、查找Unmatched Device 和 Terminals 错误
[7]、在LVS表格点击Error Display
[8]、把光标移到Extracted版图窗口,按下Esc,将extracted窗口设置为活动窗口 [9]、在LVS Error Display表格:
1)。选中左下角None,清除原选项 2)。Unmatched 栏:instances和terminals置为有效 3)。Display 栏:all
在extracted版图中不匹配的PIN(terminals)和器件vss!,gnd!和vdd!,以及fiduciald单元中的nmos和pmos被高亮显示;
注:在不匹配错误中,有工艺测试基准单元(fiduciald)而引起的虚假错误。 [10]、在LVS Error Display表格中点击Explain,然后点击任一个高亮显示器件; [11]、点击Info在LVS表格,弹出Display run information表格。
[12]、点击Extracted段中的Bad Terminals;出现一个含有坏接线端信息的文本文件。
[13]、浏览一下文本,然后关掉它。
[14]、在LVS Error Display表中,点击Clear Display
[15]、将LVS Error Display 和Display Run Information表格Cancel。
四、排除对fiduciald基准测试单元的检测,更正虚假的不匹配错误
对fiduciald单元添加ivIncludeValue属性
[16]、打开fiduciald版图
[17]、编辑此单元的属性,将ivIncludeValue属性值设为2:
a. 在版图窗口按下shift+q
b. 在Edit Cell Properties表格中点击Property按钮 c. 点击Add
d. 设置Add Property 表格:
Name ivIncludeValue
Type int
Value2
e.在Add Property和Edit Cell Properties两个表格中分别点击OK [18]、保存并关掉fiduciald版图。
五、重新进行Extracting 和 LVS
[19]、打开peakDetect 版图
[20]、选择Verify->Extract,将Inclusion Limit设置为0,所有ivIncludeValue大于零的单元都将被排除,不被检测,点击OK。
[21]、关掉peakDetect 单元Layout版图窗口。
[22]、在peakDetect 单元extracted窗口,选择Window—>Redraw,刷新extracted窗口,确定fiducial和fiduciald单元不再显示;
[23]、在LVS表中点击Run,出现对话框, OK。
[24]、用LVS表的Info来查看运行结果,点击Log file,查看结果,有1个merged类型的net(错误)。
关掉si.log文件。
六、在原理图中查找merged net
原理图中的merged error是由于版图中有短路。
[25]、在LVS表格点击Error Display。 [26]、在原理图窗口点击,按下Esc激活。
[27]、在LVS Error Display表格,点击None,然后Merged 项选择nets,点击Display栏 First,左边的放大器和输出 net被高亮显示,在 LVS Error Display表格有解释:
Net /I32/net18 merged with /net12.
注:这个错误是由于amplifier单元版图上不小心放了一块矩形的metal1引起的。它引起了运放输出net12和amplifier(器件名I32)中net18的短路(错误连接)。你可以用q查看一下网线标号。
[28]、在原理图窗口选择出错amplifier,按下shift+x(稍等),进入下一层。 [29]、将LVS Error Display表格Cancel。
七、在schematic原理图和Extracted视图之间进行交互探查(Cross Probe)
[30]、在peakDetect单元extracted 视图,选择Verify-Probe,在原理图中按下Esc。 [31]、选中Probing表格中的cross probe matched,点击Add net,在schematic原理图中用鼠标选择出错的输出 net,在extracted 视图中的相应net被高亮显示。 [32]、用下列方法找出错误:
分析一下错误位置:参照schematic它应该在晶体管Q0的集电极和基极之间。 将extracted出错区域放大。点击Add Dev,在原理图中点击Q0;用同样方法先点击Add dev,再点击器件C0,R0,你能够判断出extracted版图中Q0的集电极和基极吗? 在extracted视图中找到短路错误了吗?(电容下面)
[33]、点击Probing表格中Remove All,然后cancel probing表格。在amplifier原理图中按下shift+b,返回到peakDetect原理图。
八、更正版图中短路错误
[34]、在peakDetect单元layout视图中删掉刚才找到的矩形metal1并Save,重新对layout进行extract,extracted版图中的短路metal1消失了;Save extracted 版图。
[35]、对extracted版图进行Verify->LVS->Run,查看info->Log file(在Display Run
Information表格中),发现schematic原理图中的merged net已经没有了。
在版图中还有1个merged net,2个rewired和1个size errors。 关掉si.log文件。
九、找到 layout中 开路错误
版图中的merged net典型错误是版图中有开路。 [36]、在LVS表格点击Error Display。 [37]、在Extracted窗口点击,按下Esc
[38]、在LVS Error Display表格,点击None,然后选择Merged 栏中nets,点击Display
栏中All,extracted版图中上方control单元中反相器的输入被高亮显示。 LVS Error Displa表格中出现下面的解释(你的net名字可能不一样):
Net /25 merged with /19 [39]、选中LVS Error Display窗口中的Auto-zoom,再点击Display栏First, Extracted 版图中Nand2 的输出和inv输入都被显示出错,说明这两个器件的连接被断开了。
[40]、在peakDetect单元layout视图中进入control 单元(shift + x),
1) 设LSW窗口 AS,AV有效,设当前层为poly1 drawing,点击Path工具图标画一polyl1(设为0.8um宽度,不低于0.6um都可)将inv输入poly1连到Nand2 的输出metal1上,
2)Instance,在design库中选M1_POLY1放在poly1与metal1交叠位置上。 正确结果如下图所示:
Save.
shift + b返回顶层版图。
[41]、改正后重新进行extract和LVS,查看log file,merged net 错误没有了。 关掉si.log文件和Display Run Information表格。
十、查找 size errors
[42]、在schematic或者extracted窗口中按下Esc,在LVS 表格点击Error Display;
[43]、在Error Display表中,点击None,Unmatched 选parameters,然后Display选All。
Size error 将在两个视图中显示出来,extracted 中间的nmos和原理图中的nmos都被高亮显示。
[44]、点击Auto-zoom,first,在LVS error Display 中将显示相关的解释: Gate width error: Sch=2e-06 Lay=4e-06,Gate length: Sch=1e-05 lay=1e-05 [45]、Cancel LVS Error Display 表格。
[46]、在peakDetect layout版图中找到错误的nmos单元,鼠标左键点击选中,按q进入编辑属性,点击Parameter,将width改为2u,OK。
[47]、此时nmos的沟道宽度已经改好,将nmos移动到合适的位置。 [48]、Save。关闭所有的窗口。
IC设计实验
实验五、Active HDL调试、仿真Verilog HDL
实验目的:熟悉Active HDL仿真软件的使用,初步掌握利用Verilog HDL设计数字系统的基本步骤。 实验内容和步骤: 一、创建工程与编译 1、 创建工程
File-New-Workspace,创建一个空的工程。
将新的工程命名为tutorial,并指定保存路径。务必保证Add New Design to Workspace设置有效,点OK,启动设计向导New Design Wizard。
2、 选中Create an empty design,Next。
3、 为设计指定综合、器件类型、编程语言等其它信息,本实验设
置如下,Next。
4、 打开创建源文件窗口,design name取为tutorial_Verilog,设计
路径等接受Active的默认设置。点下一步,向导最后一步,点完成。
5、
现在,你可以看到设计浏览器(Design Browser)里有上面创
建的设计tutorial_Verilog了。
在设计浏览器中展开tutorial_Verilog,双击Add New Files,启动向导,点击Verilog Source Code图标,文件名cnt_10b,确定。(cnt_10b的代码见附1)。
在HDL Editor输入cnt_10b Verilog代码.
6、 编译你的源代码,有语法错误即改正之。右键点击设计浏览器
的cnt_10b.v,选Compile,如下图。
编译结果出现在下面的控制台串口,现在你的编译结果应该如下:
倘若你没有发现控制台(Console),点击菜单栏的Console图标注意现在你的设计浏览器应该包含编译后模块。
。
二、仿真
代码编译完成没有语法错误后,可以利用Active HDL的波形编辑器(Waveform Editor)做功能仿真。
1、 设置顶层模块(Top-Level)。由于上面的例子只有一个module,
故已经是Top-Level了。
2、 点菜单栏的Simulation菜单,下拉菜单中选择Initialize
Simulation选项
注意此时设计浏览器的Structure tab被自动调到前台。
3、 点击工具栏上的New Waveform按钮
以打开Waveform
Editor。此时设计浏览器的串口显示模块中的代码中声明的所有信号,
4、 选择需要仿真的信号并将其拖到波形编辑器串口。
本例选择所以信号,点CLK,按住Shift点FULL_I,如上图,按住鼠标左键将所以信号拖到右边的Waveform Editor。
5、 为输入信号添加测试矢量。本实验是先通过画波形添加test
vectors,而没有编写testbench。右键点击RESET,选Stimulators
在弹出的Stimulators窗口中,点Signals标签,在右边的Type里选f(t) Formula,在Value field类型里,为RESET赋值: (1,0ns),(0,200ns)。
接受其它设置,点Apply。
6、 不需要关掉Stimulators窗口,在Waveform Editor窗口的点
CLOCK,CLOCK信号自动加到Stimulators。CLOCK的周期设为10ns如下图:
7、 将ENABLE信号一直置为有效,如图。Apply,Close。
8、 将仿真时间设为2000 ns,
,点Run For按
钮,仿真到指定时间,同时仿真结果波形先生在Waveform Editor里。
查看波形可能会用到下面几个工具图标:
9、 可以把仿真结果保存为.awf格式的文件。点保存,将结果保存
为vectors.awf。将设计浏览器的标签切换到Files,注意vectors.awf已经加到工程中。
三、利用testbench仿真
1、前面保存的vectors.awf可以利用向导来生成一段testbench代码。展开cnt_10b.v,右键点击cnt_10b模块,选Generate Testbench,打开testbench生成向导。
2、在向导的第一步中,选择顶层模块,本实例因为就一个module,故在下拉菜单中选cnt_10b,Test Bench Type选择Simple,下一步。
2、选Test vectors from file复选框,点Brows按钮指定测试向量文件的位置。
3、指定前面保存过的vectors.awf,如果没有vectors.awf,请注意检查文件类型必须是waveform files(*.awf)。打开vectors.awf。
7、 Active HDL会自动把vectors.awf中的信号自动加到Signal
found in file窗口,并且会检查.awf的信号是不是跟cnt_10b的信号匹配,若不,则会报错。控制台Cole显示no errors,点下一步
8、 这一步指定test bench的module名等等,接受所有的默认设置,
点下一步:
9、 点完成结束test bench产生向导。
10、 注意设计浏览器里此时多了一个名为TestBench的文件夹图标,
点文件夹前面的“+”展开之,可以发现此文件夹包含下面两个文件:
z cnt_10b_TB.v: Test Bench 源文件;
z cnt_10b _TB_runtest.do:自动执行仿真testbench的宏命令。
11、 右键点击cnt_10b _TB_runtest.do,选择Execute,这个命令包括
了编译test bench文件和运行仿真。运行后,仿真波形会出现在Waveform Editor窗口。
上面就是一个利用Active HDL做Verilog HDL调试仿真的大概流程。
四、仿照上面步骤,做一个简单的有限状态机(verilog代码见附2)的调试仿真,调试。
【DIY】编写一个DFF(D Flip-Flop)工程,写出D触发器verilog或者 VHDL代码,并仿真,比较与D latch的异同点。
附1 cnt_10b.v的verilog代码
module cnt_10b(CLK,COUNT,ENABLE,FULL,RESET); input CLK;
input ENABLE; input RESET;
output [9:0]COUNT; output FULL;
reg [9:0]COUNT_I; reg FULL_I;
always @ (posedge CLK or posedge RESET) begin
if (RESET) // asynchronous reset begin
COUNT_I = 10'b0000000000; FULL_I = 1'b0; end
else // active clock edge begin
if (ENABLE) begin if (COUNT_I == 10'b1111111111) FULL_I = 1'b1; else
COUNT_I = COUNT_I + 1; end end end
assign COUNT = COUNT_I; assign FULL = FULL_I;
endmodule
附2 有限状态机的Verilog代码
// a simple state machine
module stm(clk, in, reset, out); input clk, in, reset; output [3:0] out;
reg [3:0] out; reg [1:0] state;
parameter s0=0, s1=1, s2=2, s3=3;
always @(state) begin
case (state) s0:
out = 4'b0000; s1:
out = 4'b0001; s2:
out = 4'b0010; s3:
out = 4'b0100; default:
out = 4'b0000; endcase end
always @(posedge clk or posedge reset) begin
if (reset)
state = s0; else
case (state) s0:
state = s1; s1:
if (in)
state = s0; else
state = s2; s2:
state = s3; s3:
state = s0; endcase end
endmodule
// end of state machine
Cadence IC设计实验
实验六 NC-Verilog Simulator实验
实验目的:NC_verilog仿真器的使用,包括编译、运行和仿真。
预备工作:
cp /eva01/cdsmgr/ training_IC_data/NCVlog_5_0.tar . tar -vxf NCVlog_5_0.tar
Lab1。运行一个简单的Verilog设计
[1]、设置设计环境
1.cd NCVlog_5_0/lab1-mux
在Solaris窗口,点击左起第3个图标Home Folder, 在File Manager窗口进入:你的学号/NCVlog_5_0/lab1-mux目录;
这个目录包含了用来描述一个多路选择器和其测试平台的verilog 模块。以下是mux_test.v模块内功能模块的端口框图。
建议:如果有时间,你最好看一看各模块(module)的Verilog代码! 2.创建cds.lib文件,
在File Manager窗口,选择File->New File,文件名为:cds.lib,OK 打开cds.lib文件(双击),在其中写入: Define lab1muxlib ./lab1-mux.lib 存盘退出
3.创建(库)文件夹(即目录):
在File Manager窗口,File->Folder,文件夹名:lab1-mux.lib,OK (你也可以在Terminal窗口 mkdir lab1-mux.lib) 4.类似步骤1,创建hdl.var文件,在其中写入:
Define WORK lab1muxlib 存盘退出
5.查看verilog源文件。mux.v是2选1多路选择器MUX2_1 的门级建模源文件,mux_test.v是mux.v的测试台,包含了输入激励信号和监控程序运行的任务语句。
[2]、编译源文件(ncvlog命令):
鼠标回到你原先打开的Terminal(或Console)窗口,目录应为。。。/你的学号/NCVlog_5_0/lab1-mux。点击(激活窗口)。 1. ncvlog mux.v –messages ,这条指令是编译mux.v。 2.打开hdl.var文件,在其后添加:Define NCVLOGOPTS –messages
存盘退出
注:用NCVLOGOPTS变量定义常用的ncvlog命令行操作,从而避免每次都敲入同样的命令行。
3.编译测试平台源文件:
ncvlog mux_test //可以不加后缀.v 4. ncls –all
这一步目的是看一看前面两个ncvlog生成了哪些library objects? 答案是:module lab1muxlib.MUX2_1:module (VST) module lab1muxlib.mux_test:module (VST)
现在你明白lab1muxlib的作用了吗?ncvlog编译后生成的模块放入lab1muxlib工作库中。
[3]、扩展与连接(elaboration详细描述)顶层设计(ncelab命令): 1.ncelab mux_test
2.ncls –all ,查看ncelab生成了哪些library object。
[4]、仿真:
ncsim mux_test
观察仿真器的输出情况。你还可以查看ncls.log, ncelab.log, ncsim.log, ncvlog.log文件内容了解更多的信息。
以下Lab2至lab4是编译、扩展与连接(详细描述)和仿真步骤的高级操作。
Lab2。编译的高级技术
一、Lab2-1:寄存器设计
实验目的:学习如何使用hdl.var中的WORK、VIEW、LIB_MAP和VIEW_MAP 变量。
你将学会使用:
1.分别用hdl.var中的WORK变量和用-work选项忽略WORK变量进行编译。 2.分别用hdl.var中的VIEW变量和用-view选项忽略VIEW变量进行编译。 3.用hdl.var中的LIB_MAP和VIEW_MAP变量进行编译。 4.用hdl.var中的LIB_MAP和VIEW_MAP变量进行阐述。
下图是Lab2实验用到的register和counter的端口框图。
[1].分别在File Manager窗口和Terminal窗口进入:NCVlog_5_0/lab2-reg目录; [2].参照lab1步骤,创建cds.lib文件,输入如下内容:
Define lab2reglib ./lab2-reg.lib
Define projectlib ../project.lib 注意:两个点 Define techlib ../technology.lib 注意:两个点
存盘退出。
[3].创建关联目录。
在:NCVlog_5_0/lab2-reg目录下,创建lab2-reg.lib目录(Folder), 在:NCVlog_5_0目录下,创建project.lib 和technology.lib 目录。
[4]、使用hdl.var 中WORK变量: 1.进入NCVlog_5_0/lab2-reg目录,
2.创建hdl.var文件,打开,输入如下内容:
Define WORK lab2reglib 存盘退出
3.编译register_test.v包含message选项:
ncvlog register_test –mess
问题:ncvlog编译后module放入了哪个库中?
提示:ncls –all , 答案:module lab2reglib.register_test:module (VST)
[5]、使用-work命令行选项编译:
ncvlog register –mess –work projectlib
注:-work命令行选项使得projectlib替代了原来在hdl.var文件中lab2reglib WORK库。 用ncls –all 命令查一下ncvlog将编译好的register module防在哪个库? 答案: module projectlib.register:module (VST)
[6]、使用hdl.var中VIEW变量编译: 1.打开hdl.var,加入如下内容:
Define VIEW behav
Define NCVLOGOPTS –messages 存盘退出
2.编译clockgen.vb:
ncvlog clockgen.vb –work projectlib
用ncls -all查看一下,答案:module projectlib.clockgen:behav (VST)
[7]、比较:使用 -view命令行选项编译: 1.编译clockgen.vg
ncvlog clockgen.vg –work projectlib –view module
说明:clockgen.vb是行为级建模,clockgen.vg是行为级和门级混合建模,二者行为相同。 2.用ncls -all 查看ncvlog编译结果,这个module新增添了module 类型view。如果你没有指定,ncvlog会将按hdl.var文件中的命令将这个module存入behav view。
[8]、使用hdl.var 中LIB_MAP和VIEW_MAP变量: 1. 编辑hdl.var文件如下:
#Define WORK lab2reglib (#注释掉) #Define VIEW behav
Define NCVLOGOPTS -messages Define LIB_MAP ( . => projectlib, ./cell_lib => techlib) Define VIEW_MAP ( .vg => gate, .vr => rtl, .vu => udp) 存盘退出