【導讀】RISC-V的開(kāi)放性允許定制和擴展基于 RISC-V 內核的架構和微架構,以滿(mǎn)足特定需求。這種對設計自由的渴望也正在將驗證部分的職責轉移到不斷壯大的開(kāi)發(fā)人員社群。然而,隨著(zhù)越來(lái)越多的企業(yè)和開(kāi)發(fā)人員轉型RISC-V,大家才發(fā)現處理器驗證絕非易事。新標準由于其新穎和靈活性而帶來(lái)的新功能會(huì )在無(wú)意中產(chǎn)生規范和設計漏洞,因此處理器驗證是處理器開(kāi)發(fā)過(guò)程中一項非常重要的環(huán)節。
RISC-V的開(kāi)放性允許定制和擴展基于 RISC-V 內核的架構和微架構,以滿(mǎn)足特定需求。這種對設計自由的渴望也正在將驗證部分的職責轉移到不斷壯大的開(kāi)發(fā)人員社群。然而,隨著(zhù)越來(lái)越多的企業(yè)和開(kāi)發(fā)人員轉型RISC-V,大家才發(fā)現處理器驗證絕非易事。新標準由于其新穎和靈活性而帶來(lái)的新功能會(huì )在無(wú)意中產(chǎn)生規范和設計漏洞,因此處理器驗證是處理器開(kāi)發(fā)過(guò)程中一項非常重要的環(huán)節。
在復雜性一般的RISC-V 處理器內核的開(kāi)發(fā)過(guò)程中,會(huì )發(fā)現數百甚至數千個(gè)漏洞。當引入更多高級特性的時(shí)候,也會(huì )引入復雜程度各不相同的新漏洞。而某些類(lèi)型的漏洞過(guò)于復雜,導致在仿真環(huán)節都無(wú)法找到它們。因此必須通過(guò)添加形式驗證來(lái)賦能 RTL 驗證方法。從極端漏洞到隱匿式漏洞,形式驗證能夠讓您在合理的處理時(shí)間內詳盡地探索所有狀態(tài)。
在本文中,我們將介紹一個(gè)基于形式驗證的、易于調動(dòng)的 RISC-V 處理器驗證程序。與 RISC-V ISA 黃金模型和 RISC-V 合規性自動(dòng)生成的檢查一起,展示了如何有效地定位那些無(wú)法進(jìn)行仿真的漏洞。通過(guò)為每條指令提供一組專(zhuān)用的斷言模板來(lái)實(shí)現高度自動(dòng)化,不再需要手動(dòng)設計,從而提高了形式驗證團隊的工作效率。
1、基于先進(jìn)內核的處理器開(kāi)發(fā)
嵌入式系統的應用越來(lái)越廣泛,同時(shí)對處理器的性能、功耗和面積(PPA)要求越來(lái)越高,因此我們將這樣的產(chǎn)業(yè)和技術(shù)背景下用實(shí)際案例來(lái)分析處理器的驗證。Codasip L31 是一款用于微控制器應用的 32 位中端嵌入式 RISC-V 處理器內核。作為一款多功能、低功耗、通用型的 CPU,它實(shí)現了性能和功耗的理想平衡。從物聯(lián)網(wǎng)設備到工業(yè)和汽車(chē)控制,或作為大型系統中的深度嵌入式內核,L31可在一個(gè)非常小巧緊湊的硅片面積中實(shí)現本地處理能力。L31是通過(guò) Codasip Studio 使用 CodAL 語(yǔ)言設計而成,該內核完全可定制,包括經(jīng)典的擴展和特性,以及實(shí)現這些擴展和特性所需的高效和徹底的驗證。
圖1 Codasip L31處理器內核架構圖解(來(lái)源:Codasip)
表 1 Codasip L31內核展示了RISC-V處理器的優(yōu)異特性
特性 | 描述 |
指令集架構 (ISA) | RV32 I/M/C/F/B |
流水線(xiàn) | 3級順序流水線(xiàn) |
分支預測器 | 可選,優(yōu)化過(guò)的單線(xiàn)程性能 |
并行乘法器 | 并行實(shí)現,單周期乘法 |
序列除法器 | 順序執行 |
內存保護 | ●具有 2/4/8/16 個(gè)區域的可選MPU ●具有 2/4/8/16 個(gè)區域的物理內存屬性 機器和用戶(hù)權限模式 |
緊耦合存儲器 (TCM) | ●指令和數據TCM ●可定制大小高達2MB AHB-Lite TCM 輔助端口 |
接口 | 用于獲取和數據的 32 位 AHB-Lite 接口(帶緩存的 AXI-Lite) |
浮點(diǎn)單元 (FPU) | 可選,單精度 |
調試 | ●標準 RISC-V 調試 ●2/4 JTAG ●2-8 個(gè)斷點(diǎn)和觀(guān)察點(diǎn) ●系統總線(xiàn)接入 |
中斷 | ●中斷控制器 ●標準 RISC-V CLINT 執行 ●多達 128 個(gè)中斷 ●WFI(等待中斷) ●NMI(不可屏蔽中斷) |
2 創(chuàng )建最優(yōu)的RISC-V處理器驗證方法
處理器驗證需要制定合適的策略、勤勉的工作流程和完整性,而方興未艾的、更加靈活的RISC-V處理器開(kāi)發(fā)則需要針對自己處理器功能設置做詳盡的驗證規劃;也需要參考一些內核供應商的內外部因素,比如該供應商自己的開(kāi)發(fā)工具體現和外部開(kāi)發(fā)工具伙伴,以及同系、同款或者同廠(chǎng)內核的出貨量等。
驗證處理器意味著(zhù)需要考慮諸多不確定性。最終產(chǎn)品將運行什么軟件?用例是什么?可能發(fā)生哪些異步事件?這些未知數意味著(zhù)較大的驗證范圍。然而,覆蓋整個(gè)處理器狀態(tài)空間是無(wú)法實(shí)現的,這也不是Codasip這樣的領(lǐng)先內核供應商的目標。
在確保處理器品質(zhì)的同時(shí),充分利用時(shí)間和資源才是處理器驗證的正解。明智的處理器驗證意味著(zhù)在產(chǎn)品開(kāi)發(fā)過(guò)程中盡早并高效地發(fā)現相關(guān)漏洞。在頂層方面,Codasip提供了多種創(chuàng )新的驗證路徑,其驗證方法基于以下內容:
驗證是在處理器開(kāi)發(fā)期間與設計團隊合作完成的。
驗證是所有行業(yè)標準技術(shù)的組合。使用多種技術(shù)可以讓您最大限度地發(fā)揮每一種技術(shù)的潛力,并有效地覆蓋盡可能多的極端情況。
驗證需持續進(jìn)行。有效的辦法是運用隨著(zhù)處理器復雜程度而不斷發(fā)展的技術(shù)組合。
在驗證L31內核時(shí),我們的想法是讓仿真和形式驗證相輔相成。
2.1仿真的優(yōu)勢和目的
仿真實(shí)際上不可或缺,它允許我們在兩個(gè)級別上進(jìn)行驗證設計:
頂層仿真(Top-level),主要是為了確保設計在最常見(jiàn)的情況下符合其規范(CPU 的 ISA)。
塊級仿真(Block-level),以確保微架構按照預期設計。然而,很難將這些檢查與頂層架構規范聯(lián)系起來(lái),因為這通常依賴(lài)于定向隨機測試生成,因此能夠應付棘手和不尋常的情況。
頂層仿真通常不像塊級仿真那樣特意強調設計。因此,它可以實(shí)現針對 ISA 的設計的整體驗證。
2.2形式驗證的優(yōu)勢和目的
形式驗證使用數學(xué)技術(shù)對以斷言形式編寫(xiě)的問(wèn)題提供有關(guān)設計的明確答案。
形式驗證工具對斷言和設計的組合進(jìn)行詳盡的分析。不需要指定任何刺激,除了指定一些非正常情況以避免假漏洞。該驗證工具可以提供詳盡的“已證實(shí)”答案或“失敗”答案,同時(shí)生成顯示刺激的波形,證明斷言是錯誤的。在大型和復雜的設計中,工具有時(shí)只能提供有限的證明,這意味著(zhù)從重置到特定數量的周期都不存在漏洞場(chǎng)景。同時(shí)也存在不同的技術(shù)方法來(lái)增加該周期循環(huán)次數,或獲得“已證明”或“失敗”的答案。
形式驗證用于以下情況:
為完整的驗證一個(gè)模塊,潛在地消除了任何仿真的需要。由于形式驗證的計算復雜性,形式化驗收(sign-off)僅限于小模塊。
除了仿真之外,還要驗證一個(gè)模塊,即使是個(gè)大模塊,因為形式驗證能夠在極端情況下找到漏洞,而隨機仿真只能“靠運氣”找到,而且概率非常低。
處理一些仿真不充分的驗證任務(wù),例如時(shí)鐘門(mén)控、X態(tài)傳播(X-propagation)、數據增量處理(CDC)、等價(jià)性檢查等。
幫助調查缺少調試信息的已知漏洞,并確定潛在的設計修復。
對漏洞進(jìn)行分類(lèi)和識別,以便通過(guò)形式驗證來(lái)學(xué)習和改進(jìn)測試平臺/仿真。
為了潛在地幫助仿真,填充覆蓋范圍中的漏洞。
3解決方案:一種基于形式驗證的高效的 RISC-V 處理器驗證方法
為了獲得一種高效的RISC-V處理器驗證方法,我們決定以采用西門(mén)子EDA 處理器驗證APP來(lái)高效驗證Codasip L31 RISC-V 內核為例,來(lái)進(jìn)行詳盡的說(shuō)明。該工具的目標是確保 RTL 級別的處理器設計正確且詳盡地實(shí)現指令集架構 (ISA)規范,而本文希望介紹的是一種端到端的解決方案
1.該工具從一個(gè)頂層并有效的“黃金模型”中生成以下:
在 Verilog 語(yǔ)言中,ISA 的單周期執行模型。
一組斷言,用于檢查待測試模塊 (DUT)和模型 (M)在架構級別的功能是否相同。
注意:這并沒(méi)有進(jìn)行任何正式等價(jià)性檢查。
2.當在 DUT 中獲取新指令 (I)時(shí),會(huì )捕獲架構狀態(tài) (DUT-init)。
3.該指令在流水線(xiàn)中運行。
4.捕獲另一個(gè)架構狀態(tài)(DUT-final)。
5.M 被輸入 DUT-init 和 I,并計算出一個(gè)新的 M-final 狀態(tài)。
6.斷言檢查 M-final 和 DUT-final 中的資源是否具有相同的值。
圖 2 3 級 L31 內核的端到端驗證流程(當驗證指令 I 既沒(méi)有停止也沒(méi)有清除緩存數據時(shí))
這種端到端的驗證方法可以在比整個(gè)CPU 更小、更簡(jiǎn)單的模塊(例如數據緩存)上合理實(shí)現??梢栽诰彺嫔蠈?xiě)入端到端斷言,以驗證寫(xiě)入特定地址的數據是否從同一地址正確讀取。這使用了眾所周知的形式驗證技術(shù),例如記分牌算法。
然而,對于 CPU來(lái)說(shuō),手動(dòng)編寫(xiě)這樣的斷言是不可行的。它需要指定每條指令的語(yǔ)義,并與所有執行模式交叉。這通常根本不可能實(shí)現。 CPU 的形式驗證被分成更小的部分,但是仍然無(wú)法驗證所有部分是否正確執行了 ISA。
使用建議的方法意味著(zhù)能夠立即驗證完整的 L31 內核,而無(wú)需編寫(xiě)任何復雜的斷言。如上所述,黃金模型和檢查斷言是自動(dòng)生成的。
這種方法同時(shí)具有高度可配置性和自動(dòng)化性,特別是對于 RISC-V CPU,例如 L31:
用戶(hù)可以指定設計執行的頂層 RISC-V 參數和擴展。
該工具能夠自動(dòng)從設計中提取數據,例如將架構寄存器與實(shí)際每秒浮點(diǎn)運算次數相關(guān)聯(lián)。
該工具允許添加自定義,例如用來(lái)驗證的新指令(具有為用戶(hù)“擴展”黃金模型的能力)。
最后,黃金模型不是由Codasip開(kāi)發(fā)的(除了一些自定義部分),這一事實(shí)提供了額外的保證,這從驗證獨立性的角度來(lái)看很重要。
本文摘錄于《基于形式的高效 RISC-V 處理器驗證方法 – 形式化驗證》白皮書(shū),出版人為總部位于歐洲的全球領(lǐng)先RISC-V供應商和處理器解決方案領(lǐng)導者,該公司的處理器IP目前已部署在數十億顆芯片中。Codasip通過(guò)開(kāi)放的RISC-V ISA、Codasip Studio處理器設計自動(dòng)化工具與高品質(zhì)的處理器IP相結合,為客戶(hù)提供定制計算。這種創(chuàng )新方法能夠輕松實(shí)現定制和差異化設計,從而開(kāi)發(fā)出高性能的、改變游戲規則的產(chǎn)品,實(shí)現真正意義上的轉型。如希望得到該白皮書(shū)的完整版本,可瀏覽Codasip中文網(wǎng)站或者關(guān)注該公司微信公眾號。
該技術(shù)白皮書(shū)英文版下載鏈接:https://codasip.com/papers/a-formal-based-approach-for-efficient-riscv-processor-verification
免責聲明:本文為轉載文章,轉載此文目的在于傳遞更多信息,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問(wèn)題,請聯(lián)系小編進(jìn)行處理。
推薦閱讀:
TI 利用兩種控制方案降低 BLDC 電機驅動(dòng)器的噪音