Pcell制作mos流程.docx
《Pcell制作mos流程.docx》由会员分享,可在线阅读,更多相关《Pcell制作mos流程.docx(25页珍藏版)》请在冰豆网上搜索。
Pcell制作mos流程
1Overview
这一章描述了参数化单元——pcell
什么是参数化单元(parameterscell)
一个参数化的单元(pcell),是用图形表示的,允许你每次创建器件的时候都可以编辑其参数。
你创建这样的单元就好像创建任何其他layout单元,你将parameters赋予它,它就称为了pcell,这样的pcell我们称之为master。
在你compile完这样的master之后,他将以SKILL语言的形式记录基础数据。
SubmasterCells:
你已经创建了一个pcell,当你利用这个pcell创建器件的时候,你需要对创建的instances赋予参数,这样每个不同的instance都具有不同数据存储在虚拟内存中,我们称之为submaster。
创建一个Pcell
两种编译Pcell的方式:
利用Pcell菜单;用SKILL命令
1创建并编辑一个cell
2添加parameters
3编译cell成为masterpcell
4测试master.
➤Fromalayoutwindow,chooseTools–Pcell.
什么是parameters
当你放置一个instance的时候,你需要将数值赋予不同的参数项以使你:
⏹stretchparameter——向X或Y方向拉伸图形;
⏹conditionalinclusionparameter——包含或去除对象;
⏹repetitionparameter——在X或Y方向复制对象组;
⏹parameterizedshapes——在你放置instance时修改栅paths或矩形;
⏹repetitionalongshapeparameter——沿着参数化图形的边缘复制;
⏹referencepointdefinedbypathendpoint——放置与parameterizedpath端点相关的对象
⏹referencepointdefinedbyparameter——放置于参考点相关器件
⏹inheritedparameters——从hierarchy的任何一个level获得参数而inherit更高的level
⏹parameterizedlayer——改变layer目的是对象图形组
⏹parameterizedlabel——定制label
⏹parameterizedproperty——创建一个由参数值决定的属性
定义参数:
参数名是一个变量,我们可以将其关联到其他定义参数上如果给的拉伸变量名是gate,那么我们定义重复栅的步长的时候我们可以使用SKILL表达式,如gate+1。
变量名的命名需要指明使用意图,如channelWidth。
SKILL表达式可以使用2个以上参数。
可以定义为:
⏹浮点型的数字
⏹一个名字
⏹一个SKILL表达式
⏹一个SKILL函数
SKILLOperators
2StretchCommands
这一章我们讨论
⏹DrawingStretchControlLines
⏹DefiningStretchParameters
⏹SpecifyingStretchDirections
⏹SpecifyingaReferenceDimension
⏹SettingMinimumandMaximumValues
⏹StretchingPaths
⏹UsingStretchwithRepetition
⏹UsingStretchwithConditionalInclusion
⏹UsingtheStretchmenu,including
利用Stretchparameters可以改变对象的尺寸,可以沿着垂直方向(vertically)、水平方向(horizontally)或者同时两个方向。
⏹Stretchthelengthandwidthofatransistor
⏹Stretchthewidthofapath
⏹Movecertaingroupsofobjectswhilestretchingothers
StretchMenu
◆
StretchinX——沿X方向拉伸
将目标沿X方向拉伸,其Stretchcontrolline是一条垂直的直线,将object一分为二,分割处既是拉伸的起点。
沿X方向拉伸后的图形:
◆StretchinY——沿Y方向拉伸
沿Y方向拉伸后的图形:
◆Qualify——指定对象
首先点击Qualify——出现提示
——点击Stretchline——Stretchline高亮同时出现提示——
(点击受此Stretchline影响的单元)——我们选择除了孔以外的图形——双击空白处结束。
选择菜单项的parameters——Summarize查看
我们可以看到(qualified)字样,具体我们还需要验证:
我们选择影响的单元不包括右边的孔,我们看下结果:
右边的孔并没有被影响到。
◆Modify——修改
我们选择
,出现提示
,选择一条Stretchcontrolline,出现对话框,我们可以进行修改,这里只能修改已知Stretchcontrolline的parameters。
◆Redefine——重新定义
选择
出现提示
,我们单击Stretchcontrolline,出现提示
选择合适位置,单击左键出现Stretchcontrolline的划线,再双击左键结束,原来的Stretchcontrolline消失。
Redefine功能不仅能用于重新定义Stretchcontrolline的位置,而对于parameters也能修改。
当你对你的对象设置parameters之前必须首先绘制一条StretchControlLines,这条线决定我们从哪开始拉伸和向哪个方向拉伸。
DrawingStretchControlLines
添加拉伸parameters到你的cellviews,你必须首先画一条Stretchcontrolline,Stretchcontrolline决定了wheretoBeginthestretch和whichdirectiontostretch。
horizontalstretchcontrolline——水平拉伸控制线是一条水平线,控制着向上向下或上下拉伸。
菜单中是StretchinX。
verticalstretchcontrolline——垂直拉伸控制线是一条垂直线,控制着左右拉伸。
菜单中是StretchinY。
你可以为一个单元添加很多Stretchcontrolline,程序默认为他们都是独立的。
Example
下图是一个实例,我们选取一条垂直拉伸控制线(verticalStretchcontrolline)来控制其穿过的栅和栅下有源区位置,而对未穿过的孔和铝线则不能控制。
选择菜单中的StretchinX,出现菜单
菜单中NameorExpressionforStretch需要填入parameter,这个parameter可以是变量名称,我们用Length(代表栅长),ReferenceDimension(Default)默认为0.6,这里默认值是控制线穿过的图形中最小的图形量度,StretchDirection可以选择right-left-rightandleft三种,从控制线穿越位置拉伸。
其他以后介绍。
再选择一个拉伸有源的,水平拉伸控制线(horizontallyStretchcontrolline)菜单中选择StretchinY。
菜单中NameorExpressionforStretch需要填入parameter,这个parameter可以是变量名称,我们用Width(代表有源区宽度),ReferenceDimension(Default)默认为0.5,这里默认值是控制线穿过的图形中最小的图形量度,也即是空的宽度StretchDirection可以选择up-down-upanddown三种,从控制线穿越位置拉伸。
我们设置完parameters后还需要编译一下,才能保存到硬盘上。
Pcell——compile——ToPcell
或者我们可以直接按
保存。
新建一个virtuosolayout,在parameter选项内更改参数调用刚才的pcell,拉伸变化如图:
我们发现孔也随着有源区拉伸的,这是我们所不希望看到的。
我们可以使用Qualify命令来选择我们需要影响的图形。
选择Pcell——Stretch——Qualify,按照界面左下角提示选择水平拉伸控制线(horizontallyStretchcontrolline),使其高亮,再按提示选择需要被该控制线影响的图形,除了孔和铝都设置为高亮,双击完成,再测试:
StretchControlLineRules
拉伸控制线需要遵循的几点规则:
✓Stretchcontrolline必须要与图形正交,排除其他任何角度,这里可以在Displayoptions选项中的
调整。
✓Stretchcontrollines不能翻转,你可以将控制线绕开你不想包括的单元但是不能够反相翻转。
且stretchinX不能穿过垂直的边缘,stretchinY不能穿过水平的边缘。
✓Stretchcontrollines穿过的图形,将会受到其影响,但是未穿过的图形呢?
他们将会跟随穿过图形相对移动。
而不会拉伸,即使是不同的层,我们做一个实验,将有右边的有源区变换层次,再用垂直控制线拉伸栅长。
可以看到右边的层次也随着栅长的拉伸位置跟随变化。
✓当我们设置parameters的时候,默认的ReferenceDimension总是穿越图形中最小尺寸的图形,那么我们改变其值会怎样呢?
我们用横向拉伸控制线控制栅宽或者有源宽度的变化,我们改变默认值,在ReferenceDimension填入栅的总宽度(长)2.4。
我们插入instance观察parameter。
Widith栏默认的是填入的栅的宽度2.4,而晶体管并未拉伸。
更改数值后,晶体管拉伸。
这样我们可以设置我们所需要更改的图形参数,而不只是默认的最小宽度。
✓我们是首先量了栅的宽度,如果没有测量准确测量尺寸的情况下,我们绘制了2个矩形高度分别为10和30,而我们填入的ReferenceDimension为20,我们插入后分别设置ReferenceDimension为201510和5,发现Reference
Dimension设置为20的没有变化,设为15的两个矩形的高度都减少了5,设置为5的时候均减小了15,其中较矮矩形变为反相的图形。
这样就知道ReferenceDimension填入的值只是一个基准值,我们后来填入的parameters会依照基准值加减。
✓在垂直和水平拉伸线命名同样的parameter,这样就可以实现同时拉伸,对于宽高不同的图形,对于设的ReferenceDimension值,我们放置instance的时候设的值相对于宽高按差值变化,如宽高分别为1020,初值ReferenceDimension=20,NameorExpressionforStretch=Width。
Instance放置Width=30,那么变化后宽=10+(30-20)=20,高=20+(30-20)=30。
相同尺寸相同变化:
✓当Stretchcontrolline穿过两块图形连接的缝隙之间,图形的拉伸跟StretchDirection,
结果如下图:
StretchDirection——LeftEdges=4;Edges=-2
StretchDirection——RightEdges=4;Edges=-2
StretchDirection——RightandLeftEdges=4;Edges=-2
我们可以限制parameters的最大最小值。
✓StretchingPaths
UsingStretchwithRepetition
我们可以将拉伸参数和复制参数相结合,可以做到:
✓拉伸复制对象
✓依总拉伸量决定复制个数
✓依复制个数决定拉伸量
我们可以将拉伸参数结合复制参数在同一个pcell里面,但这里要注意的是拉伸总是赶在复制之前发生的,如果要使复制先行于拉伸,我们必须指定一条依靠复制参数的拉伸控制线。
◆UsingStretchParameterswithRepeatedObjects
当一条Stretchcontrolline穿过一个复制的对象,拉伸的方向和复制的方向共同影响该实例。
✓如果拉伸的方向垂直于复制的方向,这个实例或实例组首先被拉伸然后被复制。
下图栅长是上下方向拉伸的,而栅的复制是水平的,形成了常见的相互垂直关系。
✓如果拉伸的方向平行于复制的方向,那么实例或实例组将会默认被排除拉伸的影响之外,除非实例组完全在拉伸线的一端(即使在一端也未发现被影响,带验证.....),否则复制的实例不会被拉伸影响。
✓默认的,拉伸总是先于复制,即使是由宽度函数(width/steppingdistance)决定的复制参数中,因为拉伸先行发生,就使晶体管源漏的接触孔的计算称为可能。
宽度设为width,复制步长为pcStepY,计算contact为width/pcStepY。
◆StretchingObjectsinRepetitionGroups(拉伸复制的实例)
Stretchcontrolline穿过复制的实例组,默认情况下实例组的单元不会被拉伸,但你仍可以拉伸这部分图形。
我们通过点击拉伸对话框的StretchHorizontally(Vertically)RepeatedFigures来拉伸复制的单元,这里我们设置栅的长度为Width,栅和栅之间的距离为0.1,这样SteppingDistance=Width+0.1(这里一定要注意有变量expression我们不能用初始值带入,必须用变量名)。
这样将栅的数量设为3,栅长为0.9如图(这里复制的objects需要如图3项,而拉伸的影响object有栅和栅下的有源,默认即可)。
Example:
我们看TO层次跟随的栅的复制,这样的情况下我们采用另一种方法:
因为栅的复制方向和拉伸方向相同,必须使此项为true;
有源区的拉伸,需独立留一条;
垂直的contact的复制,这里需要包括除了contact的所有图形;
串联栅的数量为NUM,这里注意栅长是变化的,所以在pcStep需要用栅长的变量L+0.1,这里需要用依靠TO决定有源区域的拉伸长度。
Contact的复制。
验证compile:
◆UsingDependentStretchControlLines(从属控制拉伸线)
默认的拉伸先于复制发生,然而你也可以设置拉伸从属于复制参数。
✓当拉伸参数是主要的(默认),拉伸总量控制着复制总量。
✓当复制参数是主要的(拉伸参数是依靠项),复制参数控制着拉伸总量
你可以控制主要参量(拉伸或复制的parameters),但你不能控制第二主要参量(因为这个量是被主要参量控制的,属于从属关系)。
系统从主要参量计算非主要参量,你只需要指定哪个量是需要输入的,哪个量只需要由其控制即可。
UsingStretchwithConditionalInclusion
你可以结合条件包含来设置拉伸参数:
✓创建一个条件包含的控制线(可废弃或启用)
✓由拉伸总量决定是否包含实例
✓由条件包含决定是否拉伸
Example