jake的个人空间 https://blog.eetop.cn/1592 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

Innovus streamOut 版图GDS导入 Virtuoso 流程

热度 51已有 15202 次阅读| 2021-5-9 01:07 |系统分类:芯片设计

混合信号(Mixed Signal)芯片,尤其是AoT(Analog on Top)风格,数字部分版图Innovus里实现,需要把Innovus的版图导入到virtuoso中。方法有几种。

-        Innovus DEF out, Virtuoso DEF in 这个方法最古老。现在用得很少了。

-        Innovus stream out, 生成 GDS, Virtuoso XStream in 这个方法很常用,尤其是不支持 OA PDK。本文主要讲这个方法。  

-        Innovus oaOut 存成 OA, Virtuoso cds.lib 里加上 Innovus 生成的 OA libraryVirtuoso 就可以直接读了。 这个方法尤其简单,适用于支持OA并有标准元的OA库的PDK   

GDS 本身是个标准。 GDS 里用数字代表层(layer) GDS里用 dataTypelayer附加一些信息。dataType也是数字。

Encounter/Innovus用字符串代表层,如M1代表金属层1。为了把Innovus里的层信息对应到GDS的层,需要用到一个映射文件,通常文件名为streamOut.map。有的PDK提供这个映射文件,很多不提供,需要自己生成,下面会介绍自己生成streamOut.map的方法。

Virtuoso 也用字符串代表层,为了和GDS的层对应起来,也需要一个映射文件,通常称为 cds2gds map,文件名通常为 <process>.layermap 这个文件的格式和 Innovus streamOut.map 相似,但实际语法是不同的,千万不要混淆。通常PDK应该有这个 <process>.layermap

 

Innovus streamOut.map 可以自己生成。

1.  生成 streamOut.map 模板

Innovus 里,运行 streamOut 命令,不加 -mapFile 选项,Innovus 会自动写出一个streamOut.map 模板。修改这个模板可以生成自己所需的 streamOut.map

streamOut EXPORT/clksw.gdsii \

-attachInstanceName 127 \

-libName DesignLib \

-merge { \

<path to standard cell library>/<standard cell>.gds \

} \

-mode ALL \

-units 1000 \

-dieAreaAsBoundary

 

2. 修改模板生成 streamOut.map

Innovus streamOut.map 格式是4列,第一列是Innvous layerObjName,第二列是layerObjType,第三列是layerNumber,第四列是dataType

下面是Innovus 自动生成的streamOut.map模板例子,格式是对的,但是第三列layerNumber显然不对,实际的层序号不是从1开始递增的。第三列肯定需要改。

image.png

第四列dataType中数字的含义需要查<process>.layermap确认一下。例如,模板里第四列所有数字都是0,通常0代表drawing,意思是版图里必须画出来。在<process>.layermap里可以看到类似下面这样的信息。由此可以判断0对于大多数层应该是对的。最终的版图中我们希望看到这些层被画出来。

image.png

但是,不是所有的层都需要画出来的。有的层只是提供一些文字信息,帮助顶层版图工程师了解一些netpin,帮助顶层连线。例如,模板里的第一列是 NAME的那些行,只是提供辅助文字信息,并不是实际芯片的层。对于这样的文字信息,通常放到一个对应文字的层上。查询<process>.layermap,可以看到127层是专门给文字的。这个PDK还对文字有进一步的细分。例如,M1 层的文字,放到127层,加上dataType 属性 31。细分的好处是更灵活一点,在版图工具可以选择性的显示127层某个细分的文字。

image.png


回到模板。现在我们知道大致分两类层。一类是必须要画出来的drawing类层,一类是文字信息text层。下面要做的就是查询<process>.layermap,修改模板里的第三第四列。例如,模板里所有M1层,经过查询修改后,就成了下面这样。 可以看到,M1有关的文字都放到了‘127:31’层。

image.png


3.  Innovus stream out 导出合并GDS

有了正确的streamOut.map文件后,就可以生成GDS了。Innovus里只对金属,VIA层进行操作,并不修改标准元内部。默认导出的GDS只有金属,VIA层。很多时候,顶层版图希望看到一个合并了标准元版图的完整的GDS。这时,streamOut命令就要加上标准元GDS文件,通常在标准元库里可以找到。

streamOut EXPORT/clksw.gdsii \

-attachInstanceName 127 \

-libName DesignLib \

-mapFile ./streamOut.map \

-merge { \

<path to standard cell library>/<standard cell>.gds \

} \

-mode ALL \

-units 1000 \

-dieAreaAsBoundary

上面命令例子里加了-attachInstanceName 127 选项,意思时把instance 的名字放到127层。

 

4.  Virtuoso XStream In

最后就是 Virtuoso 导入上面生成的 GDS文件了。

image.png

导入后跑一下DRCstreamOut.map 有错的话,会丢掉一些层,或是放错了层。DRC 可以很快找到这样的错。

 

好了,流程大致这样,需要耐心。



补充1 – Virtuoso 导入XStream In 时如何避免重新生成标准元的layout

XStream In默认情况下导入时会在target library里生成所有GDS里用到的标准元的layout view 很多时候这是不必要的。 如果Cadence Virtuoso环境中已经有了标准元库,导入GDS 时只需要reference 已有的标准元库,不必重新产生设计中使用到的标准元的layout

XStream In 菜单里点下方的More Options

image.png

Mapping,点Ref Lib File Name 最右边的编辑键。

image.png

加完reference lib之后点Save As and Exit,保存。

image.png

随后再导入就可以了。可以看到strmIn.log中有这样的INFO

INFO (XSTRM-287): The STRUCTURE 'IND2D2' in the input GDSII/Stream file will not be translated. This is because either the refLibList option is used and the cellview is available in the reference library 'tcbn55hv' or the STRUCTURE is not mapped to the target library using the cell map file/piCellMap SKILL function.

Cadence里打开生成的layout view 默认下只能看到金属和VIA层,看不到标准元的layout。按SHIFT+F,把reference library 中标准元的layout也转进来,显示所有的层,就可以看到完整的laytout了。



补充2 – 如何解决字体过大的问题

有两个办法。

1)在Innovus里用命令改字体太小。这里0.2意思是改成默认字体的20%。视力好的朋友用0.1也是可以的。

setStreamOutMode -textSize 0.2

2)在Virtuoso XStream In 的时候改。 与补充1相同,在XStream In 菜单里点下方的More Options

Geometry,修改 Scale Text Height.

image.png



补充3 – Innovus 默认streamOut.map里的COMP 层

Innovus 生成的默认streamOut.map 模板里会有一个COMP层。

NAME         COMP         127          0

COMP         ALL          128          0

COMP 是一个 Innovus 专有的层,用来在标准元周围画一个长方形的框。这是一个虚拟的层,在<process>.layermap中通常没有对应的层,可以在 streamOut.map 里把上面这两行都删掉。


这里还有一个小技巧。 如果在默认streamOut.map模板里碰到一个层,不确定对应<process>.layermap里哪个层,可以暂时把这个层放到一个用不到的层上。例如,上面提到默认模板里的COMP可以暂时在streamOut.map里放到258层。

COMP         ALL          256          0

Innovus导出GDS后,用GDS工具打开看一下258层上画了些什么。一般看一下就能很快判断层的实际用途。还不确定的话在Cadence 里打开一个标准元的版图,看看有没有对应的层。如果有对应的层,回过去再修改streamOut.map再走一遍。

Cadence PVS 里有一个名为QuickView的工具,命令是k2_viewer,可以打开GDS,很好用的。


补充4

最近一个项目,top level layout 希望把M1 PIN, M2 LEFPIN 当成drawing和M1 NET 放到一起,把 PIN 的 label 放到 pin layer 上,成了下面这个样子。

streamOut_latest.png


44

点赞

刚表态过的朋友 (44 人)

发表评论 评论 (11 个评论)

回复 zzsz1213 2021-6-11 15:54
好文章啊 帮助了我很多 谢谢!
回复 jake 2021-6-11 23:28
zzsz1213: 好文章啊 帮助了我很多 谢谢!
不客气,很高兴能对您的工作有所帮助!
回复 燕南飞 2021-10-9 09:37
你好,在virtusuo中stream in的时候我可以不填laymap,直接将pdk库与创建的这个库attach也可以,这样的方法行吗?
回复 zhouxuan2016 2021-11-22 15:20
NICE
回复 skin 2022-11-29 22:49
这种方法还需要链接到 模拟用的那套库不
回复 jake 2022-11-30 10:41
skin: 这种方法还需要链接到 模拟用的那套库不
XStream In 会用到标准元库,参考补充1
回复 cmxunyicao 2023-4-3 13:46
好文章啊!
回复 逐末 2023-11-17 09:08
mark,学习学习
回复 仁黎冰 2024-7-30 15:06
想問假如在innovus bus pin的名字是out[0:7],在streamout的過程如何自動生成virtuoso、spectre習慣的out<0:7>這種形式的lable pin呢
回复 jake 2024-7-31 10:20
仁黎冰: 想問假如在innovus bus pin的名字是out[0:7],在streamout的過程如何自動生成virtuoso、spectre習慣的out<0:7>這種形式的lable pin呢 ...
Please refer to 补充2 method 2) - Click on "More Options", with Mapping highlighted (default) in the left side panel, at the bottom of the window, check the box "Replace [] with <>"
回复 仁黎冰 2024-8-8 18:26
jake: Please refer to 补充2 method 2) - Click on &quot;More Options&quot;, with Mapping highlighted (default) in the left side panel, at the bottom of the w ...
感谢  

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 1

    关注
  • 275

    粉丝
  • 96

    好友
  • 356

    获赞
  • 294

    评论
  • 2580

    访问数
关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-19 05:46 , Processed in 0.017932 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部