<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > 利用先進(jìn)形式驗證工具來(lái)高效完成RISC-V處理器驗證

利用先進(jìn)形式驗證工具來(lái)高效完成RISC-V處理器驗證

作者:Laurent Arditi, Paul Sargent, Thomas Aird 職務(wù):Codasip高級驗證/形式驗證工程師 時(shí)間:2023-06-15 來(lái)源:電子產(chǎn)品世界 收藏

我們在上一篇技術(shù)白皮書(shū)《基于形式的高效處理器方法》中,以Codasip L31這款用于微控制器應用的32位中端嵌入式處理器內核為例,介紹了一個(gè)基于形式的、易于調動(dòng)的處理器驗證程序。它與RISC-V ISA黃金模型和RISC-V合規性自動(dòng)生成的檢查一起,展示了如何有效地定位那些無(wú)法進(jìn)行仿真的漏洞。

本文引用地址:http://dyxdggzs.com/article/202306/447716.htm

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)。

在本文中,我們將以西門(mén)子EDA處理器驗證應用程序為例,結合Codasip L31這款廣受歡迎的RISC-V處理器IP提供的特性,來(lái)介紹一種利用先進(jìn)的EDA工具,在實(shí)際設計工作中對處理器進(jìn)行驗證的具體方法。這種驗證方法通過(guò)為每條指令提供一組專(zhuān)用的斷言模板來(lái)實(shí)現高度自動(dòng)化,不再需要手動(dòng)設計,從而提高了形式驗證團隊的工作效率。 

如何使用西門(mén)子EDA處理器驗證應用程序

在我們使用該工具之前,需要為Codasip L31 RISC-V內核進(jìn)行形式驗證設置。此設置類(lèi)似于使用帶有抽象、約束等基于斷言的驗證(ABV)方法來(lái)形式驗證標準斷言的設置。

該工具允許驗證特定類(lèi)別的指令,并啟用或禁用某些資源檢查。有了這個(gè)工具,我們的驗證可以從一個(gè)簡(jiǎn)化的空間開(kāi)始,這包括:

·       只有最簡(jiǎn)單的指令,例如只有整數運算和邏輯指令。

·       只有最簡(jiǎn)單(但最重要)的檢查。例如通用寄存器的更新。稍后可以添加的其他檢查指的是系統寄存器(CSR)或程序計數器(PC)的更新以及內存訪(fǎng)問(wèn)。

·       只有主功能模式:沒(méi)有中斷、中止、異?;蛘{試訪(fǎng)問(wèn)。

這三個(gè)正交約束可以根據微架構特征的關(guān)鍵程度逐一放寬。經(jīng)典的形式驗證技術(shù)可用于幫助獲得檢查器斷言的結果:抽象、設計縮減、案例拆分、不變量生成、半形式漏洞搜尋等。 

結果

這種基于形式的方法使我們能夠找到極端情況,并深入了解改進(jìn)我們的仿真和測試平臺。在其他基于仿真的驗證流程運行而未發(fā)現新漏洞之后,此驗證工作在項目快結束時(shí)完成,這使我們能夠找到真正的和重要的漏洞。

我們可以特別關(guān)注其中的三個(gè)漏洞,它們從用于L31的西門(mén)子EDA處理器驗證應用程序中找到。以下是發(fā)現和彌補這三個(gè)漏洞的具體方法: 

1. 分支預測器損壞

有了這個(gè)漏洞,返回到先前持有跳轉/分支指令的PC地址會(huì )導致分支預測器錯誤地預測跳轉到另一個(gè)地址。當滿(mǎn)足以下條件時(shí),會(huì )發(fā)現這種極端情況:

自修改代碼

image.png

當添加未定義的指令(新指令異常)時(shí),也會(huì )出現此漏洞極其罕見(jiàn)的版本:

image.png

該漏洞是通過(guò)檢查PC值的斷言發(fā)現的,直接后果是錯誤地執行了一個(gè)分支指令,導致代碼執行錯誤。通過(guò)正確清除分支預測和流水線(xiàn)的緩沖數據來(lái)修復此漏洞。

使用西門(mén)子EDA處理器驗證應用程序查找此漏洞需要8個(gè)周期和15分鐘的運行時(shí)間。在仿真中重現該漏洞需要一個(gè)支持自修改代碼的隨機生成器,該代碼可正好返回相同的地址并將該地址從分支修改為另一種類(lèi)型的指令。換句話(huà)說(shuō),隨機生成器不可能做到這一點(diǎn)。只有知道漏洞詳細信息的定向序列可以做到。 

2. 同一條指令的多次執行

出現這個(gè)漏洞,NPC(下一個(gè) PC)單元停頓就會(huì )出現,這會(huì )導致多次獲取相同的地址。每條指令執行并退出。

當滿(mǎn)足以下條件時(shí),會(huì )出現這種極端情況:

·       內核配置有TCM。

·       在提取總線(xiàn)上可以看到特定的延遲。

·       在流水線(xiàn)內可以看到特定的停頓。

該漏洞會(huì )直接在流水線(xiàn)的其余部分造成未被正確處理的停頓,導致同一指令的多次執行??梢酝ㄟ^(guò)正確處理其余流水線(xiàn)中的停頓來(lái)修復此漏洞。

使用西門(mén)子EDA處理器驗證應用程序查找此漏洞需要5個(gè)周期和10分鐘的運行時(shí)間。在仿真中再現它需要隨機延遲和停頓的隨機模式,但也需要相當多的“運氣”來(lái)再現這個(gè)特定序列。 

3. 合法的 FENCE.I 指令被認為是非法的

出現這個(gè)漏洞,內存屏障會(huì )由CSR單元處理。如果與CSR操作的CSR地址位元對應的指令位元(位 [31:20])與某些CSR寄存器(例如調試、計數器)匹配,則指令可能會(huì )被錯誤地標記為非法。

當滿(mǎn)足以下條件時(shí),會(huì )發(fā)現這種極端情況:

·       imm[11:0]/rs1/rd 中有隨機位。

·       這些位元與其他一些非法指令相匹配。 

image.png

該漏洞的直接后果是錯誤地引發(fā)了非法指令異常。通過(guò)正確解碼流水線(xiàn)每個(gè)部分的完整指令可修復此漏洞。

使用西門(mén)子EDA處理器驗證應用程序查找此漏洞僅用了8個(gè)周期和5分鐘的運行時(shí)間。因為編譯器只會(huì )創(chuàng )建最簡(jiǎn)單的二進(jìn)制編碼實(shí)現,所以很難在仿真中重現該漏洞。它需要一個(gè)特殊的編譯器來(lái)創(chuàng )建合法編碼的變體,或者使用各種編碼進(jìn)行特殊的定向測試。 

從中發(fā)現的優(yōu)勢/結論

應用這種方法可以提高驗證團隊的工作效率。在項目的關(guān)鍵階段提高效率。雖然在開(kāi)始時(shí)構建正確的設置需要付出努力,但隨著(zhù)我們添加新的指令類(lèi)別和新的檢查器,進(jìn)度就會(huì )加快。這個(gè)“最佳點(diǎn)”是我們發(fā)現大多數問(wèn)題的地方,隨著(zhù)放寬約束以允許該工具探索更深奧的操作模式,速度就開(kāi)始放緩。 

image.png

圖 1 驗證L31 RISC-V內核的最佳效率的最佳點(diǎn)(來(lái)源:Codasip) 

總的來(lái)說(shuō),因為使用西門(mén)子EDA處理器驗證應用程序驗證整個(gè)CPU所需的總體工作量遠低于手動(dòng)達到類(lèi)似驗證質(zhì)量所需的工作量,所以使用該工具是相當高效的。在總共30個(gè)漏洞中,有15個(gè)是通過(guò)形式驗證發(fā)現的。 

表1  仿真 vs形式驗證image.png

當結合在一起到達高質(zhì)量水平時(shí),仿真和形式驗證是非常強大的,并使我們能夠促進(jìn)改進(jìn)驗證的良性循環(huán)。

image.png

圖 2 通過(guò)持續改進(jìn)達到一流的品質(zhì)(來(lái)源:Codasip) 

該解決方案在Codasip L31這種3級流水線(xiàn)微控制器上的實(shí)施被證明是可行的,現在已部署到Codasip的下一代RISC-V內核中,包括嵌入式和應用內核。借助在L31上使用西門(mén)子EDA處理器驗證應用程序積累的知識,即使應用內核更復雜,也可以減少建立穩健環(huán)境所需的工作量。而Codasip的下一步計劃包括進(jìn)一步研究該工具如何應用于超標量和亂序內核,以及支持新的 RISC-V 擴展。  

補充閱讀

·       RISC-V處理器的高效驗證——技術(shù)白皮書(shū)

·       構建用于處理器驗證的瑞士奶酪模型方法 - 博客文章 

本文摘錄于《基于形式的高效 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)注該公司微信公眾號。



關(guān)鍵詞: 形式驗證工具 RISC-V 驗證

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>