Cadence IC 模拟版图初学手记

 Cadence初学手记(一)

学用Cadence也有一段时间了,但写这Cadence初学手记的想法是来自boyfriend的一句话,他说,我们遇到困难上网搜资料的时候,经常能从很多人的博客里找到答案,我们也可以把自已会的一些问题写到我们的日志里,这样也许别人也能从我们这里得帮助呢,网络嘛,就是一个人人为我我为人人的地方啊。我想对啊对啊,这话说得多贴心啊。我从连UNIX都不会进开始一路摸索着走来,我深深知道初学者要经历的苦闷和彷徨。虽然现在依然很菜鸟,但总算有了一点小小的心得和体会,如果有一天,你搜索到我的页面,如果我这粗浅的学习手记能对你有一点点的启发,那请你笑一笑,我会奖励自已吃一颗巧克力!

(一)如何进入Cadence

(1)进入UNIX系统后,点击右键,在弹出菜单中点选tools–terminal,在terminal提示符后键入icfb,启动Cadence.如果在icfb后加&则那个terminal窗口还能干别的,要是不加就什么都不能干了,而且关掉terminal Cadence也会关闭(不知道专业一点该怎么表达,只能这么直白地说了,呵呵)

(2)在主窗口CIW里,点file–new–libarary,新建一个库,然后可以在库里新建cellview.view name有schematic(原理图)layout(版图)symbol(符号)等,根据需要选择

(3)如果要画版图,一定要选compile a new tech file 或attach to an existing tech file,如果选第一项,则在弹出窗口里输入要compile的tf文件的路径,如果选第二项,则选择一个已经存在的库,你新建的库就会attach到那个库,就是说两个库用一个工艺文件

(4)将一个已有的库包含进来用libarary path manager,在tools菜单里,启动后,左边输入库名,右边输入库路径,再点file–save,就可以了,库路径信息保存在cds.lib文件中

今天先写最简单的,明天介绍怎么画电路图!
 
 Cadence初学手记(二)

(一)建好库后,新建cellview时选schematic,进入原理图编辑窗口,然后就可以画电路图了,和其它画电路图的软件如protel大体上都是差不多的,都是加入原件后扯线就行了

(二)发几个常用快捷键,用Cadence时,一定要熟练使用快捷键,可以给你的工作提供很大便利

i——添加元件;(我一般都用sample库的mos管,二极管等,basic库的VDD,GND)

p–加输入输出引脚

[——缩小两倍;

]——扩大两倍;

w——连线(细线);

f——全图显示;

q——查看元件属性。

u–撤消上一次操作

U–重做上一次操作

c–复制

m–移动

(在选复制移动后,点F3键,可出现设置对话框,可以设置复制几行几列,ratote(旋转)sideway(左右镜像翻转)updown(上下镜像翻转))

X–检查并存盘

S–存盘

(三)可以把画好的电路图封装成symbol,以后就可以调用自已的原件了。方法是点design–creat cellview–from cellview,再点OK就好了


 Cadence初学手记(三):画版图

  1、在一个包含工艺文件的库里新建cell,cellview选layout

2、常用快捷键

r:画矩形(retangel)

k:创建尺子

shift+k:清除所有尺子

m:移动(move)

c:复制(copy)

s:伸拉(strech)

shift+m:两图形融合(merge)

shift+c:切图形(chop)

u:取消上一次操作(undo)

shift+u:重复上一次操作(redo)

q:属性

l:标签(label)

另:键入上述命令后按F3,可以出现高级选项对话框

3、了解了快捷键,我们现在开始画版图啦!首先,在左边的LSW窗口点击你所需要的层次,比如先选oxide(或active),再按r,拖动鼠标,画出一个矩形,再按k,标定好尺寸,再按s,拖动矩形边调整到合适大小,这样有源区就画好了,同样方法再选poly层画栅,metal1画金属线,cont层画接触孔,一个最简单的mos管就画成了

4、关于版图的层次

  (1)版图的层次由工艺文件定义,也可以自已添加或删除,在CIW窗口中,点technology file–edit layers,出现对话框,有add,edit,delete等选项,点add新加层次时,要注意display resourse一定要和其它层选的不一样,否则这两个层显示的条纹色彩就一模一样。还有stream data type number,stream layer number等,与将来导出GDS文件有关,具体什么含义我也没弄太清楚。修改结束后会提醒你工艺文件已修改,是否保存

 (2)关于各层显示:各个层次的显示由.drf文件定义,可以在LSW窗口中,点file–display resourse进行修改,边框,条纹,颜色等等都可以修改,一切按自已习惯来,也可以在出现的对话框中,可以点file–load来载入已经存在的.drf文件。修改后的显示信息也可以保存,以便下次直接调用

补充:今天新学到一点知识,就是在打label的时候,一定要把label包含到所要标记的线条里,否则后期DRC的时候就系统就认不出来啦,我可是吃过这方面的亏,今天总算知道啦,多谢清华的一位仁兄了。

还有,在绘制版图的时候,如果层次很多,有些层又暂时用不着,可以将其屏蔽,通过LSW上的AV(all visible)NV(none visible) AS(all selectable) NS(none selectable)来实现,这样画面就清爽多啦


  Cadence初学手记(四):电路的Hspice仿真

1、将电路导成网表:将画好的电路图check and save后,在CIW窗口里,点file–stream out–CDL,在弹出窗口里点browser,选定要导出的电路图,设置好路径(路径如果不填就在启动Cadencer的目录下)和导出文件名(默认为netlist),点OK

2、找到你刚刚生成的网表,对其进行编辑,我一般是先把GLOBAL VDD GND那一行前面的星号去掉,因为星号是代表注释掉某一行语句,而我们需要VDD GND做为全局变量。然后再把最下面main circuit那一块里的subckt前加上星号,subckt意思是定义子电路,在main circuit里无需定义子电路。

3、去掉最后的end cellname,加激励:下面是我经常用的激励(有点白,但很好用噢)

v0 VDD GND 6 *定义电源和地之间的电压 6V*

v1 IN1 0 pulse(0 5 5u 1n 1n 5u 10u) *输入信号1 脉冲 低电平0V 高电平5V 延迟5u 上升时间1n 下降时间1n 正半周时间5u 周期10u*

.op *分析静态工作点 *

.option list post nomode *这句不太懂,汗*

.print *输出说明,还可写成print v(节点名称) i(r1) p(r1) 分别代表输出电压电流和功率*

.inc ‘/home/user1/n95.inc’*要用到的工艺制程*

.tran 1u 300u *每1u分析一点,总共分析300u*

.end

4、在保存网表的路径下,打开终端,键入hspice netlist(或你的网表名),程序开始运行,等运行结后,键入awaves netlist.tr0,就可以看波形啦,想看哪个波形,在result browser里一双击就可以了

Cadence学习手记(五):版图的DRACULA验证

1.将版图导成GDS文件:在CIW窗口中点file–stream out,在弹出的对话框中点browser选定你要导的版图,设置好输出文件名,路径等等点OK

2.对DRC文件进行修改:在INDISK后,写入你的GDS文件路径及文件名,OUTDISK后设置你的输出文件名,PRIMARY后写你的cellname,workdir后写你的DRACUAL程序路径,改好后保存

3.将改好的DRC文件和GDS文件放在同一目录下,并在此终端下键入PDRACULA,在提示符后输入”:/g cellname.db”,程序开始运行,生成jxrun.com等可执行文件,程序运行完后输入“:/f”推出程序

4. 输入jxrun.com,系统开始进行DRC验证,生成一堆文件,这些文件怎么看我还不太明白,等我慢慢研究,以后汇报啦

 Cadence初学手记(六):关于command file


今天粘点别人的东西,我也不是很精通,只好照抄啦。

我们常把dracula的脚本语言叫做command file,command file结构大致分为三大块即: 

主体说明部分(description block),用来设定输入/出database信息,运行的模式等相关信息; 

图层说明部分(input layer block),用来说明所要操作的图层,文字等信息; 

主体操作部分(operation block),这是command file的操作运算部分

一、主体说明部分

给个例子
*description 

primary = top1017 ;primary cell name 

indisk   = ../db/top.db ;input file name 

outdisk = out.dat ;output file name 

printfile = prt ;output log file 

resolution = 0.005 mic ;minium layout increment 

scale = 0.001 mic ;tap equivalent 

listerror = yes ;enable output log file 

program-dir = /home/dracula ;directiory include dracula program 

mode = exec now ;execution mode 

keepdata = inquery;smart;yes 

delcel = tmp ;cell delete 

text-level = 1 ;consider text in nth level 

system = gds2 ;database format 

*end 

黄色的字是一般是要自已改的
二、图层说明部分,就是定义版图中所用的层,如:

*input-layer 

pwell   = 1 

pplus   = 2 

cont   = 5 

… … 

mt1     = 6 text 6 attach mt1 texttype 2 

substrate = bulk 99 

connect-layer = poly mt1 mt2 

temporary-layer = ngate pgate aplug 

*end 

三、主体操作部分

这部分就好像编程似的,比如,要检查两根metal1的间距不能小于0.6u

语句如下:

ext[h] mt1 lt 0.6 out drc01 40

整个operation部分的内容就是

*oper

ext[h] mt1 lt 0.6 out drc01 40

*end

本句的具体意思就是

mt1 extend to mt1 less than 0.6 ,and check notch, 

output error named drc01 by layer number is 40 at last

ext 表 extend

[h] 为该命令的选项,为check notch

lt 为little

out 为output

写dracula command file就像写八股文,照着往上套就是。

就写drc command file来讲,主要针对designer rule来写,

首先看懂rule后,再去规则一下,主要思路如下:

1,定义好所要用到的层

2,将要层进行细化,来表达准确的含意

3,定义好组件

4,给定check rule

比如说,要检测出gate与cont的rule

1,定义好层


pplus = 2

cont = 5

poly1 = 12

thin = 8


2,细化


and   pplus   thin   pthin;;pplus与thin重合的部分定义为pthin,即p型的thinoxide

and   nwell   pthin   pdiff;;pthin与nwell重合的部分就是要来形成pmos的部分


3,定义组件


and   poly1   thin   gate ;poly1与thin交结的地方,即是gate

and   pdiff   gate   pgate;;gate在pdiff,就认定为pgate

not   gate   pgate   ngate;;gate除去pgate,就认定是ngate


4,给定rule


ext[to]   cont   gate lt 0.4 out drc04 40;;gate距cont,至少0.4u


此例中,先定好要用到的层,细化时即是定义由基本层派生出的层

将层与层进行组合,就形成你所想要定义的组件,对应到平时所讲的

如,gate,pmos,nmos等,这些并不是单纯的层,而是由层与层交织出的组件。

值得注意的是,这些定义要能真正体现mask的本意,否则command file就是无意义的。

以小见大, 就可以完成command file的编写
 

  Cadence初学手记(七):版图与电路对比lvs

1、将版图转换成GDS文件:和前面讲DRC时一样,就是在CIW里点file–export–stream out,设置好文件名和路径,点OK

2、将电路图转换成网表:CIW里,file–export–CDL,设置文件名和路径,点OK

3、将GDS文件,网表和LVS文件都拷在同一个目录下

4、修改LVS文件:INDISK后写你的GDS文件路径

        OUTDISK后写输出文件名

        PRIMARY后写你的top cellname

                program dir后写DRACULA程序的路径

5、将netlist转换成LVSLOGIC.DAT:在验证目录路径下,键入大写LOGLVS,然后在冒号后输入“cir 网表名”编译网表,“con 要转换的电路原理图的top cell名”将top cell转换成XTR文件,“:SUMMARY”看电路图情况,包括各种器件个数,’:x’退出

6、在同一路径下,键入PDRACULA,在提示符后输入“/g lvs文件名”,“/f”退出,生成jxrun.com

7、输入jxrun.com则开始执行LVS检验,若输入jxrun.com>cellname.log,则检验在后台执行并将结果输出到cellname.log文件里

8、程序结束后,生成很多文件,可通过lvs.lvs来查看错误
 

  Cadence初学手记(八):关于LSW

我一直记得以前见过关于用鼠标及shift使某一层不可见或不可选,就是记不得了,前两天琢磨了下,琢磨出来了,汇报下:

middle:使某一层不可见,要注意这层不能是选定用来绘图的那一层

shift+middle:只有点的那一层可见,其余不可见,相当于NV

right:使某层不可选,某层处于不可选状态时,颜色会变淡些,在版图上你就无法选定由这层画出的图形

shift+right:只有点的那一层可选,其余不可选,相当于NS

要解除不可见或不可选的状态,再点一下middle或right就可以了

  Cadence初学手记(九):hspice小窍门 LVS的小经验

完LVS又把仿真好好搞了搞,所有参数都仿完了,并且很理想,又掌握了点新知识,小有成就感,呵呵

1、改变横坐标:在result browser窗口里,选中你想要作为横坐标的变量,再点Apply就可以了

2、如果电路是层次化的,想看某一模块里某一cell的电压或电流,在网表里写blockname.cellname就可以,比如看一个管的漏电流:print dc i(XI.mp24)。再在results browser窗口hierarchy栏双击top,点选某一模块,就可以在types和curves里点击相应的项目查看波形

3、有时会提示“input file has no data”怎么办?明明网表在,激励在,怎么no data呢?愁煞人也

  哈哈,这可是和我一个教研室的stronger大哥经历了血的教训后发现的独门秘籍,一般人我不告诉他!

  其实也很简单,就是修改网表的时候,删最后那一行的“ends cellname”时,千万不要把那一行全部选删掉,就选那几个字删就好,否则就会no data,神奇吧。发现这么点细微的差别实在不易啊,在此向stronger大哥敬礼了先~~


            LVS的小经验:

前几天非人的LVS经历给了我惨痛的教训,面对着几百个的UNMATCH,那个痛苦啊!有时有错误却死活查不出来,郁闷得我简直想拿头撞墙。不过现在好了,我挖地三尺地查啊查,总算守得云开见月明了,有点小经验,汇报汇报:

1、确保所有的LABEL均被识别出来,尤其是VDD和GND的。LABEL用哪一层金属都可以,只要将其原点包含到你要标识的那个金属条里就行

2、特别要注意PAD之间不能短接。我这次做LVS最开始只认出了四个输入,四个输出及电源和地都没有被认出来,我百思不得其解,后来上网请教,得知要查查PAD是否有相同的器件连接。我一查,果然,由于我粗心马哈,metal3有部分重叠,几个PAD连成一片,能认出来才怪。断开重叠的metal3,又发现多打了几个via,把电源和地打通了,除掉那几个害人的via,又发现两个输出的功率管的漏极接到一起了,就相当于一个管子接了两个PAD,肯定会出错啦

3、报告结果的.lvs文件中,差异报告部分左边是原理图的器件,右边是版图的器件,我一般都是从不匹配的节点开始找。在LVS--setup后,将不匹配的netname写入LVS view窗口的第二栏里,再点fit ,不匹配的net就会高亮显示,再在原理图窗口用edit–search,找到相应的net,就可以比较两者,看哪儿出错了

4、关于LVSCHK选项的简介,从网上找的,发一下

LVSCHK[option]


Option解释如下:


A   将串连电容认做一个

B   仅仅保持并联三极管的单个性,有多少是多少。其他如并联的mos,dio,ldd,res,cap等全部认成一个!

C   如果没有定义X选项,则把各种Pmos Nmos组合起来认成device,如nor nand aoi oai等。这里的pmos 和nmos必须是     在lvs cmdfile中被定义为MOS[P] MOS[N].

E和E` 怎样认一些并联的器件,并联的器件其实就是类似或相同的器件。(晕了),lvschk有两种认的方式,一种是E
      ,以device为单位来认,另外一种就是E`,以node为单位来认。都指的是线路和layout的互相识别。lvschk后面有一些例如wpercent=0 什么的,如果没有,那么dracula自动打开lvschk的E选项.E和E`不能同时在lvschk里面出现。书上建议说最好run两遍,一遍带E,一遍带E`,只有真正的错误才是在两次的错误报告中同时出现。

F   过滤掉没有用到的mos,比如在gate array的案子中。线路和layout可以单独过滤

G   过滤掉没有用到的mos,比如在gate array的案子中。线路和layout同时过滤。

K   有K就自动将B变成无效了。但是如果有S选项也有K选项,那么K无效了。K表示不把所有的并联device smash。

L   有L有C,C被盖掉。L跟C差不多,仅仅不包含aoi 和 oai。

M   dracula可以认出这种inverter(这个inverter用来short nand或nor的gate)

N   在gate级别认substrate,否则是在transistor level上认。如果有虚gate的情况,同时需要N 很T选项。

O   首先,用了O就不能用X。在没有连接vdd或者gnd的情况下,依然可以认出并联或者串连的mos来!挺有用!

P   检查电容的极性!

R   smash 串联的电阻。也就是说,串多少个都认成一根!除非分叉!

S   接了power或者gnd的mos,将几个并联的认做一个。(没见过哪个cmdfile没用这个选项)

T   前面略有介绍。

U   去掉不相关错误,好用啊

X   有X就不能swap。

Z   过滤掉那些没有接到power或gnd上的device。


    </div>
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值