Cadence的Pcell designer官方入门教程
一、下载Pcell Designer
- 首先,前往Cadence网站下载Pcell Designer软件
- (具体安装过程就不记录了,大家自己去看视频吧)
二、创建新的P-cell
- 然后打开Virtuoso,点击Tools->Open Pcell Designer就可以打开了
- 然后选择导入的库及命名
- File to import可以导入已经创建好的Pcell。
- 然后就可以打开很多窗口
- 这里我们可以点击这个按钮来调整安排不同的窗口
- 这里我们主要使用左侧窗口的控制台进行设计,
- 首先,我们先添加一些变量
- 我们点击Device->Edit device type
- 这个界面允许我们从Pcell designer中创建CDF,或者导入已经创建好的CDF文件
- 这里我们点击Create
- 在添加的参数中我们可以选择其所属,是CDForPcell参数,both表示他们都是
- 一般默认都是使用both
- 这里我们创建一个宽度参数名为w,并将其类型type选择为number
- 然后我们点击提示prompt,输入width
- 选择单位unit,选择为length metric长度度量,表示当用户输入数字后,单位将自动定义为默认单位um
- 选择数值value,默认数值为1u
- 然后添加其他参数
- 当全部添加完成后,点击ok
- 然后就会在后侧栏看到刚才定义的参数变量。并显示了其参数定义和默认数值
三、创建group和name
- Pcell designer有两种按名称引用对象的机制
- 第一个是Group组,对应于数据库组,允许在数据库本身内自动管理一组object,可以从Pcell外部引用
- 第二个是Name名字,这表示object存储在Pcell内的变量里面。
- 这里将使用顶层单元设计器top cell designer的图形shape导入来说明这种方法
- 当导入图形到Pcell designer,在这种情况下,我们选用可选的group 去定义他们
- 然后我们在控制台就可以看到刚才的两个矩形命令command被group command组命令给包围了。
- 然后我们可以再次使用group command组命令,其他对象object也可以包含在同一个组group里面
- 接下来我们将导入带有名称name的形状shape。我们将门极图像(绿色)的name命名为gate
- 然后我们就可以在控制台发现它直接导入了矩形命令command。并且其指定将输出的参数名称命名为gate。
- 如果这样做的话,每次设置变量gate的时候,它都会覆盖overwrite该变量的原有值
- 另一种方法是导入许多这样的形状,然后不给他们命名group name和name
- 然后,我们可以在左侧command指示栏中输入name,然后选中这些object点击右键,选择Insert->Around
- 并将其命名为drain
- 然后就可以发现这两个图形被归类到name里面了。就表示drain这个名字就等价于这两个图形了。
- 每次使用给定名称时,name command都会添加到变量中已定义的任何现有形状中。
- 其实,group和name不仅适用于形状的导入,还可以用它来收集整个Pcell的对象object,然后可以在任何作为几何输入的命令中调用它们
- 最终,我们可以得到下面这些命令集
四、使用variable assistant
- variable assistant显示在主控制台的右侧栏,以及render window渲染窗口的右侧。这里显示的是variable的所有初始值及其名称。
- 如果渲染窗口render window有多个实例instance,则variable assistant中会显示最后一个选定instance的相关值。
- 并且在varibale assistant中还显示了与当前选择控制命令command中group指定变量的相关值,如果变量值有变化的话,右侧的variable assistant将对应的变量会变成绿色。
- 此外我们还可以对variable assistant显示的变量进行filter筛选和排序
- sort by表示排序,可以进行A->Z排序
- show by表示过滤,这里可以只显示Pcell相关的变量
- 还有一种方法是点击route,在这里可以自定义命令command,比如可以筛选查看input输入、output输出的命令
- 因此variable assistant允许以不同的方式查看数据。
五、Geometric Queries
- Geometric Queries允许你避免大量的计算在创建Pcells的时候,相反我们可以通过正在创建的原理图或者symbol来对这些形状进行测量调节,或者使用新的一组运算符从现有的object中创建新的形状。
copy command
- 下面来看一个在command中选择object的实例。
- 首先使用copy command命令,在这种情况下我们已经将Pcell单元设置为具有group和name,这主要是为了给两者进行区分。
- 我们可以将其source归类到一个现有的组group or name。这里选为group
- 这里指定其距离dy为0.2,就是将其宽度设置为0.2um
- 现在改为使用Expression类型,但是为了缩小查找object的范围,我们可以通过Geometric Queries几何查询来查找
- 打开后,进行筛选,在左侧栏中选择Layer operator层运算符,并在该group周围(arround)插入layer operator
- 这样我们就可以选择复制该group的所在层的形状
- 然后点击Apply,然后就可以发现得到了该group特定层的形状
distance operator
- 选择distance command,将其命名为xdist,然后再次使用Expression进行度量
- 这里我们有一个小方便的vista按钮,可以突出highlight显示Pcell中各种对象(如edge边缘,point点)。这样可以很好的生成Geometric Queries几何查询。
- 然后我们可以来查看现在产生的Geometric Queries
- 在这里有一个快捷键,我们可以直接复制expression
- 打开窗口后,先将source group给删掉
- 然后在左侧栏中选择name command,
- 然后希望xdist返回其自身值value,它将会说明右边缘right edge之间的存在是针对这个特定pcell单元的。
- 表示drain需要相较于右边缘需大于0.205um
rectangle
-
最后一个例子是如何创建一个新形状
-
选择rectangle command,并将其所在层设置为nump
-
还是source expression
-
选择or operator,然后分别将Group设置为source,name设置为drain。
-
但是现在,它还包含在金属形状里面
-
然后使用grow operator,这样可以指定增长的量,使其在四个不同维度上进行生长。
六、创建Temporary shapes
- Temporary shapes是用于创建object,且不会直接出现在Pcell designer上。
- 一种方法是在导入import时建立,
- 可以发现创建的object被para command包围
- 也可以发现,在此处突出显示的shape不会直接出现在pcell中。
- 这允许我们在使用对象object时候,如果我们把它向上移动,然后重新启动这个填充指令。via fill command将会使用这些视图,然后使用选中的这些视图填充此处的特定区域。
- 我们还可以做其他事情,在这种情况下使用cross connect command交叉连接指令
- 这里打算在电感pcell里面使用
- 这里使用了para command包围了它,因为想创建、度量它,所以在创建转弯线时复制到各个地方。
- 在这里我们是看不到cross connect交叉互连线的,但是在实际中他是不存在的
- 如果想更仔细查看这些para shape对象,可以点击这个icon,
- 因此para shape的好处是,它避免了必须创建一个临时的object,然后再Pcell删除掉他。
实践操作:设计电感的Pcell
-
相信大家现在已经对画版图特别恼火了。因为如果不画版图,就观察不了这些性质,画了版图,版图就固定了,就无法对它的几何参数的规律进行研究。因此在设计这个放大器的时候,我们就会做很多重复的重复劳动。所以我们今天讲一个基础软件的应用,这个软件的名字叫P-cell designer
-
这里以电感的设计来进行讲解,之后需要去尝试使用变压器设计
-
打开Cadence,点击Tools->open pcell designer
-
就会打开rendering window,这是渲染窗,即把所谓的代码进行渲染。
-
shape drawing window可以在这里画草稿,但是在开发模式下是用不到的,
-
如果要定义一个参数化的几何图形,首先要定义其参数
-
点击Device->Edit device type
-
然后这里有create,把所有想要的参数都加入进来
-
这里特别要注意的是,我们要设置其类型,大部分是number,且其默认数据的小数点直接决定了其是整数还是小数,一般默认是要加小数点的,不然除法会出现问题。
-
而像layer就是字符串类型
-
这里所有操作都是树状的,不需要写入任何的代码
-
如果是写代码,需要把每个点的坐标参数方程求解出来,会非常麻烦。
-
这个软件的核心逻辑是根据程序运行到某一段(run to select),状态下已生成图像的量测结果,得到随着参数变化的测量值。并根据这些测量值去生成新的参数化的几何结构。
-
总结下来就是根据参数化的测量值,去生成新的参数化的几何结构
- 如何实现外围的圈,
- 首先是通过group,就是一个几何组,对一批几何组的图形进行操作。我们需要知道这里的group name是一个指针,就是后面我们需要对这个已生成图像进行参数化的更改或参数化测量的时候,就需要通过name为ind_layout这个字符串去访问到这个几何图形。这个字符串是指向这个几何图形的指针。
-
由于在这个VCO电感中不知道是需要重复多少圈的,要重复n次,也就是所谓的并联匝数。
-
这里把并联匝数定为n,然后调用repeat command,即for循环。
-
它的第一个量n即执行的次数(自减1),这个是内部变量
-
然后就是需要不断执行画圈的操作,在这里不断调用八边形函数,
-
在我们要实现跨工艺的电感或者不同层的电感,就不要勾线layer,而是勾选expression。
-
如果选择layer,那么这就是固定死的东西了,我们可以选择expression,让layer作为变量,手动输入M8M7
-
radius是电感的半径,R是电感最内圈的内径,n是匝数,宽度为w,s的间隔
-
对于这些group,其名字本身也是由n生成的。
-
sprintf是格式化写入。以整数的形式变成一个字符串输出,变成coil
-
block是为了整理代码,其本身是没有任何逻辑上的意义的。这种情况不会产生新的量。只是对现有的量进行量测,或者定义一些局部变量的地方。所有的内容都是对上面的group去访问
-
然后画完之后就要进行measurement,后面才能根据各种几何形状,各种顶点去生成新的图像。
-
量测出来的值会随着参数尺寸的变化而变化
-
接下来,调用了turtle海龟命令。这里可以制造一个指针,参数化的轨迹。
-
line inner outer表示内到外的距离,TAPL是延伸长度。
-
起始点是tap start,这个点是通过前面量测结果得到的。
-
那么如何获得几何图形的抽象表征呢?
-
选择expression
-
首先在render window把已有的几何图形都点一下
-
在这里就可以选择所有已有的
-
把它的框获取出来
-
找到定位的点(会被高亮),这样就能获得起始点了
-
并且这个点是参数化的,就是在电感几何尺寸在变化的时候
-
然后再这个turtle的基础上生成path,就是赋予一个轨迹实际的几何形状。实际的版图的mask
-
将其layer
-
然后是extension是中间挖槽的部分
-
由于担心超过限定的范围,所以首先要查看是否有超过一定的值,超了的话就要固定这个值。if主要用于做异常处理
-
如果超了的话,就会报错。else命令返回报错信息到图上
-
chop就是对已有的图形用一个区域去切source的图形
-
切完之后去构建cross connect,去掉一半,只留下一半就变成45度的走线。
-
然后再镜像copy一下
-
是沿着中轴线my进行镜像。
- distance 命令是量测两个位置之间的距离
- 然后返回的类型值 result type,如果返回来的值是用来移动的,就使用transformation;返回来的值绝对值就用lens,返回来的是距离值就用x distance或者y distance
- 构建完之后还需要进行电磁仿真,pin和label
- 因此使用rectangle作为端口形状,label表示名称P1
- 最后一步就是导出
- 如果直接在本library导出就会打乱开发环境,一般使用发布。因为直接使用的话这些底层构建代码就会暴露
- 点击Tools->Deploy Pcell Designer Library
- 可以把开发库(一般用dev命名),发布到不带dev的库中
- 这样就可以实现彻底的编码加密,实现自己的pdk。
- 如果想要调用别人的pdk进来,使用instance的命令。
- 调用一个晶体管进来
- 然后就会显示所有的可调参数,然后添加进来used parameter,这样就可以做嵌套式的pcell
- 成品后的效果
- 这里就可以像PDK库里面的电感一样改参数了
- 对于复杂电路,PDK上没有这些元件,就需要自己另外设计了。
- 类似下面这个电路图,需要挖槽才能做出足够粗的电感。
笔记总结