使用Cadence工具完成数模混合设计流程简介
众所周知,Cadence的Virtuoso是模拟设计领域的核心工具,市占率达到75%,随着近些年来Cadence在数字版图设计(APR)领域的崛起,invs,PVS等一众工具也都成了很多公司的首选后端流程工具。依照强强联合的逻辑,将数模实现工具进行协同部署看起来就是那么的水到渠成,这里就以OA数据为起点,简单介绍一下MSOT的简单流程。闲言少叙,ICer GO!
通常而言,数据交互是跨工具的主要问题,所以常用的LEF/DEF/V/UPF/SDC etc.便成为了数字流程的主要交互文件,但是对于Virtuoso,由于是模拟的设计理念,上述的方法不是很合适,这里就需要引入Cadence的**OA(OpenAccess)**数据平台。
数模混合设计(Mixed-Signal Design)概略
从Virtuoso IC61开始,数据都是以OA为数据保存格式的,尤其到了OA2.2,已经可以实现很多公司/工具的数据互通, 包括Synopsys,mentor,TSMC等大厂的工具,譬如S家的Laker就可以和C家的virtuoso通过OA做数据互通;Calibre也可以打开Virtuoso的OA数据库等。
类似的,innovus也提供OA数据创建、读取和存储,这样就可以实现innovus和virtuoso的数据沟通。有了这种数据沟通,就可以解决一定的芯片设计需求。
对于现代的MS(mixed-signal)的芯片设计无外乎以下两种设计方法:
-
Ad(大数小模,下左图)结构:virtuoso 做top-design,顶层以及大部分工作在virtuoso完成,剩余的一小部分digital在innovus完成,两者通过OA协同,最后使用virtuoso 完成TO
-
Da(大数小模,下右图)结构:innovus做top-design,顶层以及大部分工作在innovus完成,剩余的一小部分analog在virtuoso完成,两者通过OA协同,最后使用innovus 完成TO
如果,对于模拟数字交融的更为深入的情形,那么无论是使用vitruoso还是innovus完成最终的TO,二者都可以在数据的任何阶段进行交互(PS:top的流程需要在项目初期定义完成,避免反复迭代)。基于此Cadence提出了(MSOT)的流程理念,这样可以进一步淡化/模糊数模边界,对于一个完整的设计也可以相对比较灵活,Cadence相信这样可以更有利于设计的实现效果:
所以,无论是上述Da,Ad抑或MSOT,这个流程都需要对virtuoso和innovus两个工具使用统一的设计数据平台:OA数据。从不同的工具角度去看,OA数据也有些微的差异:
-
下左图:virtuoso工具对于设计库的需求(PDK):techdb, techfile.tf,pcell etc.
-
下右图:virtuoso工具对于设计库的需求(LEF):techlef,std-cell lef ,macro lef
OA DB 的创建和使用
如上所述,如果一个OA可以包含PDK和所有库的LEF,那么就可以在virtuoso两个工具在做平滑切换。这里有一个点要明确,对于virtuoso通常关注在模拟设计、版图和仿真。而innovus需要关注的更多的是place,CTS和route,这个可能会在除去基础的OA外用户需要额外关注的。
综上Cadence给出的解决方案就是:MSOA PDK (MixedSignal OpenAccess Process Design Kit ),这个OA的数据结构是包含了上述virtuoso和innovus两者都需要的东东。
- Foundry rules (from PDK)
- DR: default routing rules
- Spacing/pitch/width
- Tech LEF:
- NDR: none default routing rules
- Antenna
- Std-cell LEF
- IP LEF
Cadence提供一个流程帮助用户在innovus里边创建OA数据库,来作为数据的起点(PS:类似的用户也可以在virtuoso作为数据起点)
OA库通常是由三个部分组成(从底到顶的次序)
- Technology DB:工艺相关的rule,layer等信息
- Library DB: IP/pcell/std-cell等基础设计单元和对于的view管理
- Design DB:原理图,版图,网表等
考虑到工作数据维护的便利性,OA提供了refLib的理念,这个refLib通常只囊括工艺(technology)相关的信息,对于实际的设计库,用户可以对其进行对应的设计(design)和基础设计单元(library)的添加和维护。可以简单理解refLIb就是basic OA,设计的OA都可以将以这个refLib作为起点。
这里呈现一个以innovus为数据起点的简化版的OA lib常见流程。依照上述讲解,一个OA的lib的创建至少是需要两个步骤的。具体流程见下图:
- 打开任意一个已经完成init design的invs数据库
restoreDesign DBS/design.init.enc.dat design
- 导出OA tech file
这个可以理解为将invs的tech.lef转换成virtuoso的的基础技术文件:techfile.tf ,但是由于invs是一个简化的设计环境(相较模拟设计而言),所以这里的数据量会较少,但是使用这个的好处是,用户不用去花费大量的时间去解决techfile.tf和tech.lef的冲突。
write_oa_techfile oa.tf
- 创建OA的reference lib
基于上述的oa.tf创建的reference lib,可以理解为一个带入了fab设计规则OA lib
techLoadDump -l -createLib oa.ref.lib oa.tf
基于OA系统数据规则,任何对于OA lib的创建都会在当前目录下的cds.lib添加OA lib的信息,如果cds.lib文件不存在则会自动重建。(PS:由于virtuoso和invs在调用OA lib的时候,都会使用这个文件,不建议手动修改/移除这个文件,)
# file cds.lib
# indication libname libpath
DEFINE oa.ref.lib oa.ref.lib
- 准备LEF文件
在一个完成init_design的invs数据库中,是可以方便的管理所有的LEF文件的。包括tefh.lef。所以invs提供了一个简单的命令,可以将LEF分类别导出
# dump tech LEF
write_lef_library -tech_only tech.lef
# dump ALL IP/std-cell/antenna LEF
write_lef_library -macro_only macr.lef
- 创建OA lib
有了上述的结果,此处可以创建OA lib了,此处分两步
- 基于OA ref lib创建design的OA lib
lef2oa -pnrLibDataOnly \-lef tech.lef \-techRefs oa.ref.lib \ -lib design.oa.basic.lib
- 基于macro LEF 对OA lib进行增量调整
lef2oa -lef maco.lef \-lib design.oa.basic.lib
这里创建了新的OA lib,所以cds.lib就会增加一个条目
# file cds.lib
# indication libname libpath
DEFINE oa.ref.lib oa.ref.lib
DEFINE design.oa.basic.lib design.oa.basic.lib
到此design的OA lib就创建好了,这个OA lib和DBS/design.init.enc.dat相比,除过没有实际的design(netlist)外,其他的fab、tech、IP等信息是完全一致的。
用户可以把这个OA DB作为一个新的起点,对实际的设计进行导入,就可以完成design OA lib的部署:
Note:由于cds.lib的控制,下面的动作需要和上述命令在同一目录下:
使用OA数据库构建floorplan:
1:配置basic OA lib
set init_oa_ref_lib design.oa.basic.lib
2:配置netlist
set init_verilog design.dc.v
3:配置top cell name
set init_top_cell design
4:配置mmmc
set init_mmmc_file design.viewDefinition.tcl
5:初始化design
init_design
6:导入floorplan DEF
defIn design.fp.def
7: 用OA数据结构保存数据: {lib_name top-cell view}
saveDesign -cellview {design.oa.floorplan.lib design floorplan}
同样,cds.lib再一次添加了新条目
# file cds.lib
# indication libname libpath
DEFINE oa.ref.lib oa.ref.lib
DEFINE design.oa.basic.lib design.oa.basic.lib
DEFINE design.oa.floorplan.lib design.oa.floorplan.lib
在invs里边,打开OA数据库,并完成place
1:打开floorplan OA 数据库
restoreDesign -cellview {design.oa.floorplan.lib design floorplan}
2:完成place
place_opt_design
3: 保存place数据库
saveDesign -cellview {design.oa.floorplan.lib design floorplan}
cds.lib再次加入一个新的条目
# file cds.lib
# indication libname libpath
DEFINE oa.ref.lib oa.ref.lib
DEFINE design.oa.basic.lib design.oa.basic.lib
DEFINE design.oa.place.lib design.oa.place.lib
这里对同一个OA DB(design.oa.place.lib)分别使用invs和virtuoso打开,作为跨工具工作的一个注脚
这里以invs数据库为起点,完成一个OA lib的创建,这个和Traditional MSOA PDK相比,少了tech rule (techfile.tf , 通常来自于PDK)的带入,简化的原因是由于tech.lef和techfile.tf通常有一些冲突/差异,其他的步骤都是一样的。完整的Traditional MSOA PDK如下,可以作为参考理解其中的原理
到此,用户已经使用OA的数据库完成了在invs里边的place步骤,此时用户如果需要,这个OA数据是可以直接传递给virtuoso(或者laker)用户,完成后续的和模拟相关设计动作,然后可以再次返回invs进行后续的处置。用户可以根据实际情况基于同一数据库灵活选择设计工具,从而推进Da或者Ad的设计。感谢Cadence的伟大创举,感谢OA平台,打通了数模设计的数据平移。
【敲黑板划重点】
基于OA数据库,发挥innovus和virtuoso的工具优势和特长,打破数模设计的阻隔,发挥不同工具的优势,完成芯片设计的诉求。
参考资料
Cadence Mixed Signal (MS) Interoperability Guide