文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2016.08.005
中文引用格式: 王超,劉歡艷. 如何在先進(jìn)工藝節(jié)點(diǎn)利用Virtuoso Check/Assertion Flow[J].電子技術(shù)應(yīng)用,2016,42(8):28-32.
英文引用格式: Wang Chao,Liu Huanyan. How to use Virtuoso Check/Assertion Flow in advanced node IC design[J].Application of Electronic Technique,2016,42(8):28-32.
0 引言
隨著集成電路設(shè)計(jì)和先進(jìn)工藝技術(shù)的飛速發(fā)展,電路規(guī)模越來(lái)越大,電路越來(lái)越復(fù)雜,電路設(shè)計(jì)過(guò)程中,如何盡可能地避免潛在問(wèn)題,遇到問(wèn)題時(shí), 如何盡快有效地定位和解決,成為電路設(shè)計(jì)工程師普遍關(guān)注的話題。電路仿真工具在提供大容量以及快速仿真能力的同時(shí),如果能支持器件級(jí)別及電路級(jí)別的各種檢查機(jī)制,對(duì)于有效地避免問(wèn)題,定位問(wèn)題和解決問(wèn)題,會(huì)有幫助。電路設(shè)計(jì)平臺(tái)(Virtuoso)如果支持方便靈活地設(shè)置、看結(jié)果以及對(duì)結(jié)果進(jìn)行后處理, 會(huì)使流程更順暢,使用更方便,工程師更容易上手,從而提高設(shè)計(jì)效率。
Assert又稱Device Checking,是Spectre/APS提供的主要用于器件級(jí)別的檢查機(jī)制,主要用于檢查電路中的器件電壓、電流、工作點(diǎn)、模型參數(shù)及自定義表達(dá)式等;Circuit Check 是Spectre/APS/XPS 提供的主要用于電路級(jí)別的檢查機(jī)制,主要用于檢查特定的電路設(shè)計(jì)問(wèn)題,最常見的包括檢查電路中的懸空輸入點(diǎn)、高阻點(diǎn)、低壓MOS管接到了高電壓域等。IC617/IC122的Virtuoso 環(huán)境支持在VSE XL圖形界面進(jìn)行Assert和Circuit Check的設(shè)置,Check的結(jié)果和其他仿真結(jié)果一起直接在ADE XL界面顯示,可以方便地對(duì)Check/Assert 的結(jié)果進(jìn)行各種后處理,并將有Violation的器件及路徑直接反標(biāo)到schematic。該流程可以覆蓋電路設(shè)計(jì)常用check需求,完全不依賴腳本,圖形界面讓工程師更容易上手,基于瞬態(tài)仿真的Dynamic Check相比其他工具更具優(yōu)勢(shì)。有效利用Check/Assert flow, 可以幫助避免或及早發(fā)現(xiàn)設(shè)計(jì)中的一些常見問(wèn)題,從而減少設(shè)計(jì)迭代,該流程在TSMC 16 nm和Intel 14 nm實(shí)際項(xiàng)目上得到應(yīng)用,很大程度地提高了設(shè)計(jì)效率。
1 Circuit Check
Circuit Check分為Static Check和Dynamic Check,前者主要基于電路拓?fù)浣Y(jié)構(gòu)進(jìn)行檢查,后者主要基于瞬態(tài)仿真結(jié)果進(jìn)行檢查。
Spectre/APS/XPS支持的Static Check主要包含如圖1所示的幾個(gè)類型, Static Check主要在電路解析階段基于電路拓?fù)浣Y(jié)構(gòu)和電壓傳遞信息進(jìn)行分析,不需要設(shè)置任何仿真類型,因此速度快,對(duì)于仿真速度幾乎沒(méi)有影響。
圖1 Static Check
其中,static_erc 可以說(shuō)是最簡(jiǎn)單實(shí)用的Static Check類型,可以用來(lái)檢查dangling node,floatgate,floatbulk以及hotwell 等。Floatgate和floatbulk比較容易理解,dangling node是指任意器件的unconnected terminal;hotwell是指沒(méi)有連接到電源或地的bulk node。這些都是常見的可能引入問(wèn)題的連接關(guān)系或拓?fù)浣Y(jié)構(gòu),如果是仿真或測(cè)試結(jié)果出錯(cuò)再去查,往往費(fèi)時(shí)費(fèi)力而且會(huì)影響產(chǎn)品交付周期,如果在電路設(shè)計(jì)前期能及時(shí)或盡早地發(fā)現(xiàn),會(huì)很有意義。
另外兩個(gè)常用的Static Check是static_highz 和static_voltdomain. Static_highz從靜態(tài)的角度找出到電源和地之間沒(méi)有任何導(dǎo)電通路的節(jié)點(diǎn),也就是所謂的high impedance node,如圖2所示圓形節(jié)點(diǎn),這是電路設(shè)計(jì)中引入不確定電位從而導(dǎo)致漏電的一類常見問(wèn)題。Static_voltdomain從靜態(tài)的角度找出電壓域連接出錯(cuò)的問(wèn)題,最常見的是低閾值電壓的MOS管接到了高電壓域,容易導(dǎo)致?lián)舸┦У膯?wèn)題。如圖3所示。
圖2 static_highz 示例
圖3 static_voltdomain示例
Spectre/APS/XPS支持的Dynamic Check 主要包含如圖4所示的幾個(gè)類型,Dynamic Check主要在電路瞬態(tài)仿真階段基于瞬態(tài)仿真結(jié)果進(jìn)行分析,檢查結(jié)果和所加激勵(lì)有關(guān)。
圖4 Dynamic Check
前面提到的關(guān)于high impedance node的檢查,除了有static_highz, 也有對(duì)應(yīng)的dyn_highz, 前者是靜態(tài)的,后者是動(dòng)態(tài)的。
除dyn_highz以外,另外兩個(gè)常用的dynamic check分別是dyn_exi 和dyn_setuphold. Dyn_exi 幫助找到在指定時(shí)間窗口內(nèi),電流超過(guò)某個(gè)指定門限的器件,這對(duì)于debug掉電模式時(shí)的漏電流問(wèn)題會(huì)非常有幫助。Dyn_setuphold可以幫助檢查時(shí)序問(wèn)題,對(duì)于時(shí)鐘和數(shù)據(jù)之間setup time或hold time不滿足指定要求的會(huì)報(bào)錯(cuò)。關(guān)于這兩個(gè)Dynamic Check,后面我們會(huì)用實(shí)際項(xiàng)目中用到的例子作進(jìn)一步詳細(xì)介紹,這里先不展開。
2 Virtuoso Check/Assertion Flow
仿真器提供仿真和上述的Circuit Check功能,Virtuoso提供設(shè)計(jì)環(huán)境,可以在不熟悉check語(yǔ)句語(yǔ)法的情況下,輕松完成整個(gè)流程,具體流程圖如圖5所示。使用該流程的過(guò)程會(huì)涉及VSE XL(Virtuoso Schematic Editor XL)中的Checks and assertions assistant, 以及ADE XL (Analog Design Environment XL),后面我們會(huì)用實(shí)際用例介紹具體設(shè)置和看結(jié)果的詳細(xì)過(guò)程。
圖5 Virtuoso Check/Assert 流程示意圖
3 Dyn_setuphold 在Virtuoso Check/Assert流程中的具體應(yīng)用
我們的實(shí)際項(xiàng)目中經(jīng)常會(huì)涉及到一些custom digital設(shè)計(jì),時(shí)序檢查對(duì)這一類型的設(shè)計(jì)非常重要,最典型的就是時(shí)鐘和數(shù)據(jù)之間的setup time和hold time需要滿足一定的要求,dyn_setuphold check正好可以滿足這一類的檢查需求。下面以圖6所示的最簡(jiǎn)單的DFF鏈路的例子來(lái)詳細(xì)闡述dyn_setuphold在Virtuoso Check/Assert流程中的具體應(yīng)用。
圖6 Dyn_setuphold testbench 示意圖
如圖7所示,在ADE XL中點(diǎn)擊‘Click to edit checks’, 會(huì)自動(dòng)跳轉(zhuǎn)到VSE XL界面,并打開 Checks/Asserts Assistant, 在Checks/Asserts Assistant選擇并設(shè)置好dyn_setuphold check,如圖8所示。
圖7 Click to edit checks in ADE XL
這個(gè)例子,時(shí)鐘信號(hào)是CK, 數(shù)據(jù)信號(hào)包括D2, D22 和D222,時(shí)鐘周期為800 ps,設(shè)置setup time和hold time都不能小于200 ps, 如果不滿足應(yīng)報(bào)錯(cuò)。
圖8 Checks/Asserts Assistant in VSE XL
圖9 View Netlisted Checks/Asserts
如圖9所示,可以在ADE XL中選擇‘View Netlisted Checks/Asserts’直接看到生成的Check語(yǔ)句,如圖10所示。
圖10 Netlisted Checks/Asserts
圖11 Dyn_setuphold check結(jié)果
設(shè)置并進(jìn)行正常的瞬態(tài)仿真,仿真結(jié)束以后,在ADE XL不僅可以看到正常的仿真結(jié)果和波形,同時(shí)還可以看到Checks/Asserts的結(jié)果,如圖11所示,可以很清楚地看到信號(hào)D22有hold time violation,信號(hào)D222有setup time violation,而且可以看出每個(gè)violation發(fā)生的具體時(shí)間點(diǎn),對(duì)應(yīng)上升沿還是下降沿等具體信息。如圖12所示,可以選擇只看setup violation或只看hold violation。
如圖13所示,D22和CK之間的hold time只有132.0 ps,不滿足200 ps的要求,D222和CK之間的setup time只有67.94 ps,也不滿足200 ps的要求,從而進(jìn)一步驗(yàn)證了圖11和圖12顯示的結(jié)果。
圖12 Dyn_setuphold check結(jié)果—— setup violation
圖13 Dyn_setuphold check結(jié)果波形
圖14 Dyn_setuphold check結(jié)果波形
圖15 缺省的Violation Filter
在圖11和圖12中點(diǎn)擊任意一個(gè)信號(hào),如D2,會(huì)直接跳轉(zhuǎn)到VSE 窗口,放大并點(diǎn)亮D2 信號(hào),如圖14所示,這是ADE XL和schematic之間的cross-probing功能,方便快速找到有violation的信號(hào)。
在ADE XL中,可以添加一類新的表達(dá)式,名為‘Violation Filter’,通過(guò)這種表達(dá)式,可以很方便地對(duì)Checks/Asserts的結(jié)果進(jìn)行統(tǒng)計(jì),如圖15所示,新添加的Violation Filter表達(dá)式缺省統(tǒng)計(jì)所有的Checks/Asserts violation一共有多少個(gè),可以很方便地對(duì)統(tǒng)計(jì)內(nèi)容進(jìn)行調(diào)整。
4 Dyn_exi 在Virtuoso Check/Assert流程中的具體應(yīng)用
接下來(lái),我們繼續(xù)討論在另一個(gè)項(xiàng)目中,如果利用dyn_exi debug解決power down模式的漏電流問(wèn)題。
問(wèn)題現(xiàn)象是電路前仿真結(jié)果正常,后仿真在power down模式會(huì)有異常的漏電流,電路設(shè)計(jì)工程師花了很長(zhǎng)時(shí)間都沒(méi)有找出這個(gè)漏電流是如何引起的。
對(duì)于這一類問(wèn)題,有一個(gè)很方便的方法,就是通過(guò)dyn_exi check找出在指定的時(shí)間窗口,哪個(gè)或哪些器件的電流超出了定義的門限,找到這個(gè)或這些器件之后,trace其端口電壓,可以很快找出問(wèn)題的原因。
Dyn_exi check具體的設(shè)置語(yǔ)句如圖16所示。
圖16 Dyn_exi 設(shè)置語(yǔ)句
通過(guò)設(shè)置dyn_exi check,找到漏電的器件,并trace其端口電壓之后,我們發(fā)現(xiàn)圖17所示電路圖中信號(hào)ca1有異常。VDDESD是2.8 V,但是后仿結(jié)果中ca1是0 V。
圖17 Dyn_exi 示例局部電路原理圖
根據(jù)上述線索,電路設(shè)計(jì)工程師提供簡(jiǎn)化的test case重現(xiàn)問(wèn)題,然后我們發(fā)現(xiàn)圖17中的電阻R0在后仿真用到的rcc extraction view中出現(xiàn)了連接關(guān)系斷掉的情況。如圖18所示,63個(gè)串聯(lián)電路由于串聯(lián)節(jié)點(diǎn)出錯(cuò)沒(méi)有徹底連通,從而導(dǎo)致出錯(cuò)。
圖18 Dyn_exi 示例局部網(wǎng)表
這是抽取工具引起的,找到原因以后,通過(guò)抽取工具得到了及時(shí)有效地解決。
5 Static_erc在Virtuoso Check/Assert流程中的具體應(yīng)用
下面我們?cè)倥e另一個(gè)實(shí)際項(xiàng)目的例子,關(guān)于如何利用static_erc check debug后仿真結(jié)果不正確的問(wèn)題。
問(wèn)題現(xiàn)象也是電路前仿真結(jié)果正常,后仿真結(jié)果異常,電路設(shè)計(jì)工程師懷疑后仿網(wǎng)表有問(wèn)題, 經(jīng)過(guò)一段時(shí)間debug以后,發(fā)現(xiàn)圖19中的in(input pin)后面接的反向器I0的輸出out1有錯(cuò),in 為0電平時(shí),out1仍為0電平,反向器沒(méi)有正常工作。
圖19 Static_erc 示例局部電路原理圖1
我們?cè)谶@個(gè)項(xiàng)目上采用了static_erc check, 試圖找出后仿網(wǎng)表中是否存在dangling node。
用static_erc找dangling node的check設(shè)置如圖20所示。
圖20 Static_erc—dangling node設(shè)置
如圖21所示,通過(guò)static_erc check, 我們很快找到后仿網(wǎng)表中存在dangling node,反向器gate端的寄生電阻導(dǎo)致PMOS 和NMOS的gate和input pin(in)都沒(méi)有連通,從而導(dǎo)致出錯(cuò)。這個(gè)也是抽取工具的問(wèn)題,定位具體原因以后,也很快通過(guò)抽取工具得到了及時(shí)有效的解決。
圖21 Static_erc—dangling node示例局部電路原理圖2
6 總結(jié)
本文簡(jiǎn)單介紹了Spectre/APS/XPS 支持的Circuit Check類型及其原理,以及Virtuoso Checks/Asserts 完整流程,通過(guò)dyn_setuphold, dyn_exi 和static_erc 3種最常用的check類型,詳細(xì)闡述了如何設(shè)置Circuit Check,如何看check 結(jié)果,以及如何方便地對(duì)check結(jié)果進(jìn)行后處理。通過(guò)這3個(gè)例子,我們可以清楚地看到Circuit Check如何在具體項(xiàng)目中得以應(yīng)用,并分別適用于解決哪些類型的問(wèn)題。可以看出,該流程能夠覆蓋電路設(shè)計(jì)常用check需求,完全不依賴腳本,圖形界面讓工程師更容易上手,基于瞬態(tài)仿真的Dynamic Check相比其他工具更具優(yōu)勢(shì)。有效利用Check/Assert flow, 可以幫助避免或及早發(fā)現(xiàn)設(shè)計(jì)中的一些常見問(wèn)題,從而減少設(shè)計(jì)迭代,該流程在TSMC 16nm和Intel 14nm實(shí)際項(xiàng)目上得到應(yīng)用,從而很大程度地提高了設(shè)計(jì)效率。