文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2017.02.005
中文引用格式: 朱峰,魯征浩,朱青. 形式化驗證在處理器浮點運算單元中的應用[J].電子技術應用,2017,43(2):29-32.
英文引用格式: Zhu Feng,Lu Zhenghao,Zhu Qing. Effective formal applications in CPU floating point unit[J].Application of Electronic Technique,2017,43(2):29-32.
0 引言
隨著集成電路設計規模和復雜度增加,系統設計的功能驗證面臨著嚴峻挑戰。據統計,驗證的時間和人力投入已占到整個設計的50%以上,用于測試和錯誤診斷的代價超過了產品實現成本的50%。因此,推出一種新的驗證方法成為驗證界的熱點和難點。
傳統的模擬驗證方法,基于軟件或硬件平臺設計系統模型,通過對比測試向量的輸出結果判斷設計是否達到標準,這很大程度上取決于測試向量的完備性[1]。面對大型設計時,模擬驗證逐漸暴露其局限性,難以覆蓋所有的測試向量,無法保證驗證的完整性。
形式化驗證采用系統高效的方法,遍歷整個狀態空間,能夠對設計進行完整的驗證,近年來受到業界的廣泛關注。形式驗證包括等價性檢驗、性質檢驗和定理證明。等價性檢驗是指驗證一個設計的不同描述形式之間的功能等價性。性質檢驗利用時態邏輯描述設計功能,通過窮舉法驗證設計的系統是否滿足功能要求。定理證明從系統的公理出發,使用推理規則逐步推導出其所期望特性的證明過程,該方法對驗證人員數學功底和推導能力要求很高,在學術研究之外應用較少。研究形式驗證在實際項目中的應用,對于提高驗證效率,縮短產品開發周期具有重要意義。
本文基于一款處理器芯片的浮點運算單元,應用Cadence公司JasperGold形式驗證工具,針對流水控制和計算單元中的關鍵模塊分別采用了FPV和SEC進行驗證。
1 SAR驗證
軟件結構寄存器(Software Architected Register,SAR)在浮點運算單元流水線中作為第二級存儲區域。SAR整體4個讀端口和4個寫端口,其內部由8個bank塊組成,每個bank塊的本質是SRAM,一個SRAM是一讀一寫,有128個entry,64個結構寄存器。SAR進行讀/寫操作時,會從8個bank中選擇bank塊的對應entry,將其中數據傳輸到其中一個讀/寫端口處。當出現多個讀/寫操作訪問同一個bank塊時,會發生沖突,需要報錯。
SAR的性質檢驗采用的是JasperGold的FPV。性質檢驗的主要工作是根據驗證的需要編寫對應的性質(property),性質的構建方式和完備程度會直接影響到驗證的效果。常用編寫property的語言有System Verilog和PSL(Property Specification Language),JasperGold對這兩種語言都支持。SAR主要的驗證要點:(1)遍歷整個讀寫的地址空間;(2)發生沖突時,能否報錯;(3)檢測在不同的工作模式下,是否能正常工作。
在進行端對端數據傳輸時,數據包在數據通路中會經過緩沖器或存儲器,需要進行數據傳輸完整性驗證。因為存儲器這類結構易于理解而且很少會出現bug,所以在整個項目的驗證過程中不會引起大家的關注。但是因為存儲器巨大的狀態空間,使其成為提高形式化驗證性能的瓶頸。為解決這一問題,在對SAR進行驗證時,使用了JasperGold提供的形式計分板證明加速器(Formal Scoreboard Proof Accelerator,PA)。PA可以把存儲器進行抽象化,同時保留充分的信息,確保Formal Scoreboard中結果的精確。在SAR具體驗證時,用PA替換了SAR中的bank,同時為了簡化驗證復雜度,在構建屬性斷言時,核心思想是:在沒有發生沖突的情況下,讀操作讀取的數據應該等于上一次寫操作對應地址的寫入數據。Check會對相對應寫操作數據和讀數據進行對比,同時檢測沖突發生的情況,具體的驗證構如圖1所示。
通過對驗證結果分析,發現編寫的property涵蓋了所有的驗證要點,且全部得到了證明。尤其是使用PA之后,證明消耗的時間大大縮短,驗證性能提升顯著。如圖2和圖3所示,沒有使用PA前,針對SAR一個端口遍歷所有讀寫地址空間,總的證明時間為286.41 s,使用PA之后,所需的證明時間僅為1.04 s。
2 ECC驗證
為了保持數據的正確性和一致性,浮點運算單元的流水線控制中引入了糾錯碼(Error Correcting Code,ECC)校驗機制,實現對源操作數的錯誤檢出和及時糾正,利用數據的ECC碼可以實現“糾一檢二”,即僅有1 bit數據出錯時,能糾正該錯誤,當數據有2 bit錯誤時,只能檢測出錯誤但不能恢復。
ECC校驗是利用數據初始的糾錯碼和讀取該數據時重新生成的ECC碼按位異或生成綜合位,根據綜合位判斷數據是否出錯,并將綜合位輸出供糾錯使用。ECC恢復是依據ECC校驗輸出的糾錯信息糾正待糾錯數據,當數據出錯位大于一位時,錯誤不可恢復。
ECC校驗和ECC恢復是流水線中不同執行階段的兩個模塊,相互獨立又相互依賴。當數據經過ECC校驗模塊且輸出的error信號為高時,待糾錯數據和糾錯碼被驅動給ECC恢復模塊來判斷數據是否可以恢復并糾錯。若兩個模塊分別驗證,復雜的糾錯碼產生機制和有依賴關系輸入信號增加了驗證難度。故將兩個模塊直接相連,通過對比輸入數據與糾錯后數據來驗證模塊功能。
如圖4所示,設計一個組合電路實現對輸入數據的校驗和糾錯,接入一個錯誤數據生成模塊和糾錯碼產生模塊實現對ECC校驗輸入信號的產生,避免在輸入信號property中描述復雜的糾錯碼產生機制。錯誤數據生成模塊根據輸入信號錯誤模式e指定注入錯誤的數量,錯誤0和錯誤1信號指定數據具體翻轉位。將ECC校驗、ECC恢復、ECC產生和錯誤產生模塊封裝為一個整體,作為性質檢驗的設計實現。
對于組合后的ECC模塊,針對不同的數據出錯類型,有3類property需檢驗。在數據沒有出錯的情況下,輸出信號error為0;數據有1 bit出錯時,輸出error為1,數據不可恢復為0且糾錯后數據與輸入數據相等;數據有2 bit錯誤時,輸出error為1且數據不可恢復信號為1。根據錯誤位產生的邏輯,當需要產生2 bit錯誤時,需要保證兩次的翻轉位不同,即錯誤0!=錯誤1。實際的流水線邏輯中數據位寬為128 bit,對數據的高64 bit和低64 bit分別描述其property驗證。
JasperGold會遍歷所有的狀態空間,驗證結果顯示耗時101 s,證明了設計包含描述的所有屬性,說明ECC校驗模塊“檢二”和ECC恢復模塊“糾一”的功能實現。
3 共用模塊的等價性檢驗
浮點單元的運算模塊非常適合形式化驗證,尤其是等價性檢驗。進行等價性檢驗主要的工作在于開發一個符合設計規格的參考模型,參考模型可以根據需要靈活的應用不同語言編寫。目前業界主流的形式化驗證工具只支持Verilog HDL和VHDL,RTL到RTL的等價性檢驗已經發展比較成熟,有著相對完善的標準。本文采用的JasperGold支持Verilog HDL和VHDL這兩種語言,也有一些工具支持C語言,但C到RTL的等價性檢驗應用較少,發展不是很成熟。
在浮點單元運算IP設計開發時,先對多個運算IP中共用的基本模塊進行了統一設計,在之后各個IP設計中對共用模塊進行統一調用。所以,浮點單元運算IP的驗證工作先是對共用模塊進行驗證,然后是對各個IP的驗證。出于項目實際情況考慮,在對共用模塊進行驗證時,因為共用模塊實現的功能相對單一,復雜度不高,所以共用模塊的參考模型使用Verilog HDL編寫。而對運算IP驗證的時候,因為IP復雜度高,開發相應參考模型的工作量很大,因此形式化驗證和仿真驗證共用了統一由C語言開發的參考模型。由于JasperGold不支持C到RTL的等價性檢驗,在對IP驗證的時候使用了其它的驗證平臺。
共用模塊的等價性檢驗采用的是JasperGold的SEC,主要包括加法器、減法器、循環移位器、前導零、4-2壓縮器、舍入器(rounder)等模塊。在編寫參考模型時,除了保證其可綜合之外,還需要考慮功能的正確。
圖5給出了rounder的形式驗證報告,可以看出,相比于仿真驗證,證明時間幾乎為0,驗證速度明顯提高。而且這一優勢在對整個IP進行驗證時更加突出,對浮點單元各個運算IP進行等價性驗證時,除了乘加模塊需要對參考模型進行特殊的改動[3],其它模塊包括除法、倒數估值等模塊,都能夠比較快速地收斂,極大地縮減驗證周期。
4 總結
本文主要介紹了形式化驗證方法在浮點單元功能驗證中的具體應用。結果表明,相比模擬仿真驗證,形式化驗證不用構造復雜的驗證平臺和編寫海量的測試激勵,在極大減少驗證工作量的同時,提高了的可靠性,縮短了驗證周期。
參考文獻
[1] LAM W.Hardware design verification:simulation and formal method-based approaches[M].US:Prentice Hall PTR,2005.
[2] 陳云霽,馬麟,沈海華,等.龍芯2號微處理器浮點除法功能部件的形式驗證[J].計算機研究與發展,2006(10):1835-1841.
[3] JACOBI C,KAI W,PARUTHI V,et al.2005 Design,Automation and Test in Europe Conference and Exposition (DATE 2005)[C].Munich,2005.
作者信息:
朱 峰,魯征浩,朱 青
(蘇州大學,江蘇 蘇州215006)