Virtuoso Ignore(Open)Instance and Short Instance for export netlist

本文始于2025年4月,主要介绍如何使用Ignore(Open)Instacne 与 Short Instance功能,以及用实际案例演示使用这两个功能后,对比original-netlist和processes-netlist的区别。


我们知道designer在schematic设计初期,为了方便模拟含有寄生参数的post-sim或方便调整相关参数,往往会在schematic中增加一些调试器件,如:iprobe、res、cap、pvdc等等,然而这些器件在PDK中并没有对应的版图,仅仅是为了模拟调试用。但正因为有这些器件的存在,它们会对original-netlist产生一定的影响。所以为后续能正确使用netlist进行LVS或PEX,我们需要对这些调试器件进行处理(Ignore或Short或delete)。

📌 阅读本文前,建议先了解.simrc文件作用,本站相关文章,点这里。(撰写中…)

存在如下schematic作为案例讲解,如下图,蓝色框中的器件均为调试器件,来自库(analoglib)。

对于上图schematic,由于调试器件在layout中没有对应版图,所以正确的netlist需要将”R2″和“IPRB0”两端net进行Short,对“C1”进行Ignore。当然还有一种最简单的方法:删除”R2″和“IPRB0”的器件,然后再手动连接两端net;再将“C1”直接删除,最终产生正确的netlist。但对于存在较多调试器件的schematic的案子,难免会发生漏删或错删。所以下面将介绍在不删除调试器件的情况下,也能产生正确的netlist。

请继续往下看。

开始分别介绍Ignore(Open) Instance 和 Short Instance的方法:

1. Ignore(Open) instance

这里有3种方法可供选择:

1.1 在Schematic界面中,菜单栏Edit—Ignore Instances,然后点击”C1″器件,此时会看到会有红色的大”X”(如下图所示),表明此cell在抽取netlist时,被忽略。

1.2 在schematic中选择”C1″器件,按q,在弹出的编辑器件属性对话框中为器件添加“Ignore”属性,如下图所示:

🧠 可以注意到1.1和1.2方法本质是一样的,只是形式不一样。

💡 Tips:添加属性的方法需要对schematic有编辑权限。

1.3 在.simrc文件中添加对应忽略语句

🌟 语法介绍:

hnlUserIgnoreCVList=list(
;;; all cells from this library
"libN"
;;; cell1, cell2 and cell3 from lib1
list("lib1" "cell1" "cell2" "cell3")
)

上述代码表示:在 libN 库里面所有的cellviews在netlist中都将被忽略;在 lib1中,只有cell1 ,cell2,cell3的cellviews在netlist中将被忽略。

📝 在此案例中,忽略analogLib库中的cap (C1),那么此时在.simrc文件中应写入如下代码:

hnlUserIgnoreCVList=list(
list("analogLib" "cap")
)      

✅ 介绍了Ignore instance的方法,现在我们对比下original-netlist和Ignore C1的netlist,对上述schematic案例导出netlist;可以明显看到Ignore C1的netlist中没有对应C1器件相关的描述,如下图所示;

2. Short Instance

这里有2种方法可供选择:

2.1 在schematic中分别选择”R2″和“IPRB0”调试器件,按q,在弹出的编辑器件属性对话框中,分别为器件添加“short”属性,如下图所示:

对于多端口的器件的short,请参考如下示例:

lxRemoveDevice(short(A B)short(C D E F))

以上语句在此示例中表明:

A和B端口短路;

C和D,E,F端口短路。

2.2 在.simrc文件中添加对应short语句

🌟 语法:

hnlUsershortCvList=list(  
;;; all cells from this library
"libN"
;;; cell1, cell2 and cell3 from lib1
list("lib1" "cell1" "cell2" "cell3")
)
 ###适用两端口器件short
hnlUserMultiTermShortCvList=list(
list("lib" "cell" "view" "(short(A B) short(C D E F)"))
)
###适用多端口器件short

📝 在此schematic案例中,short调试器件“R2”和“IPRB0”,按如下写法:

hnlUsershortCvList=list( 
list(“analogLib” "res")
)
hnlUserMultiTermShortCvList=list(
list("analogLib" "iprobe" "symbol" "(short(PLUS MINUS))")
)

⚠️ 请注意:这里“IPRB0”被认为是多端口器件,所以它对“hnlUsershortCvList”语句不适用,需要用多端口语句short。

✅ 介绍了short instance的方法,现在我们对比下original-netlist和short “R2/IPRB0”器件后的netlist,对上述schematic案例导出netlist;从M0和M1器件两端的net名可以明显看到,器件R2和IPBR0真的被短路了,如下图所示;

💡 Tips:设置了short属性的调试器件,对于两端net名称的保留同样可以通过.simrc文件的相关语句来设置。相关涉及到的语句如下:欲了解语句的用法和含义,请参考Virtuoso Help——anasimhelp.pdf。

1. hnlEnableDriverLoadBasedShortRule
2. hnlEnableTerminalShort
3. hnlSurviveshortSigLen

3. 问题与讨论

3.1 当调试器件被串联到电路中时,使用Ignore instance和short instance有什么区别?

Ans:Ignore instance将被视为open net,而short instance就是真正的short net。

📝 以本文schematic为例说明:分别对调试器件”IPRB0″进行Ignore 和 short ,然后对比netlist,如下图:

3.2 版图做LVS时,当没有使用文中的方法时,还有什么其他的方法呢?

Ans:

方法1:请在Calibre LVS Options中include选项中加入如下语句即可:

LVS FILTER R(RP)SHORT
LVS FILTER C(CP)OPEN

💡 tip1:方法1当你在Calibre LVS Options中的Report选项中勾选LPE和SPE时 ,LVS会报net出错;

💡 tip2:方法1只能Ignore和short 两端口的器件,对多端口的器件不起作用。

方法2:参考1.2小节方法,对调试器件添加 lvsIgnore属性。

💡 tip1:方法2相当于Ingore(open)Instance,对于需要short的Instance,请依旧按文中short方法设置。

3.3 当使用Virtuoso Layout XL 生成版图器件时,如何避免因调试器件而中断Layout XL中net的情形?

Ans:在LayoutXL 界面,菜单栏Launch—Configure Physical Hierarchy后,参考下图设置;

4. 参考

【1】Virtuoso Help——anasimhelp.pdf

5. 获取参考文档

关注【蓝色天空】博客的公众号,并在公众号里发送对应的下载关键字【KX001】获取下载链接。

发表评论