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。
 
 
 
 
 
 
 
   
1

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空