Step by Step 教你使用UDD做Pcell

文摘   其他   2023-11-29 18:17   江苏  

遇到很多需要定制pcell的场景,例如为了更方便的做电源连接网络,方便调整metal宽度间距等。敏感区域的对称dummy metal fill,或一些定制device等。使用pcell的方案要比实际layout更加方便。Udd 就像一个模板一样可以很快porting到其他工艺制程上。

下面介绍在custom compiler (以下简称cc)里如何使用UDD (use define devices) 功能创建pcell.

1.首先创建UDD cell,在cc里创建udd 开头的viewType类型.如下图views 对应为udd.

2.创建完udd view后打开即可在layout窗口左侧出现UDD Assistant的工具栏,udd的部分定义操作都是在此窗口中定义的。这里分成三类,第一栏为Objects:这里是UDD使用的基础layers是用户实际画的layer信息。第二栏为Operations:这里是对基础layers可以进行的一些操作,例如 做Align Size 布尔运算等,后面会有部分介绍。

第三栏是parameters:这里是定义pcell的cdf 参数有哪些,cdf 参数的数据类型等信息,以及pcell 中需要定义成变量的信息。如下图:    

3.定义parameter,从udd assistant中打开Parameter Definition Editor界面添加对应的参数与默认值等信息如下图:

回到UDD Assistant 界面会更新出添加的CDF parameter信息,这里只定义一个简单的mos所需要的length width 和finger如下图:    

4.先在layout窗口中画出需要的基础layer,然后在Objects 栏中定义此object 所对应的attribute信息。如下图所示对应的layer的宽度长度以及layer属性均可以参数化,同时支持数学运算python语法。未来方便此demo部分数值没有参数化。    

5.UDD 每一步操作均可以使用preview 功能查看所定义是否生效。如下讲定义好的poly 和diff 进行添加中心点align操作后preview即可看到下面右图效果。两个图层已经按中心点进行Align的效果。    

6.下面添加源漏区域的metal1,以便确定需要填充contact的区域位置。这个metal的宽度也是可以参数化的。

7.我们把这个metal1 跟mos的左边界进行Align对齐,这里对齐的space设成了0.也可以根据需要自己定义。如下图:    

8.此时mos 左边界的Metal 位置就确定好了,这时即可对metal的区域进行填充了,在fill的功能,这里补充一句对每一步操作进行有意义的命名,方便后面进行引用。下图fill 中定义需要填充的layer 和size 间距等信息。    

9.定义完成后使用preview 功能查看是否符合预期。填充时可以定义自适应space 还是使用min space。下图箭头位置下拉option.


10.接下来使用copy的功能把左边的metal 和contact copy到mos的另一边.这里需要注意的时contact 是通过fill 操作得到的,所有copy时选择fill那步的operation 名称。对应的pitch 可以通过运算得到。    

11.重复copy contact的动作,可以把metal也copy过去。

12.接下来完成finger相关的功能,这里finger的数值改变对应这gate的数量变化。那我们也可以使用copy的功能把gate copy出去。如下图:    

13.重复上一步操作把需要的layer 都对应copy到finger上。

14.接下来我们给这个mos添加衬底layer。这里使用size的功能,沿poly和diff 的边界进行size 动作。首先把finger下diff 和poly 做个“或”操作.得到merge的效果。这里需要注意生成的层次并非mos中所需要的,所有使用完这个templayer 后需要进行remove 动作。    

15.通过Size的操作将上一步的临时层进行涨size的动作即可得到扩充的NPLUS layer 如下图    

16.此时通过preview 看到基础mos的形状了。

17.在确认一切符合预期后,通过compiler udd 的功能生成对应的pcell。如下图执行完console 中显示编译完成。    

18.调用制作的pcell 进一步验证。改变三个参数都能正确对应其行为。

19.如前面所说,我们可以把以后可能需要改变的地方均用参数代替,例如poly 伸出diff的长度,源漏边界到gate的space等,都可以在user parameter定义,在Objects 和Operation中引用对应的变量。

   

   

IC模拟版图设计
IC 设计后端知识分享 EDA使用心得 Linux 环境 脚本分享 Perc开发 Custom compiler