热度 4| |||
先介绍PyCell Studio,PyCell Studio使用的开源的Python 程序语言生成OA的database的pcell 工具。创建的pcell可以支持多种EDA tool,Python API提供了非常丰富的类和方法用来创建layout的pcell。因为使用的开源python所以很容易进行拓展,入门也非常方便。
Custom compiler 的UDD (user define device)的功能背后就是利用了pycell studio的进行编译出pcell。我们也可以基于UDD 生成的基础pcell 的python code 框架 ,然后进一步直接python开发。
你可以从custom compiler的安装目录下找到相关的技术文档和tutorial资料数据。
可以按tutorial的文档一步步测试。PycellStudio也提供了debug和python IDE 供debug和python code 开发。
下面是我做的一个小示例(金属电阻)来演示生成pycell的过程。
首先创建在pyCode目录下面创建 __init__.py,如果有多个cell compiler到lib里,可以在这里添加完整。如下是powerMOS 和MyRect cell 。
这里是rect.py 对应代码:
结构比较简单,定义parameter信息,然后根据parameter值生成对应shape。下面这里是编译的command,在terminal中执行即可。
cngenlib --update --no_core_dlos --bundle=encrypted_source pkg:pyCode test_gr ./test_gr
pkg:pyCode 后面是所有python code的文件夹, test_gr是编译出的pcell 导入的lib 后面对应lib的path。
如上就可以生成MyRect 这样的pcell了,为了配合使用我们可以 对应创建一个symbol,方便调用。保持跟pcell 中的pin名称对应一致一端为in 另一端为out。
我们可以看到从电路上可以直接pick出这个自定义的pcell了,并且pcell 中定义的两端pin也会自动带上电路上的net信息。
如果想要导出cdl 中也有要对应导出,还需要在CDF 里设置auCdl相关定义。
到这里pcell layout已经好了,其实还有个问题,因为金属宽度不能无限制,所以还需要添加callback函数。当输入大于某个值时,要强制设成max width上。
如何添加callback函数,等后面章节再来介绍。
下面是一个基于UDD的pcell框架,利用python的二次开发的POWER MOS。是个比较复杂的pcell,采用ESD rule的画法,把一些常需要调整的地方做成参数化。主要是因为要实现的场景组合非常复杂,如果全部使用UDD来开发会生成非常多的步骤debug起来也不是很方便。但是如果直接用Python来做的,可以通过判断重复调用减少很多重复的步骤。代码结构也比较清晰。我们在compiler UDD 的时候cc 会自动带出来对应的python code。可以基于这个code 来添加修改。
添加了各层金属方向的parameter,使用上非常灵活,需要什么方向的走线组合都可以实现。
作为python的小白,能很短时间内完成上面这些pycell,感觉还是很棒的。给后面可能遇到的问题提供一些新思路。pycell studio里提供的Python API有很多示例对于新手来说是很不错的借鉴。