VCS OBC技術(shù)的評(píng)估
當(dāng)前,設(shè)計(jì)驗(yàn)證已經(jīng)成為半導(dǎo)體芯片設(shè)計(jì)過(guò)程所面臨的主要難題之一。如何確認(rèn)芯片能夠在相關(guān)應(yīng)用中正確運(yùn)行呢?除了要面對(duì)需要寫(xiě)出盡可能多的測(cè)試來(lái)驗(yàn)證芯片的各方面功能的挑戰(zhàn)以外,下列問(wèn)題也變得日益重要:如何測(cè)定這些測(cè)試的質(zhì)量呢?測(cè)試包到底覆蓋了多大范圍的芯片功能呢?對(duì)于這些問(wèn)題,傳統(tǒng)的解決方法是應(yīng)用代碼覆蓋率分析工具。利用這些工具可以測(cè)量出在仿真狀態(tài)下實(shí)際執(zhí)行了設(shè)計(jì)的多大部分,并能提供有關(guān)代碼行覆蓋率、條件覆蓋率、信號(hào)翻轉(zhuǎn)覆蓋率的報(bào)告。但是,代碼覆蓋率分析工具所能給出的覆蓋率數(shù)值在本質(zhì)上屬于樂(lè)觀性的估計(jì)。舉例來(lái)說(shuō),它們可以指出一條代碼行得到了執(zhí)行,但是卻不能指出這條代碼行上的代碼正確性是否得到了驗(yàn)證。因此,有可能出現(xiàn)這種情況,即有報(bào)告顯示一條代碼行已經(jīng)在仿真狀態(tài)下得以覆蓋,但是由此產(chǎn)生的效果卻未在仿真中檢查出來(lái),并未檢查到這條代碼行的錯(cuò)誤功能。測(cè)試結(jié)果可能會(huì)顯示合格,但卻沒(méi)有察覺(jué)到錯(cuò)誤的功能行為。
這項(xiàng)挑戰(zhàn)可以通過(guò)應(yīng)用VCS 7.0版新增的Observed Coverage (OBC)能力得到解決。這項(xiàng)功能包含在VCS 7.0的測(cè)試版中,也正是我們用作OBC評(píng)估的版本。
OBC工具
OBC是一項(xiàng)在VCS仿真器內(nèi)新增加的覆蓋率測(cè)量工具。OBC是建立在代碼行覆蓋率分析基礎(chǔ)上的,并在其中加入了可觀測(cè)性的概念:一行代碼在已經(jīng)執(zhí)行的情況下,而且執(zhí)行的效果可以傳播到觀測(cè)點(diǎn),我們就認(rèn)為這是已經(jīng)觀測(cè)的代碼行。在缺省情況下,OBC技術(shù)把包括在TestBench內(nèi)最頂層的實(shí)例的輸出認(rèn)定為觀測(cè)點(diǎn)。而且可以將用戶設(shè)計(jì)中的任意信號(hào)定義為觀測(cè)點(diǎn)。
通過(guò)加入可觀測(cè)性的概念,OBC工具糾正了代碼覆蓋率分析中的樂(lè)觀估計(jì)傾向,所報(bào)告覆蓋率也更為接近實(shí)際的觀測(cè)結(jié)果。OBC工具的能力在于模塊的輸出可以不必直接與觀測(cè)點(diǎn)有所連接。這一信號(hào)可以首先送入其它模塊,隨后穿過(guò)一些組合邏輯電路,儲(chǔ)存在第3個(gè)模塊的寄存器中,并最終在若干時(shí)鐘周期后到達(dá)觀測(cè)點(diǎn)。在這種情況下,OBC工具依然能夠檢測(cè)到信號(hào)傳播鏈路中起始部分的賦值操作已經(jīng)被觀察到。
未觀測(cè)到代碼行的原因
OBC工具可以識(shí)別出8種不同的為何代碼行被認(rèn)定為未觀測(cè)到的原因。
無(wú)扇出(NFO)
在一個(gè)模塊中未能讀取的信號(hào)明顯地不會(huì)被傳播到任何觀測(cè)點(diǎn)。
未執(zhí)行的讀取操作(UXR)
如果一條語(yǔ)句從未得到執(zhí)行,就可能造成一次本應(yīng)通過(guò)這條語(yǔ)句進(jìn)行傳播到觀測(cè)點(diǎn)的賦值操作未能執(zhí)行。
未接線的輸出端口(UCP)
如果一個(gè)子模塊的輸出端口未接線,則會(huì)成為某個(gè)信號(hào)無(wú)法觀測(cè)到的明顯原因。
賦值操作未改變信號(hào)(SUA)
一個(gè)信號(hào)被賦予了與本身已有值相同的數(shù)值時(shí),則此次賦值被認(rèn)定為是無(wú)法觀測(cè)到的。這時(shí)就需要進(jìn)行另外一次賦值操作,賦予其不同的數(shù)值,方能傳播到輸出處并被認(rèn)定為已觀測(cè)到。
賦值次序混亂(AOO)
這種情況經(jīng)常在若干個(gè)賦值操作必須按一定的順序進(jìn)行,以達(dá)到將某個(gè)信號(hào)數(shù)值傳播到某個(gè)輸出的目標(biāo)。但是,如果這一特定順序在仿真過(guò)程中從未出現(xiàn)過(guò),則此賦值鏈會(huì)斷開(kāi),而賦值鏈的前一部分不認(rèn)定為已經(jīng)觀測(cè)到。
賦值操作不受子表達(dá)式數(shù)值的影響(AIS)
在諸如x = a & b或x = a | (~b)的賦值操作中,在b的值為零時(shí),a的值是“不關(guān)心的”。因此,所有對(duì)信號(hào)a的賦值均將被認(rèn)為是未觀測(cè)到的。
僅用于事件控制(UEC)
內(nèi)部時(shí)鐘或復(fù)位信號(hào)在典型情況下從來(lái)不會(huì)傳播至芯片的輸出端。但是,這些信號(hào)會(huì)觸發(fā)其它可在觀測(cè)點(diǎn)觀測(cè)到的信號(hào)的操作。無(wú)論在何種情況,OBC工具都不會(huì)認(rèn)定此種時(shí)鐘和復(fù)位信號(hào)是可觀測(cè)到的。
寄存器重寫(xiě)(ROW)
如果某個(gè)寄存器數(shù)值在此數(shù)值傳播到觀測(cè)點(diǎn)前被重寫(xiě),則產(chǎn)生原來(lái)數(shù)值的賦值操作被認(rèn)定為未觀測(cè)到。
OBC工具的使用
圖1是OBC工具運(yùn)行方式的概述以及報(bào)告生成的過(guò)程。
運(yùn)行OBC工具需要3個(gè)步驟:
*編譯和在代碼中建立相應(yīng)的觀察機(jī)制
vcs -cm obc source.v
*運(yùn)行仿真并生成一個(gè)有關(guān)行代碼覆蓋率和可觀測(cè)性結(jié)果的數(shù)據(jù)庫(kù)
simv -cm obc -cm_obc history -cm_name test1
*在批處理方式下生成報(bào)告
obcView -b -cm_name merged
前兩個(gè)步驟為VCS編譯和仿真的標(biāo)準(zhǔn)執(zhí)行步驟,只包含了有關(guān)OBC工具的少數(shù)幾個(gè)開(kāi)關(guān)。最后一個(gè)步驟是專(zhuān)用于OBC的,這一步驟中生成若干個(gè)有關(guān)覆蓋率和可觀測(cè)性的報(bào)告文件:
?報(bào)告中可提供若干個(gè)層次的詳細(xì)信息:所有代碼行,只對(duì)未觀測(cè)到的代碼行,或者是對(duì)每個(gè)模塊的一個(gè)總結(jié)報(bào)告。
?每個(gè)模塊實(shí)例生成相應(yīng)報(bào)告,但是如果同一個(gè)模塊有多個(gè)實(shí)例,也可針對(duì)每一個(gè)模塊提供一份累計(jì)報(bào)告。
?一份可用于追溯某一特定代碼行被報(bào)告為未觀測(cè)的歷史記錄報(bào)告。
OBC工具的應(yīng)用
在模塊級(jí)上應(yīng)用OBC工具
在模塊級(jí)上應(yīng)用代碼覆蓋率分析工具是最為廣泛的應(yīng)用形式,模塊設(shè)計(jì)人員需要通過(guò)它們來(lái)確認(rèn)驗(yàn)證了設(shè)計(jì)中的所有組成部分。但是,傳統(tǒng)的代碼覆蓋率分析工具在典型情況下所給出的覆蓋率結(jié)果過(guò)于樂(lè)觀。通過(guò)為OBC工具定義合適的觀測(cè)點(diǎn)后,以這種觀測(cè)為基礎(chǔ)的覆蓋率結(jié)果有助于查明模塊中那些已執(zhí)行的部分,但其執(zhí)行代碼的正確性可能根本未經(jīng)這項(xiàng)測(cè)試進(jìn)行驗(yàn)證。在模塊級(jí)上使用OBC工具的目的就是盡可能百分之百地使所有的行都被覆蓋到并被觀測(cè)到。
在芯片級(jí)上使用OBC工具
在芯片級(jí)上同樣會(huì)發(fā)生存在于模塊級(jí)上的問(wèn)題,這些問(wèn)題的解決難度遠(yuǎn)大于模塊級(jí):測(cè)試包覆蓋了多大范圍的芯片功能?哪些測(cè)試是屬于冗余的?芯片中哪一部分的覆蓋率比其它部分更低?如果設(shè)計(jì)中存在一處缺陷,則是否至少會(huì)在一項(xiàng)測(cè)試中不能通過(guò)?
特別是對(duì)于復(fù)雜程度較高的單片系統(tǒng)芯片,包括一個(gè)或多個(gè)處理器、許多外設(shè),在模塊級(jí)上的代碼覆蓋率結(jié)果是無(wú)法對(duì)下列這些問(wèn)題做出答復(fù)的,其原因有多種:
?所有的模塊均已經(jīng)假設(shè)為在單元級(jí)經(jīng)過(guò)了驗(yàn)證,也就是說(shuō),在單獨(dú)測(cè)試中已經(jīng)達(dá)到了很高的代碼覆蓋率。因而,在芯片級(jí)的驗(yàn)證中,其目的不在于重復(fù)進(jìn)行相同的測(cè)試,這是由于模塊的功能已經(jīng)得到了驗(yàn)證。在芯片級(jí),我們所要驗(yàn)證的是模塊的集成是正確的,而且相鄰模塊之間的信息交流是正確的。芯片級(jí)上100%的代碼覆蓋率也由于仿真資源方面的限制而無(wú)法達(dá)到。
?在芯片啟動(dòng)時(shí),許多操作均開(kāi)始自動(dòng)執(zhí)行:各個(gè)鎖相環(huán)電路均進(jìn)行啟動(dòng),產(chǎn)生出復(fù)位序列,核心部分從ROM代碼開(kāi)始啟動(dòng)等等。這些操作將至少對(duì)某些模塊產(chǎn)生相當(dāng)高的代碼覆蓋率,但是這就意味著所有的代碼均已真正得到了測(cè)試嗎?答案或許是否定的。這是由于在較大的芯片中,只有很少數(shù)的內(nèi)部信號(hào)真正傳送到了芯片的輸出端。
因此在較大的芯片中,我們就會(huì)發(fā)現(xiàn)這樣一種特殊的情況:一方面,標(biāo)準(zhǔn)的芯片操作產(chǎn)生出相當(dāng)高的某種代碼覆蓋率,而另一方面,絕大多數(shù)的數(shù)據(jù)僅在芯片內(nèi)部進(jìn)行傳送,而在芯片引腳上是觀測(cè)不到的。針對(duì)這種情況,OBC能夠有助于在芯片級(jí)仿真中產(chǎn)生更為有效的測(cè)量結(jié)果。
在隨機(jī)測(cè)試中使用OBC工具
隨著當(dāng)今的芯片設(shè)計(jì)變得越來(lái)越復(fù)雜,采用傳統(tǒng)的直接式激勵(lì)越來(lái)越難以達(dá)到很高的測(cè)試覆蓋率。因此,隨機(jī)驗(yàn)證技術(shù)的應(yīng)用越來(lái)越廣泛。但是,隨機(jī)激勵(lì)必須完全依賴(lài)于自動(dòng)檢查,因?yàn)橥ㄟ^(guò)對(duì)波形的目視檢查或其它手工方法無(wú)法檢查出這種仿真的正確性是不可行的。
OBC技術(shù)的概念對(duì)于在這種隨機(jī)驗(yàn)證方法中判斷隨機(jī)激勵(lì)的質(zhì)量和覆蓋率是非常有用的。
但是,對(duì)于OBC工具來(lái)說(shuō),觀測(cè)點(diǎn)的選擇對(duì)于分析來(lái)說(shuō)是至關(guān)重要的:只有通過(guò)自動(dòng)檢測(cè)得到了驗(yàn)證的信號(hào)方可定義為觀測(cè)點(diǎn)。OBC不檢查某個(gè)信號(hào)數(shù)據(jù)的正確性,但是它假設(shè)其它方(人員或自動(dòng)檢查)能夠在所有的觀測(cè)點(diǎn)驗(yàn)證信號(hào)的正確性。
對(duì)于觀測(cè)點(diǎn)的選擇來(lái)說(shuō),存在著一個(gè)非常重要的限制,這一限制對(duì)于隨機(jī)測(cè)試和直接測(cè)試一樣有效。如果觀測(cè)點(diǎn)處的信號(hào)數(shù)值沒(méi)有得到檢查,則OBC工具所報(bào)告的數(shù)字是無(wú)指導(dǎo)意義的。
OBC工具所獲得的首批結(jié)果
對(duì)OBC工具的首次評(píng)估只在模塊級(jí)上執(zhí)行,采用了一個(gè)JTAG控制器作為受測(cè)試的模塊,然后在模塊上運(yùn)行了一個(gè)有8個(gè)不同測(cè)試的測(cè)試包。表1是對(duì)這個(gè)JTAG控制器模塊所達(dá)到的覆蓋率的概述。
如表1所示,這8項(xiàng)測(cè)試的代碼行覆蓋率(標(biāo)準(zhǔn)覆蓋率分析)是相當(dāng)高的,但是在采用了所有模塊輸出作為觀測(cè)點(diǎn)的OBC分析中,已觀測(cè)到代碼行的百分比出現(xiàn)很大幅度的下降。此結(jié)果表明,14%的代碼行得到了執(zhí)行,但它們的執(zhí)行效果并未在模塊輸出端得到直接的觀測(cè)。這些代碼行的絕大多數(shù)均與控制邏輯有關(guān),這是由于控制信號(hào)極少直接與模塊的輸出端直接連接,而是對(duì)數(shù)據(jù)信號(hào)進(jìn)行控制。但是,OBC工具將這種情況認(rèn)定為未觀測(cè)到(原因:UEC),即使這些控制信號(hào)有可能與輸出端之間存在著一些非直接的效應(yīng)。
如果選TDO輸出端為僅有的觀測(cè)點(diǎn)(如同TDO輸出端是芯片級(jí)僅有的輸出端一樣),則觀測(cè)到的代碼行的百分比將會(huì)出現(xiàn)極大幅度的下降。一方面,這一結(jié)果表明某些測(cè)試可能需要進(jìn)行改進(jìn),以保證測(cè)試結(jié)果能夠在TDO輸出端上被觀察到。另一方面,出現(xiàn)大幅下降是基于許多JTAG模塊輸出均為控制信號(hào)的事實(shí),這些控制信號(hào)都被送到芯片上的其它模塊,而且是不能夠直接觀測(cè)到的。
表2列出了一些關(guān)鍵性的數(shù)值,這些數(shù)值表明了OBC工具在仿真運(yùn)行中對(duì)性能所起的影響。本結(jié)果顯示了如上所述的JTAG模塊的結(jié)果,也顯示了作為一個(gè)較大規(guī)模設(shè)計(jì)的范例的微控制器芯片的結(jié)果。每欄右側(cè)的數(shù)值表明與標(biāo)準(zhǔn)的VCS仿真相比較的性能,即沒(méi)有OBC工具或任何其它覆蓋率分析工具的情況下。
在JTAG芯片的設(shè)計(jì)中,編譯和仿真的時(shí)間較短,所以對(duì)OBC工具使用的影響是觀測(cè)不到的。但是,在更大的微處理器設(shè)計(jì)中,對(duì)于仿真時(shí)間的影響會(huì)變得非常明顯。
作為一項(xiàng)有意義的成果,我們發(fā)現(xiàn)OBC工具所產(chǎn)生出的多余數(shù)據(jù)(test.line文件)并不大。但是,OBC的能力對(duì)于仿真所需的RAM有著顯著的影響。這一點(diǎn)對(duì)于較大的模塊來(lái)說(shuō),在對(duì)內(nèi)存量的需求超過(guò)工作站中可提供的RAM時(shí),可能會(huì)成為一個(gè)瓶頸。
結(jié)果和建議
盡管評(píng)估OBC時(shí),它尚處于測(cè)試版,但該工具的表現(xiàn)非常穩(wěn)定,而且比較容易使用。只需在標(biāo)準(zhǔn)的VCS編譯和仿真命令中加入幾個(gè)開(kāi)關(guān)項(xiàng)即可。
對(duì)于小規(guī)模和中等規(guī)模的模塊,它對(duì)磁盤(pán)空間和工作站內(nèi)存的要求是適中的,因此可以容易地將OBC工具加入到現(xiàn)有的設(shè)計(jì)流程中。但是,對(duì)于大規(guī)模的芯片級(jí)仿真,OBC對(duì)于仿真時(shí)間將會(huì)有顯著的影響,并要求占用工作站的較多內(nèi)存。OBC對(duì)于這種非常大規(guī)模的設(shè)計(jì)所帶來(lái)的好處尚有必要進(jìn)行進(jìn)一步的研究。
可觀測(cè)性的概念對(duì)于傳統(tǒng)的代碼行覆蓋率分析來(lái)說(shuō),是一項(xiàng)非常有價(jià)值的補(bǔ)充。它對(duì)于提高一個(gè)測(cè)試包質(zhì)量的好處是確定無(wú)疑的。將數(shù)據(jù)的變化傳送到一些觀測(cè)點(diǎn)的概念與傳統(tǒng)的故障仿真類(lèi)似,但是OBC解決方案在仿真速度和內(nèi)存需求方面所要求的代價(jià)較低。
在評(píng)估過(guò)程中也發(fā)現(xiàn)了少數(shù)幾項(xiàng)缺點(diǎn):
?運(yùn)行OBC時(shí)需要進(jìn)行一次單獨(dú)的編譯,而且不能與其它諸如條件覆蓋率和翻轉(zhuǎn)覆蓋率等選項(xiàng)結(jié)合使用。
?在觀測(cè)到某個(gè)寄存器的某一位時(shí),OBC假定整個(gè)寄存器均被觀測(cè)到。這一假定對(duì)于移位寄存器來(lái)說(shuō)屬于典型情況,但很明顯這項(xiàng)假定過(guò)于樂(lè)觀。在內(nèi)存中的一個(gè)字被觀測(cè)到時(shí),也會(huì)發(fā)生同樣的情況:OBC假定整個(gè)內(nèi)存均被觀測(cè)到了。
?OBC對(duì)數(shù)據(jù)路徑代碼的分析是良好的。但是,它把時(shí)鐘信號(hào)、復(fù)位信號(hào)等僅用于always塊的事件控制的控制邏輯信號(hào)認(rèn)定為未觀測(cè)到。
這就導(dǎo)致了分析結(jié)果會(huì)過(guò)于悲觀。但是對(duì)于通過(guò)采用“if”和“case”等語(yǔ)句描述的控制邏輯的判斷是不錯(cuò)的,即OBC認(rèn)定它們屬于可觀測(cè)到的信號(hào)。
OBC改進(jìn)建議:
?有關(guān)上述移位寄存器的問(wèn)題:很明顯,如果要對(duì)所有寄存器的所有位均單獨(dú)進(jìn)行分析,會(huì)過(guò)于耗費(fèi)時(shí)間和內(nèi)存。但是,應(yīng)該提供一項(xiàng)參數(shù)選項(xiàng),使得OBC能夠?qū)λx擇的寄存器進(jìn)行逐位的處理。較為理想的是,OBC應(yīng)該從源代碼中自動(dòng)地檢測(cè)出移位寄存器。
?對(duì)于內(nèi)存來(lái)說(shuō)也是如此:由于內(nèi)存數(shù)量可能非常大,逐字對(duì)所有內(nèi)存地址進(jìn)行處理在絕大多數(shù)情況下不可能實(shí)現(xiàn)。但是,OBC應(yīng)該能夠?qū)λx地址范圍進(jìn)行逐字處理。
?目前,OBC可以在所選定的模塊上執(zhí)行其分析任務(wù),其中包括整個(gè)次層級(jí)。
但是,對(duì)于芯片級(jí)的仿真來(lái)說(shuō),獲取低級(jí)模塊中所觀測(cè)到的代碼行的相關(guān)信息并無(wú)多大意義。在芯片級(jí)的集成中,其重點(diǎn)更主要地集中在最高2至3層級(jí)。是否存在一種方法,能夠規(guī)定OBC不到模塊級(jí)做檢查,或者只到極少數(shù)的幾級(jí)做檢查?■
評(píng)論