微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC后端设计交流 > 求助,calibre lvs的问题

求助,calibre lvs的问题

时间:10-02 整理:3721RD 点击:

请问各位
最近在看calibre的文档,发现lvs或者drc的时候,calibre提供了hier的argument
特别是lvs,我平时用的时候都会这样invoke calibre:calibre -lvs -hier LVS.rule
请问:hier和没有hier选项时候的lvs或者drc的区别到底在哪?
从现在我看的文档来看,貌似hier的好处就是用时比较少,只是这样吗,还是有别的好处和优点?

calibre -lvs 是flat
calibre -lvs -hier 是hier
DRC同上
hier的检查方式不同于flat的,可以帮助检查子单元的问题,有助于debug

非常感谢小编的解答
还有一个问题,hier的检查子单元,这是不是说如果设计有black box,而且black box在lvs的网表里面仅仅有接口信息,其他都没有,那使用-hier后,lvs会检查出错误,因为此时的spice的网表里面没有black box的任何详细定义。
注:
此时lvs的rule里面已经有了
LAYOUT BOX BB_NAME
SOURCE BOX BB_NAME

black box的用意是只关心端口连接信息,不关心其内部具体连接信息
LVS实际上就是检查电路网表连接情况和版图王彪连接情况,所以要是做hier的LVS BOX的话,就要把对应的单元都包含进去,也就是电路网表中要有.SUBCKT XXX部分的定义,版图中要有XXX模块,当然名称也可以不一样,采用LAYOUT BOX 和SOURCE BOX分别定义,如果名称一致就定义LVS BOX XXX
这样才是可行的

那请问小编
LVS的 hier是比flat要更严格吗?
flat是只检查同一层的连接?

没有谁比谁更严格的比较,只是对比的方式不同。都可以作为signoff标准。
hier的方式是阶层化,以cell为单位进行对比验证;flat的方式是平层化验证;从两者的lvs report也能看出差异,另外,hier的速度要快些,对于大的设计debug的时候更容易,可以把已经通过lvs的模块box掉,降低debug分析难度。hier需要自己对当前所设计版图的层次结构了解清楚,更好发挥作用。
另外,lvs debug时可以两种模式交替使用,也有利于分析判断。
以上只是个人看法,仅供参考

谢谢小编,还有一个问题,在source netlist里面定义subckt的时候,端口的名称是不是有什么讲究?比如说大小写敏感?端口顺序?先定义input后output?

嗯明白了!多谢!

source的.subckt不建议自己去写,如果没有电路设计经验,对概念不清楚的话,容易弄错。建议:
1。可以搭建电路让工具自己抽取
2。如果是verilog的可以v2lvs转

3。如果非要自己写这个模块的端口信息,那就要注意,调用该模块的上一级模块如何调用的,它会有一个端口顺序的描述,这样你的模块的.subckt的定义要和它吻合。
以上,仅供参考

小编你好,
我今天修改了LVS规则文件,同时还在v2lvs得到的spice网表查看到black box eeprom,接口什么的都正确了
跑lvs的invoke是:calibre -lvs -hier -automatch -Lvs.rule
lvs报告如下,从lvs报告来看,因为eeprom这个IP有电源名字VDD和GND,所以在报告里面看到layout部分有VDD和GND(可以确定这个VDD和GND在edi中一件连接到电源和地上了,也就是说P&R部分没有问题)
但是source netlist(v2lvs得到的)里面没有电源和地的pin,我想问问怎么样在source里面加VDD和GND
*********************************************************************
INCORRECT OBJECTS
**********************************************************************
LEGEND:
-------
ne= Naming Error (same layout name found in source
circuit, but object was matched otherwise).
********************************************************************
INSTANCES OF CELLS WITH NON-FLOATING EXTRA PINS
DISC#LAYOUT NAMESOURCE NAME
**************************************************************************
1X18/X0(780.620,473.490)eepromXeepromeeprom
VDD:VCC** missing pin **
GND:GND** missing pin **



如果没有额外的电源地的pin
可以尝试加入
.GLOBAL VDD VSS

看你的描述没有弄明白你的IP是写到verilog中调用的么?
如果是,那么上面的方法就没错
如果独立IP网表,独立数字部分网表,要整合出一个网表来进行LVS,那要另行处理

我的ip是在rtl级代码中,多加了一个如下的module
module eeprom(SIGNAL_name) ;
input signal_a;
input [7:0] cell_i ;
output dout ;
endmodule
module只声明了input和output的接口定义,然后去做dc,得到网表后,再去做edi,在edi的时候就可以加入这个ip(macro)。
同时,在edi的global net connection的时候,将eeprom的电源VDD和地GND,与全局的电源(VCC)和地(GND)连接起来了
关于电源:
VCC和GND是全局的电源,给core供电也给eeprom供电
小编的意思我明白了,
在spice网表中是否还需要加入一个
.CONNECT VDD VCC?
如此做,是不是还要在icfb中打label?
这个eeprom的ip,理论上是有自己的电源环的,只是在icfb里面看不到电源环,那么VDD的label打在哪?

这个eeprom的ip,理论上是有自己的电源环的-------有就是有,没有就是没有。首先你要在EDI或ICC中确保VDD/GND的连接!
如果你搞不清楚怎么弄,就把所有的电源地,统一成一个VCC,eeprom中关于电源,只要在spice中修正即可
VCC的label只要打在最外面就好了

小编你好,
我确定了eeprom绝对有电源环,而且在eeprom给的说明文档中,这个电源环的名字叫VDD,地GND
在edi的软件中 ,我在global net connect已经说明了将VDD和VCC连接起来,因为core的GND和eeproom的GND都是同一个,所以可以确定已经将电源都连接好了。
目前在lvs的spi网表中,已经将eeprom的VDD声明为.GLOBAL VDD。但eeprom的地因为叫GND,所以我没有再去声明一次.GLOBAL GND(core的地线就是GND,已经申明过了)
但是在lvs的报告,还是错了
当然,在声明了.GLOBAL VDD之后可以减少一个错误,但是eeprom的GND这根线,还是报错了,错误的意思是LAYOUT中有这个GND,但是网表中没有。

其实很简单,你可以把eeprom看成是一个stdcell去处理
verilog中是不涉及到电源地的,所以,你的问题点可以在两个地方处理,一个就是EDI中的GLOABL CONNECT那个定义
还有一个就是v2lvs前eeprom的spice的网表。
icfb中要记得给电源地进行打标。
最终还有不统一的就在生成的最终网表中修改就可以了。
layout中是唯一的电源地,所以你的网表中不想麻烦,也统一就好。可以在最终网表中用
.equiv VCC = VDD处理就可以把

在edi中,我可以确定eeprom的VDD和GND已经和全局的VCC,GND连接起来了。
现在的问题就在于,由于eeprom的GND和CORE的GND都是同一个名字:GND;
但是eeprom的电源VDD和core的电源VCC不重名

所以,在lvs的spice网表里面,有没有办法让EEPROM的GND也给写进去,然后在lvs的时候可以解决eeprom的layout有GND而source没有GND的问题

可以
你在lvs用的spice里,搜一下.subckt eeprom_name
然后在那些pin里面加上GND
对应的在top级网表里,搜eeprom_name,然后在调用该eeprom部分在对应位置添加GND
ps:你的eeprom部分是include进来的还是v2lvs的时候一起编译进来的?

谢谢小编
我的eeprom是通过v2lvs(也就是写在了rtl级代码里面)得到的,不是include进来的。

我知道,但是你的rtl中的eeprom不是空的么?

你最终的验证是不能带有black box,这就需要一个完整的spice网表

你的eeprom的版图是完整的,所以你的eeprom也要有完整的电路网表

所以……

LVS BOX只是辅助验证的,最终signoff的话,还是不能有LVS BOX的



小编你好,
我按照你的说法,在spice网表里面将eeprom的端口上面加上了VDD和GND线,并且在调用eeprom的地方也将VDD和GND连接上了。刚才还跑了一遍LVS,可以lvs也通过了。
但是小编你说,最终验证不能带BLACK BOX?这个,因为foundry没有给我rtl的eeprom内容,就是一个硬核,也没有其他任何可以调用的,如eeprom的spice网表。所以,在进行lvs验证的时候也就只能验证port,也就必须是black box。当然这样做就没办法去做后仿和sta,只能说在设计eeprom的控制器的时候要注意时序问题。
不知道我这样说的对不对,求小编指导

这样子,那没办法!只能当black box处理了

今天,我将设计流程做了一个变动,以前是将core和eeprom一起做出来的,现在因为一些原因,需要先单独做core部分,并提取出core的lef和gds。然后将core当成一个ip,再把eeprom部分加上,得到一个整体的芯片。
在做core部分的时候,已经将core的电源VCC和GND也做了电源环,并且core部分的最后lvs和drc没有问题,在core的spice网表结尾带有.GLOBAL VCC GND
加上eeprom部分后,因为eeprom的电源VDD和GND需要独立供电,而且已经有自己的电源环,所以在拼接的时候,没有在edi中将VDD和GND与VCC和GND连接起来,只是单独的连接了信号线
目前来看,core部分(名字为top)和eeprom其实都可以当做两个IP,并且都需要独立的供电,edi中只是将两个ip的信号连接完成
在做最后的lvs检查时,总网表中,INCLUDE了core部分的spice网表,对eeprom的处理还是采取了在spice网表中的eeprom声明部分加上VDD和GND两个端口,并且声明GLOBAL VDD GND,在调用eeprom的时候加上VDD=VDD GND=GND
但最后lvs报告错误,从错误来看,是因为eeprom的电源GND在spice网表中没有port,但是在layout中有;部分报告内容如下:
CELL COMPARISON RESULTS ( TOP LEVEL )
#######################
# ###
##INCORRECT#
# ###
#######################
Error:Different numbers of nets (see below).
Error:Connectivity errors.
LAYOUT CELL NAME:rfid
SOURCE CELL NAME:rfid
--------------------------------------------------------------------------------------------------------------
INITIAL NUMBERS OF OBJECTS
--------------------------
LayoutSourceComponent Type
--------------------------
Nets:4646
Instances:11HJ250EEPEE8K1PL_E (38 pins)
11top (44 pins)
------------
Total Inst:22
NUMBERS OF OBJECTS AFTER TRANSFORMATION
---------------------------------------
LayoutSourceComponent Type
--------------------------
Nets:4645*
Instances:11HJ250EEPEE8K1PL_E (38 pins)
11top (44 pins)
------------
Total Inst:22
* = Number of objects in layout different from number in source.
**************************************************************************************************************
INCORRECT OBJECTS
**************************************************************************************************************
LEGEND:
-------
ne= Naming Error (same layout name found in source
circuit, but object was matched otherwise).
**************************************************************************************************************
INCORRECT NETS
DISC#LAYOUT NAMESOURCE NAME
**************************************************************************************************************
1Net GNDGND
47
----------------------------------------------------
--- Devices on layout net GND ---
X0(1.588,1.180)topXdigittop
VCC: VCCVCC: VCC
GND: GNDGND: GND
clk: CLKclk: CLK
rst_b: CLRrst_b: CLR
data_in_ana: DATA_IN_ANAdata_in_ana: DATA_IN_ANA
send_final_out: SEND_FINAL_OUTsend_final_out: SEND_FINAL_OUT
rand_en: Trng_Enrand_en: Trng_En
rand_data_out: Trng_Datarand_data_out: Trng_Data
dout: 9dout: dout
a[12]: 29a[12]: a[12]
a[11]: 32a[11]: a[11]
a[10]: 31a[10]: a[10]
a[9]: 30a[9]: a[9]
a[8]: 28a[8]: a[8]
a[7]: 27a[7]: a[7]
a[6]: 24a[6]: a[6]
a[5]: 26a[5]: a[5]
a[4]: 25a[4]: a[4]
a[3]: 14a[3]: a[3]
a[2]: 10a[2]: a[2]
a[1]: 11a[1]: a[1]
a[0]: 3a[0]: a[0]
din: 21din: din
por: 1por: por
ce_b: 18ce_b: ce_b
oe_b: 17oe_b: oe_b
we_b: 7we_b: we_b
id_modeb: 8id_modeb: id_modeb
curenb: 19curenb: curenb
emod[1]: 22emod[1]: emod[1]
emod[0]: 23emod[0]: emod[0]
werase: 6werase: werase
erase: 15erase: erase
write: 20write: write
eeclk: 16eeclk: eeclk
sel: 5sel: sel
cell_i[7]: 34cell_i[7]: cell_i[7]
cell_i[6]: 4cell_i[6]: cell_i[6]
cell_i[5]: 36cell_i[5]: cell_i[5]
cell_i[4]: 33cell_i[4]: cell_i[4]
cell_i[3]: 35cell_i[3]: cell_i[3]
cell_i[2]: 12cell_i[2]: cell_i[2]
cell_i[1]: 2cell_i[1]: cell_i[1]
cell_i[0]: 13cell_i[0]: cell_i[0]
--- Devices on layout net 47 ---
X1(5.000,757.090)HJ250EEPEE8K1PL_EXeepromHJ250EEPEE8K1PL_E
Dout: 9Dout: dout
A[12]: 29A[12]: a[12]
A[11]: 32A[11]: a[11]
A[10]: 31A[10]: a[10]
A[9]: 30A[9]: a[9]
A[8]: 28A[8]: a[8]
A[7]: 27A[7]: a[7]
A[6]: 24A[6]: a[6]
A[5]: 26A[5]: a[5]
A[4]: 25A[4]: a[4]
A[3]: 14A[3]: a[3]
A[2]: 10A[2]: a[2]
A[1]: 11A[1]: a[1]
A[0]: 3A[0]: a[0]
Din: 21Din: din
CE_B: 18CE_B: ce_b
OE_B: 17OE_B: oe_b
WE_B: 7WE_B: we_b
WRITE: 20WRITE: write
ERASE: 15ERASE: erase
WERASE: 6WERASE: werase
ID_MODEB: 8ID_MODEB: id_modeb
POR: 1POR: por
EECLK: 16EECLK: eeclk
EMOD[1]: 22EMOD[1]: emod[1]
EMOD[0]: 23EMOD[0]: emod[0]
CURENB: 19CURENB: curenb
SEL: 5SEL: sel
CELL_I[7]: 34CELL_I[7]: cell_i[7]
CELL_I[6]: 4CELL_I[6]: cell_i[6]
CELL_I[5]: 36CELL_I[5]: cell_i[5]
CELL_I[4]: 33CELL_I[4]: cell_i[4]
CELL_I[3]: 35CELL_I[3]: cell_i[3]
CELL_I[2]: 12CELL_I[2]: cell_i[2]
CELL_I[1]: 2CELL_I[1]: cell_i[1]
CELL_I[0]: 13CELL_I[0]: cell_i[0]
VDD: 46VDD: VDD
GND: 47GND: GND
**************************************************************************************************************
INFORMATION AND WARNINGS
**************************************************************************************************************
MatchedMatchedUnmatchedUnmatchedComponent
LayoutSourceLayoutSourceType
-----------------------------------------
Nets:464500
Instances:1100HJ250EEPEE8K1PL_E
1100top
--------------------------------
Total Inst:2200
o Initial Correspondence Points:
Nets:VCC GND Trng_En Trng_Data SEND_FINAL_OUT DATA_IN_ANA CLR CLK

VDD=VDD GND=GND?
你设置.GLOBAL VDD VCC GND就可以了
还有你的include的网表中端子的顺序要和top level中该单元的顺序一致

如果只设置了global VDD VCC GND,那么lvs是会报错的,第一个设计的错误是,lvs.rep里面报告在spice网表中有missing pins,这个missing pins就是GND(没有VDD);lvs报告的开头也说明了,cell with non-floating extra pins和component(eeprom) with no-identical signal pins,都是对应GND;报告没有提及VDD的问题。
第二个设计在同样写GLOBAL VDD VCC GND的情况下,也会有错,错误提示也是non_floating extra pins,错误是说core部分的VCC和GND在source网表中没有定义,还有eeprom的VDD和GND,但是layout中有
我在spice网表里面这么做VDD=VDD GND=GND,针对第一个设计反而没有错了,第二个设计就会出现上述的错误报告,虽然我对这样的方法也很纳闷。
说明:第一和第二个设计的区别在于,第二个设计是让eeprom和core部分电源相连接,第二个设计没有连接起来。同时,第二个设计是先将core部分做成ip,在顶层rfid(core+eeprom)将两个ip连接起来。
第二个设计的core部分的的spice是v2lvs弄出来的,端口顺序应该没有问题。在top level调用core部分和eeprom部分的端口顺序也没有问题。
我怀疑我的v2lvs的方式是不是错了,我使用命令为:v2lvs -v input_netlist.v -o output_spi.spi -s include.spi -s1 power -s0 ground

谢谢

其实你的设计的两种方式都没问题,很典型,都可以搞的定的
你的v2lvs方法也没有问题
你LVS时,不要ignore pins。因为我看到报告中有nets没有ports的对比信息

现在有种无奈感,我只能提供思路,具体的数据你自己去处理,我不能跑一遍验证自己分析,所以,只是从你描述情况来看,思路都没有问题,细节上哪里出问题,还真说不上来

小编你好,首先非常感谢你一直帮助我到现在!
你提到的不要ignore ports,我在lvs 规则文件中将这个规则修改过来了。
第二种设计方法的lvs报告开头如下,感觉很奇怪的样子,每个cell summary都是正确的,为何总的overall comparison results就是错误的呢?而且提示的error:componets with non-identical signal pins,在lvs.rep中找到的错误就是eeprom的VDD和GND没有在source中。
下述的top单元就是我先提出来的ip,eeprom的component情况没有在如下的报告显示出,rfid就是top和eeprom的顶层调用者。
对了,foundry提供的lvs规则文件中,有
LVS POWER NAME ?VDD?//?VCC?
LVS PGROUND NAME ?VSS?//?GND?
ps:为何在VDD和VSS边上还有问号?
这个规则的设定对lvs结果的影响是什么?和spice的GLOBAL的区别在哪?是不是在global设置的电源名必须和规则文件的一样?
其实我感觉现在lvs就是电源的问题了,而且应该就是eeprom和top的两个电源,在layout中有这个port,但是source中没有,这样拿去投片,有风险吗?
OVERALL COMPARISON RESULTS
#######################
# ###
##INCORRECT#
# ###
#######################
Error:Components with non-identical signal pins.
Warning:Components with non-identical power or ground pins.
**************************************************************************************************************
CELLSUMMARY
**************************************************************************************************************
ResultLayoutSource
------------------------------------
CORRECTAN2AN2
CORRECTAN2B1SAN2B1S
CORRECTAN2SAN2S
CORRECTAN3B1AN3B1
CORRECTAN3SAN3S
...................... (省略其他cell)
CORRECTTIE0TIE0
CORRECTTIE1TIE1
CORRECTXNR2XNR2
CORRECTXOR2XOR2
CORRECTXOR2SXOR2S
CORRECTtoptop
CORRECTrfidrfid

那个问号是通配符,可以代指多个字母的
它是calibre自动用来识别电源的,如果你的电源是VDA,那么按照这个规则的话,它只能是普通信号了
同样如果你的时ABCVDDABC,那也可以被认为是电源的
我也有个疑问:
LVS POWER NAME ?VDD?//?VCC?
LVS PGROUND NAME ?VSS?//?GND?
你的rule里面如上写的,就是有“//”么?
如果有,建议你拿掉,替换成空格,然后再试试

不管你的感觉是什么,如果要流片,那就要排除任何的错误,让工具得出正确的验证。这时对工作负责,也是对之前的辛苦负责。

今天我修改了LVS rule中的
LVS POWER NAME ?VDD?
LVS GROUND NAME ?GND?
然后在顶层网表中加上
.GLOBAL VDD GND
LVS 规则文件中,有两个设置,不知道会不会影响到什么结果
LVS IGNORE PORTS NO
LVS CHECK PORT NAMES NO
本次进行lvs就可以通过了,存在一个警告如下,请问小编这个警告要紧吗?

还有一个问题,LVS rule中的LVS POWER/GROUND NAME如果已经写了,那么在spice网表中如果没有.GLOBAL VDD GND,发现lvs还是过不了,请问lvs的power/ground name 和spice网表中的VDD GND有什么区别和联系?
如果设计中有两个电源,分别是VDD 和VCC 但是只有一个地GND,那么在lvs rule中的power name和ground name要怎么设置?
OVERALL COMPARISON RESULTS
####################
###**
###CORRECT#|
# ###\___/
####################
Warning:Components with non-identical power or ground pins.
**************************************************************************************************************
CELLSUMMARY
**************************************************************************************************************
ResultLayoutSource
------------------------------------
CORRECTAN2AN2
CORRECTAN2B1SAN2B1S
CORRECTAN2SAN2S
CORRECTAN3B1AN3B1
CORRECTAN3SAN3S
CORRECTAN4B1SAN4B1S
CORRECTAO112SAO112S
CORRECTAO12AO12
CORRECTAO13AO13
.......
CORRECTTIE0TIE0
CORRECTTIE1TIE1
CORRECTXNR2XNR2
CORRECTXOR2XOR2
CORRECTXOR2SXOR2S
CORRECTtoptop
CORRECTrfidrfid
**************************************************************************************************************
INFORMATION AND WARNINGS
**************************************************************************************************************
o Component types with non-identical power or ground pins:
(Cells with the same ( or corresponding ) name that have different voltage
pin names are listed below.Pins that do not appear in all corresponding
cells in both source and layout are ignored by the comparison algorithm.)
Layout Component Type:HJ250EEPEE8K1PL_E (38 pins)
Extra Pins:VDD GND
Source Component Type:HJ250EEPEE8K1PL_E (36 pins)

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top