摘 要:功能驗(yàn)證是百萬門級IC設(shè)計中的一個重要瓶頸。基于事務(wù)的驗(yàn)證方法把驗(yàn)證工作提高到一個更高的抽象層次,減少了驗(yàn)證中對信號級時序細(xì)節(jié)的考慮,更注重于事務(wù)級行為的驗(yàn)證,并可提高驗(yàn)證代碼編寫的重用性,有利于提高驗(yàn)證的工作效率。介紹這種功能驗(yàn)證方法及其測試平臺的建立。
關(guān)鍵詞:功能驗(yàn)證;事務(wù);測試平臺;IC設(shè)計
中圖分類號:TN710 文獻(xiàn)標(biāo)識碼:B
文章編號:1004-373X(2008)06-001-03
Transaction-based Functional Verification Methodology
JIANG Long,MA Qi
(IC CAD Research Center,Hangzhou Dianzi University,Hangzhou,310018,China) Abstract:Functional verification is an important bottleneck in millions gates IC design.Transaction-Based Verification methodology (TBV) and the establishment of testbench based on TBV,which raises the verification effort to a higher abstract level.It improves the verification processed by presenting information in terms of transactions and their relationships,rather than signals and waveforms.Therefore,it enhances the reusability of each component in the testbench,and causes to be more effective to the function verification of RTL description.
Keywords:functional verification;transaction;testbench;IC design
基金項(xiàng)目:浙江省重大科技攻關(guān)項(xiàng)目資助(2004C17002)
1 引 言
隨著集成電路復(fù)雜度進(jìn)一步加大,驗(yàn)證變得非常困難。比如,在規(guī)模達(dá)到數(shù)百萬門ASIC、復(fù)用IP核的SoC設(shè)計中,驗(yàn)證至少占據(jù)70%以上的設(shè)計工作量[1]。估計驗(yàn)證所花的時間將隨設(shè)計規(guī)模呈平方增長,驗(yàn)證工作的增長速率將超過摩爾定律。因此,如何采用有效的驗(yàn)證工具和技術(shù)是業(yè)界越來越關(guān)心的一個問題。
本文介紹一種基于事務(wù)的驗(yàn)證方法,可以在一個較高的抽象層次上進(jìn)行功能驗(yàn)證,從而加速測試平臺(Testbench)的開發(fā)。并以一個FIFO設(shè)計為例,介紹了這種驗(yàn)證方法中Testbench的架構(gòu)、事務(wù)驗(yàn)證模型的組織和構(gòu)建,在較高抽象層次的調(diào)用,以及在仿真軟件工具環(huán)境下相關(guān)運(yùn)行程序。
2 基于事務(wù)的驗(yàn)證方法
一個有效的驗(yàn)證測試集,應(yīng)該有盡可能高的覆蓋率,具有自檢功能以避免手工確定期望值,在仿真中很容易確定設(shè)計的錯誤,很方便分析覆蓋率確定這個測試集的質(zhì)量[2]。基于事務(wù)的驗(yàn)證方法有助于構(gòu)建這樣的測試集。
2.1 事務(wù)的概念
事務(wù)(transaction)是指測試平臺(Testbench)和被驗(yàn)證設(shè)計之間通過設(shè)計的特定接口進(jìn)行的高層次數(shù)據(jù)或控制信號的傳輸。簡單的事務(wù)可以是對存儲單元的一次讀或?qū)懀瑥?fù)雜的事務(wù)可以是數(shù)據(jù)通行中的一次報文傳輸[2]。事務(wù)的概念把Testbench分為2個層次:
(1) 頂層的測試,是建立在事務(wù)級的抽象層,形態(tài)上表現(xiàn)為多個事務(wù)的組合序列,不需要考慮各個事務(wù)中所需處理的信號級時序細(xì)節(jié);
(2) 底層的事務(wù),具體負(fù)責(zé)處理的信號級時序細(xì)節(jié),由于信號級時序是針對被驗(yàn)證設(shè)計的特定接口而言的,所以被驗(yàn)證設(shè)計的不同接口具有不同的事務(wù)。
通過這種抽象,事務(wù)的概念把驗(yàn)證上升到一個比較高的抽象層次[2],用戶可以少注重信號級時序細(xì)節(jié),更多考慮事務(wù)級上的驗(yàn)證行為,提高驗(yàn)證的工作效率。
2.2 基于事務(wù)的驗(yàn)證方法的基本組成元素
基于事務(wù)的驗(yàn)證平臺主要是由3個部分組成[2],如圖1所示。
(1) 測試(tests)。他是定義驗(yàn)證所需事務(wù)的一段程序(事務(wù)的組合序列),可以用HDL或是C/C++來描述。對于測試的編寫,不需要了解詳細(xì)的設(shè)計接口的協(xié)議,只需確定采用那些事務(wù)來產(chǎn)生激勵、事務(wù)的次序怎樣、相關(guān)事務(wù)在驗(yàn)證中占有的比例等等。
(2) 事務(wù)驗(yàn)證模型(Transaction Verification Model,TVM),也稱為transactor,或者是總線功能模型(Bus Function Model,BFM)。TVM是基于事務(wù)的驗(yàn)證方法的核心,代表針對DUV特定接口的所有事務(wù)的集合,主要任務(wù)就是將高層次的事務(wù)轉(zhuǎn)化為其所代表的具體信號級時序的二進(jìn)制信號,作為激勵信號通過與DUT相連的引腳傳輸給DUT,并接收DUT的響應(yīng)信號。一個設(shè)計往往具有不同的接口,在一個驗(yàn)證環(huán)境中針對不同接口需要不同的TVM。
(3) 被驗(yàn)證設(shè)計(Design Under Verification,DUV)。就是需要驗(yàn)證的設(shè)計描述,可以是RTL級代碼或門級網(wǎng)表。

2.3 基于事務(wù)的驗(yàn)證方法的工作原理與流程
基于事務(wù)的驗(yàn)證方法(Transaction Based Verification,TBV)中,tests是一段事務(wù)集合的程序,他并不關(guān)心每一個事務(wù)所代表的具體信號時序,這些事務(wù)的信號表示在TVM中被解釋。而在TVM中,事務(wù)是由稱為“任務(wù)”(task)的子程序轉(zhuǎn)換成DUV所需要的具體信號,然后通過設(shè)計接口連接到DUV。也就是說,TVM由單個的任務(wù)子程序組成。使用TVM最大的好處就是驗(yàn)證工程師只需要處理高層次的事務(wù),不需要關(guān)注具體的細(xì)節(jié),能更好地把握整個驗(yàn)證環(huán)境。TBV方法的工作流程[1]如圖2所示。

3 應(yīng)用實(shí)例
用一個FIFO為例,詳細(xì)介紹TBV方法在具體設(shè)計中的應(yīng)用。
在數(shù)字電路系統(tǒng)的設(shè)計中,數(shù)據(jù)從一個時鐘域傳遞到另一個時鐘域,并且當(dāng)目標(biāo)時鐘域與源時鐘域不相關(guān)時,這些域中的動作是不相關(guān)的。獨(dú)立時鐘域之間高性能并行接口可用異步FIFO存儲器來實(shí)現(xiàn)[3,4]。其結(jié)構(gòu)圖如圖3所示。

存儲器(16×8 b)模塊有2個指針,讀指針和寫指針。這2個指針是由讀寫控制器產(chǎn)生,復(fù)位后,讀寫指針都被清零。寫指針總是指向下一個將要寫入的單元,每寫入一個數(shù)據(jù)后,寫指針增加,指向下一個要寫入的位置;同樣,讀指針總是指向?qū)⒁x出的單元,每讀出一個數(shù)據(jù)后,讀指針增加,指向下一個要讀出的單元。當(dāng)存儲器中沒有空間可寫是,產(chǎn)生滿標(biāo)志位;當(dāng)存儲器中沒有數(shù)據(jù)可讀時,產(chǎn)生空標(biāo)志位。
3.1 驗(yàn)證計劃的制定
設(shè)計都是基于一定的規(guī)范文檔,是驗(yàn)證和設(shè)計的共同出發(fā)點(diǎn),是最好的參考和準(zhǔn)測。通常包括2個不同抽象級別的文檔:一是結(jié)構(gòu)級的規(guī)范,定義了設(shè)計的功能要求,如上述FIFO的基本工作原理;二是設(shè)計規(guī)范,詳細(xì)地描述系統(tǒng)在模塊級的具體實(shí)現(xiàn)[5],如圖3所示的基本結(jié)構(gòu)圖。驗(yàn)證工程師由此指定驗(yàn)證的目標(biāo)和任務(wù),如驗(yàn)證途徑、驗(yàn)證技術(shù)、采用的模型、基本功能的驗(yàn)證、邊界條件的驗(yàn)證,隨機(jī)性驗(yàn)證等,形成驗(yàn)證計劃[1]。本例中為敘述簡單,主要關(guān)注空滿指針標(biāo)志位產(chǎn)生時FIFO的行為和FIFO讀出數(shù)據(jù)的正確性。
3.2 Testbench結(jié)構(gòu)及TVM構(gòu)建
整個Testbench結(jié)構(gòu)如圖4所示。

FIFO的功能是在2個不同的時鐘域之間傳遞數(shù)據(jù),因此針對寫時鐘域和讀時鐘域相關(guān)接口構(gòu)建了2個TVM,對應(yīng)寫時鐘域接口的TVM(write TVM)為FIFO提供(寫入)數(shù)據(jù),對應(yīng)讀時鐘域接口的TVM(read TVM)用于處理從FIFO中讀出的數(shù)據(jù),主要是檢查讀出數(shù)據(jù)正確與否以及空滿指針標(biāo)志位的產(chǎn)生情況。
TBV將不同接口的事務(wù)通過任務(wù)子程序封裝在不同的TVM中,在Testbench頂層(tests)中調(diào)用或例化這些TVM(不同功能的TVM和對應(yīng)于設(shè)計中的不同接口)的任務(wù)。tests中可以多次調(diào)用某一個TVM任務(wù)或者同時調(diào)用多個TVM任務(wù),完成事務(wù)到具體信號之間的轉(zhuǎn)換。
在write TVM中,封裝2個任務(wù):write task和wrst task。wrst task為寫時鐘域提供復(fù)位信號。write task按照圖5所示的寫數(shù)據(jù)時序,當(dāng)full為0時,在時鐘下降沿同步產(chǎn)生輸入數(shù)據(jù)data和寫使能控制信號wen。輸入數(shù)據(jù)和寫使能信號延長一個必要的保持時間后消失。當(dāng)full為1的時候禁止data和wen的產(chǎn)生,避免出現(xiàn)邏輯錯誤。在write task中,輸入數(shù)據(jù)由一個自加“1”加法器在寫時鐘的下降沿產(chǎn)生,在緊接著的上升沿被讀入到存儲器中。

在read TVM中封裝了3個任務(wù):rrst task,read task,check task。
rrst task為讀時鐘域提供復(fù)位信號。read task將FIFO中的數(shù)據(jù)讀出,相關(guān)控制信號的時序與圖5類似,區(qū)別是empty為0的時候可以讀出數(shù)據(jù),empty為1的時候禁止讀使能信號的產(chǎn)生。
check task校驗(yàn)空滿指針產(chǎn)生和讀出數(shù)據(jù)的正確性。通常對于仿真結(jié)果的校驗(yàn)主要包括2個部分[6,7]:在仿真時對設(shè)計點(diǎn)的監(jiān)控;把監(jiān)控捕獲值與期望值自動做比較,check task采用第2種方法。為了確定寫入數(shù)據(jù)和讀出數(shù)據(jù)的個數(shù),在check task中定義2個變量i,k表示已寫入和讀出的數(shù)據(jù)個數(shù)。check task的檢驗(yàn)程序如下:
if((wfull==1)||(rempty==1))
if ((i-k>14)||(i-k<2))
begin
display(\"---i=%d,---k=%d,---i-k=%d\",i,k,i-k);
end
else
display(\"i-k=%d,error\",i-k);
finish;
當(dāng)空或者滿指針為1后比較i,k2個變量來確定存儲器中數(shù)據(jù)的個數(shù),以驗(yàn)證空、滿指針產(chǎn)生正確與否。當(dāng)i-k>14時,wfull=1。當(dāng)i-k<2時rempty=1。若有錯誤,在check task中給出錯誤發(fā)生的時刻和具體i,k及其差值,快速定位錯誤發(fā)生的位置。
[BT3+*2]3.3 基于事務(wù)的tests的建立
基于事務(wù)的tests程序就是一系列有序或隨機(jī)調(diào)用系統(tǒng)中各個TVM任務(wù) [2]。一個比較完整的同時讀寫的tests流程如下:
initial
read_TVM.rrst; [JY]//讀時鐘域復(fù)位
initial
write_TVM.wrst;[JY]//寫時鐘域復(fù)位
initial
begin
repeat(n)[JY]//提供n個輸入數(shù)據(jù)
write_TVM.write;[JY]//寫數(shù)據(jù)
end
always
begin
delay m; [JY]//經(jīng)過m個延時后開始讀數(shù)據(jù)
read_TVM.read;[JY]//讀數(shù)據(jù)
read_TVM.check;[JY]//對所讀數(shù)據(jù)校驗(yàn)
end
讀寫時鐘域邏輯復(fù)位后,調(diào)用write TVM中的write task n次,即為FIFO提供n個輸入數(shù)據(jù)。經(jīng)過適當(dāng)?shù)膍個延時后,再調(diào)用read TVM中的read task,將FIFO中的數(shù)據(jù)讀出。并在每讀出1個數(shù)據(jù)后都調(diào)用1次read TVM中的check task來校驗(yàn)所讀數(shù)據(jù)的正確性。其中為FIFO提供數(shù)據(jù)的個數(shù)以及調(diào)用read task的延時時間都是參數(shù)可調(diào)的,方便不同情況下的驗(yàn)證工作。
4 結(jié)語
驗(yàn)證是一個過程,而不是一系列驗(yàn)證平臺的簡單集合。在基于事務(wù)的驗(yàn)證平臺中,如同IP設(shè)計一樣,采用標(biāo)準(zhǔn)接口的TVM設(shè)計有利于驗(yàn)證平臺的重用,大量減少驗(yàn)證時間,縮短開發(fā)周期。
模塊化和可重用的驗(yàn)證平臺可以采用TestBuilder,Vera或Specman Elite等來開發(fā)。,
參考文獻(xiàn)
[1]\\[美\\]拉申卡,帕特森,信赫.系統(tǒng)芯片(SoC)驗(yàn)證方法與設(shè)計[M].孫海平,丁健,譯.北京:電子工業(yè)出版社,2005.
[2]Dhananjay S Brahme,Steven Cox,Jin Gallo,et al.The Transaction Based Verification Methodology[OL].Cadence Berkeley Labs,http://www.mentor.com,2000.
[3]Clifford E Cummings.Simulation and Synthesis Techniques for Asynchronous FIFO Design[OL].SNUG 2002 (Synopsys Users Group Conference,San Jose,CA,2002) User Papers,Section TB2,2nd paper.http://www.sunburst-design.com/papers/,March 2002.
[4]Michael D Ciletti.Advanced Digital Design with the Verilog HDL[M].張雅綺,李鏘,譯.北京:電子工業(yè)出版社,2006.[LL]
[5]Janick Bergeron.Writing Testbench Function Verification of HDL Models[M].Kluwer Academic Publishes,2003.
[6]Michael Keating.Reuse Methodology Manual for System-on-a-Chip Design[M].Third Edition.Kluwer Academic Publishers,2002.
[7]William K Lam.Hardware Design Verification Simulation and Formal Method-based Approaches[M].Prentice Hall PTR,2005.
作者簡介江 龍 男,1983年出生,碩士研究生。研究方向?yàn)閂LSI設(shè)計與EDA技術(shù)。
馬琪男,1968年出生,博士,研究員。研究方向?yàn)榧呻娐吩O(shè)計及CAD。