分享

定制自己的Pcell——简单的Pcell实现

 拾泉老人 2022-01-02

作者:北京百里半网络技术有限公司



从PDK中很容易调用器件的版图,并且可以根据需要修改参数,那么PDK中可以修改参数的器件是如何实现的呢?今天给大家介绍一下参数化单元(parameterized cell, Pcell)的设计环境,可以设计满足自己需求的Pcell.

什么是Pcell

Pcell也就是参数化单元,可以看作是一种可编程单元,允许用户通过定义参数创建实例。 在调用Pcell的过程中为参数赋不同的值,可以创建不同的Pcell实例。 

比如,可以在版图中调用PDK中的MOS器件,然后根据设计参数修改MOS器件的W、L、是否添加Gate过孔、是否添加源漏连接等,这些都可以通过Pcell实现。

可以使用skill程序创建Pcell,也可以使用Virtuoso Pcell应用程序以图形方式创建Pcell

使用skill程序创建Pcell更加灵活,也是Cadence推荐的Pcell创建方式,使用Virtuoso Pcell应用程序以图形方式创建Pcell更加方便,并且需要很少的skill编程基础,适合初学者,往往也能满足大部分的设计需求,以下内容都是以图形化方式创建Pcell.

Master cell和Submaster cell

首先了解几个概念,可以认为Master cell就是PDK中提供的Pcell, 它所包含的各个参数信息已经保存,可以打开PDK中的Pcell, 查看包含的参数信息。

Submaster cell是通过调用Master方式生成,在调用Master cell时对不同的参数赋值不同也就产生的不同的Submaster cell,其中Submaster cell的信息保存在内存中。

器件调用时不同的实例(instance)可能会对应同一个Submaster.
图片
简单的Pcell实现

Pcell的设计环境与版图设计环境基本一致,所有操作也都是在版图设计基础之上完成,在版图设计界面:Launch->Plugins->Pcell, 即可开始Pcell设计。

Pcell是在版图基础之上实现的,所以首先需要完成Pcell对应的版图部分工作,然后定义不同的参数,并将不同的参数赋予不同的意义,实现Pcell的功能。
图片
以NMOS的版图为例,在此版图基础上设计Pcell, 可以参考PDK中提供的Pcell学习,逐步实现PDK中提供的Pcell功能,熟悉之后可以根据自己的需求自定义Pcell.

简单的Pcell MOS管 可以完成以下功能:

  • 修改MOS管W:可以根据需要修改MOS管的W参数,并给定范围。
  • 修改MOS管L:可以根据需要修改MOS管的L参数,并给定范围。
  • 自动调整源、漏接触孔:在MOS管的W参数改变的同时,可以自动增加或者减少源、漏接触孔数量。
开始设计具有上面功能的Pcell之前,需要了解一下Pcell设计中的几个基本概念,这些在Pcell设计中会经常使用,理解这些概念对Pcell设计有很重要的意义。
图片

Pcell设计的plugin包含的命令在上图中可以看到,每一个命令对应不同的参数化功能,Pcell的所有功能都是利用上面不同功能的组合实现。

  • Stretch: 与版图中拉伸工具实现相同的功能,可以对部分版图进行拉伸,其中Pcell的很多尺寸改变都是通过这一命令实现,比如:W、L值的改变。

  • Conditional Inclusion: 根据设置的条件包含或者去除某些对象,比如:当W大于某一值时自动增加finger数。

  • Repetition: 复制对象参数,比如实现在MOS管的W参数改变的同时,可以自动增加或者减少源、漏接触孔数量。

  • Compile:定义完参数的版图一定需要通过编译才可以作为Pcell使用,可以选择直接编译成Pcell或者生成相应的skill脚本。

了解以上四个功能即可完成上面给出的设计目标,剩下的功能在后面会慢慢介绍,首先介绍一下这四个基本功能的使用。

Stretch功能:实现对象的水平或者垂直拉伸,使用时首先需要画一条control line, 作为stretch命令的参考线,之后会弹出对话框,输入本条stretch命令的namereference dimension等。
图片

对于refernece dimension很多初学者都不容易理解,其中有一种方法可以很好记住:这个值就是当前版图中你想要stretch对象的尺寸,也可以认为为Pcell中该参数的默认值。


上图中定义了沿X轴方向的Stretch命令用来定义Pcell的栅长,那么相应的reference dimension值就是此时MOS管的栅长(0.35),那么调用该Pcell时默认的栅长也就是0.35.

stretch direction:是指拉伸的方向,一般习惯使用两个方向同时拉伸,这样更改参数时器件中心坐标不会改变。但是为了方便设置Repetition命令,可经常定义单方向的拉伸。

图片

完成stretch control line的相关定义之后可以选择:Compile->To Pcell, 将设计编译为Pcell, 然后新建版图view, 调用自定义的Pcell,并打开属性对话框,观察改变参数时器件的相应变化。


按照同样的方法,定义一条沿Y轴的Stretch命令,用来改变MOS管的Width参数,注意这里reference dimension值应该和此时版图中MOS管的宽度对应,如下图所示。

图片

保存好设置,然后编译为Pcell, 再次调用并改变参数,观察器件变化是否和预期一致,如果不一致再返回修改参数设置。

图片

为Stretch命令指定对象:从上面的演示结果可以看到,contact尺寸会随着Width参数改变,这个是不希望的。

图片

在定义完Width命令的时候可以选择:Stretch->Qualify, 然后根据窗口左下角提示信息依次选择:Stretch control line, Stretch shapes. 比如在MOS设计中选择除contact之外的所有形状,然后再次查看结果。

图片
Repetition命令:用来实现复制功能,比如实现MOS管宽度变化时contact数量增减的功能。

Repetition命令还可以设置与Stretch命令关联,设置依拉伸总量决定复制数量(默认状态)或者设置依据复制数量决定拉伸量等。
图片
通过定义contact的复制命令,可以实现当MOS管Width参数改变时,自动计算contact数量,Adjustment to Stretch一栏可以先填0,以后再完善。

有一点需要注意,这时候关于Width的Stretch命令的拉伸方向最好不要选择两个方向同时拉伸,否则会导致contact无法对齐问题,关于这个大家可以实际操作一下,观察现象。
图片
通过简单的图形化操作,可以实现上面的NMOS Pcell器件,更多的Pcell制作内容会陆续给大家介绍,也希望对这方面内容感兴趣的同学可以多加尝试,有很多概念需要在实验中逐渐理解。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多