学用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。