周德新 ,金志威,王 鵬,趙學娟
(1.中國民航大學航空自動化學院,天津300300;2.中國民航大學天津市民用航空器適航與維修重點實驗室,天津300300)
隨著芯片設計規(guī)模及復雜度的不斷增加,驗證工作在整個設計生命周期內占據(jù)著相當大的比重。傳統(tǒng)的驗證方法針對待驗證設計編寫直接測試激勵,采用定向的測試方式,查找設計中的漏洞。此種方法憑借其直觀且易于實現(xiàn)等優(yōu)點被廣泛采用。然而對于復雜的、多功能的設計,采用傳統(tǒng)驗證方法很難編寫各種測試去覆蓋所有的特性并找出漏洞。因此能否對設計進行全面而有效的驗證,是驗證人員所面臨的主要問題[1]。
SystemVerilog 作為新一代的設計驗證語言,結合了現(xiàn)代的設計和驗證環(huán)境并將硬件描述語言(HDL)與高級驗證語言(HVL)結合在一起,為高度復雜的芯片設計提供了強大的設計和驗證保證[2]。SystemVerilog 支持約束隨機的產生、覆蓋率統(tǒng)計分析以及斷言驗證。其最突出的優(yōu)點在于面向對象的編程結構,有助于采用事務級的驗證和提高驗證的重用性[3]。由于具有諸多優(yōu)點,SystemVerilog 是被設計和驗證工程師廣泛使用的語言之一。
本文采用基于SystemVerilog 的驗證方法對SRAM 控制器IP 核進行功能驗證。通過分析覆蓋率數(shù)據(jù)并對比傳統(tǒng)的驗證方法,基于SystemVerilog 的驗證方法能夠更加快速且全面的完成對設計的驗證。
本文的驗證載體為一段VHDL 編寫的SRAM控制器IP 核。其中SRAM 選用的是ISSI 公司的IS61WV102416BLL 高速異步16bit 靜態(tài)RAM 存儲器。SRAM 控制器IP 核的系統(tǒng)框圖如圖1 所示。
圖1 SRAM 控制器系統(tǒng)框圖
由圖可知,系統(tǒng)共分為4 個模塊,分別為PLL鎖相環(huán)模塊、輸入數(shù)據(jù)位轉換模塊、輸出數(shù)據(jù)位轉換模塊和SRAM 控制信號產生模塊。其中PLL 模塊主要用于生成雙倍于上層總線的時鐘,以便于對SRAM 地址和數(shù)據(jù)采樣。由于SRAM 的數(shù)據(jù)端口是16 bit,與上層數(shù)據(jù)位數(shù)不匹配,因此在進行讀寫操作時,需要通過輸入和輸出數(shù)據(jù)位轉換模塊對讀寫數(shù)據(jù)進行位數(shù)轉換。SRAM 控制信號產生模塊通過接收復位信號(RST)、讀寫控制信號(WR_RD)、周期構成信號(FRAME_N)和地址信號(ADDR_in),生成SRAM 的控制、地址和數(shù)據(jù)信號。
下面根據(jù)SRAM 控制器IP 核的設計需求,使用偽代碼的形式列出各功能項。此種描述方法與文字描述相比能夠更加簡單明了地表達出各項內容,有助于設計人員與驗證人員的交互。其中低有效信號以!SIGNAL#出現(xiàn)時有效,以SIGNAL#出現(xiàn)時無效。<-符號左邊為結果,右邊為條件。
1.All State==one-h(huán)ot coding
2.(!SRAM_CE_N#* !SRAM_WE_N#)<-[!SRAM_CE_N#* !SRAM_WE_N#* (cmd=write)]
3.(!SRAM_CE_N#* !SRAM_OE_N* !SRAM_WE_N#)<-[!SRAM_CE_N#* SRAM_WE_N#* (cmd=read)]
4.SRAM_ADDR* SRAM_DQ delay 1 clock(cmd=write)
5.DATA_out delay 2 clock(cmd=read)
基于SystemVerilog 的驗證環(huán)境如圖2 所示[4]。此驗證環(huán)境通過約束隨機測試平臺對待測設計加載隨機輸入激勵,使用驗證工具分析,獲取代碼覆蓋率數(shù)據(jù)。同時使用SVA 對待測設計進行監(jiān)控,通過仿真獲得功能覆蓋率數(shù)據(jù)。
圖2 基于SystemVerilog 的驗證環(huán)境
由于設計復雜度的不斷提高,待測設計的功能也越來越多,這樣在使用直接測試方法編寫測試激勵時很難覆蓋到所有的功能。而隨機測試可以比傳統(tǒng)的直接測試更有效,通過指定約束條件,在特定區(qū)域內隨機產生輸入激勵,大大增加了測試的覆蓋范圍。圖3 顯示了兩種測試方法隨時間的進度比較,由圖可知,雖然隨機測試在驗證前期耗費時間較長,而隨著驗證工作的深入,可大幅度減少驗證時間[5]。
圖3 約束隨機測試與定向測試隨時間的進度比較
使用SystemVerilog 編寫測試平臺時可先定義一個帶有隨機變量和約束的類,然后對該類進行調用。在類中可把變量的類型聲明為rand 或randc 類型并可對其添加約束條件[6]。下列是一段產生隨機數(shù)據(jù)和地址的測試代碼,其中地址變量的值大于8 且小于16。
class add_data
rand logic signed[7:0]addr;
randc logic signed[31:0]data;
constraint d {addr>8;
addr<16;}
endclass
在當今流行的驗證技術中,基于斷言的驗證ABV(Assertion Based Verification)憑借著其在更短的時間內找到設計中存在的功能缺陷的優(yōu)點,迅速成為了驗證流程中的關鍵與必要的手段[7]。在驗證環(huán)境中增加斷言來加強驗證環(huán)境的能力。
作為SystemVerilog 的重要組成部分,SVA(SystemVerilog Assertion)是一種描述性語言,可以完美地描述和控制時序相關的問題,而且語言本身簡潔易讀容易維護,使得設計人員和驗證人員可以快速地對復雜設計的驗證行為進行定義,是使用最廣泛的驗證方法之一。SVA 提供了若干個內嵌函數(shù)來測試特定的設計情況,并且提供了一些構造來自動收集功能覆蓋數(shù)據(jù)。通過分析功能覆蓋數(shù)據(jù),可以分析出待測設計在功能上還有哪些缺陷[8]。
以SRAM 控制器IP 核的第2 條功能項為例,使用SVA 對此功能點進行監(jiān)控,如下所示。
sequence sram_write;
($fell(FRAME_N)&&(!WR_RD));
endsequence
property p_write;
@(posedge CLK_66M)sram_write|=>(!SRAM_CE_N &&!SRAM_WE_N);
endproperty
a_write:assert property(p_write);
c_write:cover property(p_write);
覆蓋率可分為代碼覆蓋率和功能覆蓋率兩種。代碼覆蓋用來檢查設計中的哪些代碼在驗證期間被執(zhí)行過。常見的代碼覆蓋有語句覆蓋、分支覆蓋和表達式覆蓋等。100%的代碼覆蓋率只能說明驗證過程中執(zhí)行了所有的源代碼,卻不能說明驗證的正確性和完整性[9]。計算代碼覆蓋率的公式為
式中,H(Hit)是擊中覆蓋點;A(Active)是有效覆蓋點。
功能覆蓋是對代碼覆蓋的補充。功能覆蓋用來衡量驗證對象是否實現(xiàn)了設計者所期望的功能。功能覆蓋中的覆蓋點由驗證者指定,需要更高的抽象級,即需要編寫覆蓋率模型。SystemVerilog 語言的結構化,易于構建功能覆蓋率模型,并且可以被SystemVerilog 仿真工具有效地執(zhí)行。在SystemVerilog語言中,功能驗證主要包括兩種手段:Cover Property和Covergroup。Cover Property 適用于在設計中采樣基于時鐘信號的數(shù)據(jù)。一般用在Block 中的低層次功能覆蓋和在接口中的較高層次覆蓋。Covergroup可以用在Module、Program、Interface 和Class 中[10]。計算功能覆蓋率的公式為
式中,M(Match)是屬性成功的次數(shù);A(Attempts)是屬性被嘗試檢驗的次數(shù)。
通過對SRAM 控制器IP 核搭建基于System-Verilog 的驗證環(huán)境,并在QuestaSim 10.0 驗證工具上實現(xiàn),獲取代碼覆蓋率和功能覆蓋率數(shù)據(jù)
表1 列出了使用傳統(tǒng)驗證方法和基于System-Verilog 的驗證方法獲取的代碼覆蓋率數(shù)據(jù)。從表中各類數(shù)據(jù)可以看出,基于SystemVerilog 的驗證方法能夠明顯的提高各覆蓋率,提升驗證質量。
圖4 所示為工具仿真50 μs 后的Cover Directives窗口顯示的覆蓋率數(shù)據(jù)。圖中,Count 列表示斷言在仿真時間內被激活的次數(shù),Cmplt%和Cmplt graph 列分別表示斷言指令的覆蓋率和覆蓋率的圖形化顯示。由圖可知,各功能均被實現(xiàn),且覆蓋率達到100%。此種通過SVA 斷言技術的方法在功能驗證上比傳統(tǒng)分析波形的方法更加直觀且節(jié)省時間。
表1 覆蓋率數(shù)據(jù)比較
圖4 功能覆蓋率
本文介紹了基于SystemVerilog 語言的驗證方法,并使用此方法對SRAM 控制器IP 核進行驗證。通過對比分析代碼覆蓋率數(shù)據(jù),可以看出了基于SystemVerilog 的驗證方法比傳統(tǒng)的驗證方法驗證質量更高,并結合SVA 斷言對設計進行監(jiān)控,可直觀快速的發(fā)現(xiàn)設計中的缺陷,提高驗證效率。
[1] Janick Bergeron,Eduard Cerny,Alan Hunter,et al. Verification Methodology Manual for SystemVerilog[M].Springer,2005.
[2] Stuart Sutherland,Simon Davidmann,Peter Flake. SystemVerilog for Design[M].Springer,2006.
[3] Mike Mintz,Robert Ekendahl. Hardware Verification with System-Verilog[M].Springer,2007.
[4] Srikanth Vijayaraghavan,Meyyappan Ramanathan,A Practical Guide for SystemVerilog Assertions[M].Springer,2005.
[5] Chris Spear.System Verilog for Verification[M].Springer,2006.
[6] Sasan Iman.Step-by-Step Functional Verification with SystemVerilog and OVM[M].Springer,2008.
[7] Eduard Cerny,Surrendra Dudani,John Havlicek,et al. The Power of Assertions in SystemVerilog[M].Springer,2010.
[8] SystemVerilog 3.1a Language Reference Manual. Accellera’s Extensions to Verilog[M].Accellera,Napa,California,2004.
[9] Janick Bergeron. Writing Testbenches Using SystemVerilog[M].Synopsys,Inc,2006.
[10] Andrew Piziali.Functional Verificational Coverage Measurement and Analysis[M].Netherlands:Kluwer Acadamic Publishers,2004.