摘要:通過分析現有微處理器驗證方案的不足,提出了一種以功能覆蓋率為參考條件的動態偽隨機驗證方法。實驗結果表明,與傳統驗證手段相比,該方法在仿真時間相同的情況下,條件覆蓋率平均提高了13%;在測試指令數目相同的情況下,條件覆蓋率平均提高了20%。
關鍵詞:微處理器; 動態偽隨機; 驗證; 功能覆蓋率
中圖分類號:TP303文獻標志碼:A
文章編號:1001-3695(2008)06-1704-03
在微處理器設計領域,驗證已經成為整個設計流程的瓶頸。目前已經提出多種基于偽隨機技術產生測試程序的方案[1~3],這些指令生成器根據用戶輸入自動產生測試程序。但是驗證過程需要人工干預并具有很強的人為因素,使得邊界情況的驗證不夠充分。
針對這些產生器的不足,本文提出了一種動態的偽隨機指令產生器,利用現有的EDA工具在仿真過程中不斷收集微處理器的運行狀態、統計功能覆蓋率,并實時地調整指令生成模型,產生對當前微處理器運行狀態有針對性的測試指令序列,從而在短時間內獲得較高的覆蓋率,提高驗證效率。
1微處理器的驗證方法
目前有很多種不同的方法驗證微處理器,仿真和形式化驗證是較為常用的兩種手段。但是隨著電路拓撲結構以及控制狀態機復雜度的急劇增加,使得形式化驗證的作用很有限。對于復雜度很高的微處理器設計來說,仿真仍然是最主要的驗證手段,而仿真需要大量的測試程序。目前,生成測試程序主要有手工編寫測試程序和隨機生成測試程序。這兩種方法均存在著一定的缺陷。手工編寫測試程序雖然有著較強的針對性,但需要大量的時間和人員投入,且不能夠保證驗證的充分性;隨機指令產生器生成的測試程序雖然很多,但是并不能獲得理想的效果。因為不能快速地驗證到設計中的邊界情況,所以在覆蓋率(如代碼覆蓋率,功能覆蓋率)滿足之前需要仿真大量的測試程序,且這些程序對微處理器的驗證可能有較多重疊,使仿真時間急劇增加。
2動態偽隨機技術的驗證方法
無論采用現有的哪種方法產生測試程序,為了驗證到設計中大部分的邊界情況,付出的時間代價都是巨大的[4]。造成偽隨機指令產生器產生的測試程序質量不高的根本原因在于偽隨機指令生成器是靜態的,在生成測試程序時生成器沒有考慮微處理器的實時運行狀態,所以生成的指令流針對性不強,不能實時地調整指令流以側重于當前驗證最不充分的功能模塊。基于此,本文提出了改進的動態偽隨機指令產生器,與偽隨機指令產生器相比有如下優點:a)動態可調整的偽隨機指令產生模型;b)驗證過程中能夠利用功能覆蓋率報告;c)實時評估偽隨機指令流的質量。
2.1整體結構
覆蓋率(代碼覆蓋率、功能覆蓋率等)是衡量驗證是否充分的重要指標[5],也被用于評估隨機指令流的質量。在動態偽隨機指令生成器中,利用功能覆蓋率作為參考條件動態地約束指令生成器。指令生成器根據當前功能覆蓋率報告實時地產生約束,調整指令生成策略,從而調整產生的指令序列。
如圖1所示,與一般的微處理器驗證流程相比,基于動態偽隨機指令產生器的驗證方案是以驗證和指令序列產生并行的方式進行的。在仿真過程中,功能覆蓋率分析器分析當前微處理器功能覆蓋率的情況,實時地產生約束、動態地調整偽隨機指令生成器的指令產生模型。通過實時地調整指令流,能夠避免多個單測試程序對微處理器的驗證存在重疊的問題。內部狀態記錄器實時地記錄微處理器運行時的內部狀態。當行為級模型和RTL設計的執行結果不匹配時,仿真停止,設計人員通過記錄下來的內部狀態進行調試,追蹤設計錯誤。
2.2關鍵技術
為了讓動態偽隨機指令生成器能夠達到更好的效果,需要驗證人員盡量利用對設計微體系結構的了解來動態調整指令生成器,所以動態偽隨機指令生成器與設計有著較高的耦合性。在對微處理器進行驗證之前定義一個較為完備的功能描述是非常重要的。功能描述來源于體系結構的說明或微體系結構和設計的細節。定義了較為完備的功能描述之后,通過仿真收集微處理器內部信號的變化來探測微處理器是否完成了既定功能,統計出微處理器在運行時的功能覆蓋率,分析功能覆蓋率報告,調整對偽隨機指令生成器的約束。
為了提高驗證效率,指令產生器必須產生高質量的指令序列,而且應該在生成指令的過程中對某些指令序列有所側重,使在正常程序運行過程中很難出現的事件在隨機指令序列中大量地并發出現。在不同的體系結構中,編程模型會對指令之間的關系有不同的限制,以PowerPC體系結構為例,如要求lwarx/stwcx這兩條指令成對地出現。
為了滿足上述限制,將指令序列分為兩類:a)原子序列;體系結構中規定的指令都是原子序列。另外,類似更改cache內容的特定指令序列也被認為是原子序列。b)非原子序列。這種序列由原子序列構成,也可以由非原子序列構成。
如圖2所示,非原子序列有兩種基本構成方式。方式一是順序關系,即非原子序列A由非原子序列B和原子序列C及非原子序列D構成。方式二是或關系,即非原子序列A或者由非原子序列B構成,或者由原子序列C構成,或者由非原子序列D構成,具體可能性的大小由各自的權重決定。通過這兩種基本關系,使用原子序列構成不同的非原子序列,且定義非原子序列之間的關系,便可以精確地控制隨機產生的指令。
隨機生成指令的約束主要來自兩個方面:a)對原子序列源操作數、目的操作數和立即數的約束;b)對非原子序列的子序列的權重約束。比如,可以通過約束原子序列的源操作數、目的操作數,加大指令之間的相關性,也可以通過調整子序列的權重來增加對某部分功能的驗證力度。
3動態偽隨機技術的實現
3.1“龍騰R2”動態偽隨機驗證的實現方案
“龍騰R2”微處理器是西北工業大學自主設計的與PowerPC 750指令集兼容的32位高性能RISC處理器,主頻為233 MHz。“龍騰R2”微處理器采用指令預取(IF)、指令譯碼(ID)、取數(RD)、執行(EX)、數據獲取及中斷處理(TE)、結果寫回(WB)六級流水。IEU是“龍騰R2”微處理器的定點運算部件,負責指令的運行、流水線的控制、精確異常的處理。IEU模塊是整個“龍騰R2”微處理器的核心部件[6],對IEU的驗證覆蓋率在一定程度上代表了整個“龍騰R2”微處理器的驗證覆蓋率。筆者使用Synopsys的Vera驗證語言實現了對“龍騰R2”微處理器IEU模塊的動態偽隨機驗證方案。
3.1.1參考模型的建立
利用驗證語言Vera可以根據PowerPC體系結構的定義快速開發出“龍騰R2”的行為級模型。為了能夠在仿真過程中同步比較行為級模型和RTL設計之間的運行結果,設計的“龍騰R2”行為級模型執行任何一條指令都在一個時鐘周期之內完成。這樣能夠保證行為級模型總比RTL級設計的指令執行要快,比較結果時RTL級設計的流水線不被阻塞,達到充分驗證的目的。
如圖3所示,原子操作是一系列由CPU REG類和CPU RAM方法組成的操作,來源于PowerPC體系結構的定義。該模型的執行總共分為取指、譯碼、執行三個過程。根據來自整體驗證環境的控制條件,取指模塊決定當前是否取指,如果要取指,給出取指的地址。取到指令之后開始譯碼,譯碼得到的信息送給執行單元,執行單元根據這些信息將指令的執行動作分解為多條原子操作的組合。CPU REG類包括PowerPC體系結構所規定的所有通用和特殊寄存器,并提供了對這些寄存器進行操作的方法;CPU RAM類主要提供對IRAM類和DRAM類進行讀寫操作的方法。
3.1.2功能定義
對“龍騰R2”微處理器功能的定義至關重要。只有功能定義完備,才能進行功能覆蓋率的統計,對功能覆蓋率的分析是約束和控制隨機指令生成器的重要參考因素。根據“龍騰R2”微體系結構和IEU模塊設計的特點,將功能定義主要集中在以下幾個方面:
a)流水線的功能定義。流水線的控制是IEU模塊最為重要的功能。流水線的引進使得設計在性能上有較大程度的提升,但是因為控制的復雜性會使得驗證不夠充分。問題主要集中在兩個方面:流水線中處理指令相關的邏輯是否正確;各個流水級空閑或者忙碌狀態的各種組合是否使流水線的控制出現問題。
a)CR和XER特殊寄存器的功能定義。CR和XER特殊寄存器是PowerPC體系結構中的標記寄存器,用于標記運算結果是否溢出、是否有進位等。對CR和XER特殊寄存器的監測在一定程度上能夠保證各種情況下的算術運算都執行過。
c)精確異常的功能定義。在正常的程序運行過程中,異常的出現是比較少的,但是對異常的處理非常地重要。為了保證在流水線的微處理器中實現精確異常,“龍騰R2”的IEU模塊中有專門的異常處理模塊,而且對異常的檢測分布在IEU各個流水級。因為異常能夠切換微處理器的運行狀態,而且在一般的程序中很難有出現的機會,所以有必要對異常處理的功能覆蓋率進行統計。
利用模塊中關鍵信號組合的狀態以及狀態之間的相互遷移來標志該模塊是否完成了既定功能。以CR特殊寄存器為例,CR[0:3]的各個位分別代表當前運算結果小于零、等于零、大于零和溢出。這樣可以定義出16個狀態,然后根據體系結構的說明剔除其中不可能到達的狀態;同樣,還可以剔除狀態之間不可能發生的遷移,從而定義出關于CR特殊寄存器完備的功能描述。在仿真運行過程中,通過統計CR[0:3]到達的狀態以及狀態之間的遷移情況得到功能覆蓋率報告。
3.1.3偽隨機指令序列生成
指令產生器的隨機性主要表現在兩個方面:單條指令的隨機性和指令序列的隨機性。對于單條指令,隨機性主要表現在對源操作數和目的操作數的隨機選擇;對于指令序列,隨機性主要表現在對單條指令組合的隨機選擇。
為了保證偽隨機產生器能夠動態調整,需要對單條指令和指令序列的隨機性加以約束。對于單條指令,約束的施加較為簡單,通過約束源操作數、目的操作數、內存存取地址等有限的全局變量控制單條指令的隨機區域,達到隨機可控的目的。對于指令序列,本文采用類似BNF(backus naur form)范式的方式控制偽隨機指令序列的生成。
BNF范式一般用于定義編程語言的語法規則,通過檢測程序語法是否匹配BNF范式來判斷該程序是否有語法或者語義錯誤。BNF范式可以定義組成指令序列的規則,約束偽隨機指令序列的生成。BNF范式包括終結符和非終結符,當推導至某個終結符時將會產生上文所述的原子序列指令,非終結符則會遞歸的推導下去。下面是一個BNF范式定義的指令序列的例子:
如上所示,main、top、mid、bot為非終結符,ld、add、store均是終結符。當推導至終結符時產生上文所述的原子序列,構成該原子序列的指令序列是固定的,隨機的只是單條指令的操作數。
如圖4所示, main和bot非終結符的推導較為簡單,只需將控制權交給其第一個子序列。構成top和mid非終結符的表達式較為特殊,其第一個子序列為自身,所以推導過程是遞歸的。以top和ld節點為例闡述如何控制帶遞歸的BNF范式的推導過程:對于top節點,當獲得控制權之后,判斷fin是否為真,如果為真將控制權交給ld節點,否則根據權重隨機選擇將控制權交給ld節點還是自身;如果隨機的結果是自身則將cnt加1,否則置fin為真,然后將控制權交給所選擇的節點。對于ld節點,當獲得控制權之后首先產生預定義的原子序列,然后判斷cnt是否為零,如果不為零,將控制權交給top節點且將cnt減1,否則將控制權交給mid節點。
通過定義非原子序列的BNF推導式便可以控制偽隨機過程中指令序列的生成,并使之遵從一定的規則。為了能夠在驗證過程中動態調整生成的指令序列,BNF范式為其每一項構成式分配權重,權重越大說明在偽隨機過程中推導出該構成式的可能性越大。極端情況下,可以給某一項構成式分配權重零,從而禁止推導出該式。
3.2采用動態偽隨機驗證方案的覆蓋率分析
在覆蓋率指標上本文主要采用代碼覆蓋率(塊覆蓋率、條件覆蓋率)對驗證的效果進行評價。在采用了動態偽隨機驗證方案后,對IEU模塊的驗證進行了覆蓋率分析,并與之前采用手寫測試程序和偽隨機產生測試程序結合的驗證方案進行了比較。
圖5和6分別是在相同仿真時間情況下原驗證方案和現驗證方案塊覆蓋率和條件覆蓋率的比較圖。從圖中可以得知,塊覆蓋率平均提高了10%,條件覆蓋率平均提高了13%。
圖7和8分別是在相同測試指令數目的情況下原驗證方案和現驗證方案塊覆蓋率和條件覆蓋率的比較圖。從圖中可以得知,塊覆蓋率平均提高了16%,條件覆蓋率平均提高了20%。
4結束語
本文分析了當前微處理器驗證的幾種方法,提出了一種基于功能覆蓋率分析、動態約束偽隨機指令序列產生的方案,解決了傳統多個單偽隨機測試程序對微處理器的驗證中存在重疊的問題。詳細分析了“龍騰R2”微處理器微體系結構和IEU模塊設計,搭建了基于該方法對“龍騰R2”IEU模塊的驗證環境。
圖9是原有驗證方案和現在驗證方案bug曲線的對比圖。從圖中可以得知,相比之前的驗證方案,改進之后的方案的bug曲線收斂性更好,縮短了驗證時間,提高了驗證效率。
參考文獻:
[1]TAYLOR S,QUINN M,BROWN D,et al. Functional verification of a multiple-issue,out-of-order,superscalar alpha processor:the DEC Alpha 21264 microprocessor[C]//Proc ofthe 35th Annual Conference on Design Automation. New York:ACM Press,1998:638-643.
[2]AHARON A,GOODMAN D,LEVINGER M,et al. Test program gene-ration for functional verification of Power PC processors in IBM[C]//Proc ofDesign Automation Conference. 1995:279-285.
[3]BIRD D L, MUNOZ C U. Automatic generation of random self-checking test cases[J].IBM System Journal,1996,22(3):229-245.
[4]VIKRAM L, ELIZABETH M R. A biased random instruciton generation environment for architectural verification of pipeline processors[J]. Journal of Electronic Testing:Theory and Application,2000,16(1-2):13-27.
[5]姚英彪,劉鵬,姚慶棟,等. 微處理器功能驗證程序生成[J].計算機輔助設計與圖形學學報,2006,18(10):1484-1490.
[6]黃小平,樊曉椏,賈琳,等.“龍騰R2”微處理器流水線的設計與優化[J].微電子與計算機,2006,23(2):144-147.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文