RISC-V 架構面臨軟件可移植性挑戰
與會(huì )嘉賓
本文引用地址:http://dyxdggzs.com/article/202411/464683.htm--Arteris 公司的客戶(hù)服務(wù)副總裁 John Min、
--Codasip 公司的首席技術(shù)官 Zdeněk P?ikryl、
--西門(mén)子 EDA 的市場(chǎng)總監 Neil Hand、
--Synopsys 公司的戰略項目與系統解決方案執行總監 Frank Schirrmeister、
--Axiomise 公司的首席執行官 Ashish Darbari、
--Breker Verification 公司的首席執行官 Dave Kelf
擁有明確的指令集架構(ISA)、定義好的架構以及完整的規范時(shí),驗證處理器就已經(jīng)很困難了。而 RISC-V 卻不具備這些條件。這是否會(huì )導致定義一致性變得更加困難?
Hand:RISC-V 的優(yōu)勢在于其可定制性,但這也是它的劣勢。大多數人沒(méi)有意識到,當你做出更改時(shí),你幾乎已經(jīng)拋棄了 IP 供應商的所有驗證工作。你必須評估當前的狀況。在某些方面,你可以選擇特定的架構,但你不必修改處理器。你可以找一個(gè) IP 供應商,采用他們的處理器,進(jìn)行驗證,然后說(shuō):「我將把這個(gè)視為標準,并打算在此基礎上開(kāi)發(fā)加速器?!挂驗檫@樣做更安全。這是風(fēng)險與收益的權衡。我想在哪里承擔風(fēng)險,以及我能從中獲得什么回報?很多人最初被這種巨大的靈活性所吸引,卻沒(méi)有意識到這種靈活性也帶來(lái)了巨大的責任,即確保在嘗試更改時(shí)不會(huì )出錯。
Min:也許我們應該回到定義上。不同的階段適合不同的定義。所以,也許一致性是在架構層面上定義的。也許驗證或確認是在微架構層面上進(jìn)行的。這取決于你正在驗證、確認或遵循的是哪個(gè)規范。
Kelf:Arm 有一個(gè)處理器架構和建立在其上的指令集,這就是他們正在驗證的內容。他們投入了大量的精力來(lái)確保它運行得非常好。而 RISC-V,你有一個(gè) ISA,然后有非常多潛在的架構。每個(gè)人都想出了各種聰明且不同的方法,這甚至還沒(méi)有考慮到添加指令。所以,首先,這就是為什么「配置文件」的想法如此強大?,F在,你正試圖設置一些邊界,并將驗證問(wèn)題組織成至少是可以實(shí)現的東西。否則,由于它的可變性,幾乎是不可能實(shí)現的。除此之外,你還需要處理這種可變指令的情況。在 RISC-V 對此大做文章之前,Arm 是不允許這樣做的。所以,Arm 現在雖然允許使用可變指令,但他們在主架構和可添加指令的小區域之間設置了一道巨大的防火墻。即便如此,他們在驗證這方面也遇到了問(wèn)題。對于來(lái)自不同公司的可變架構,以及額外的指令,配置文件在一定程度上有助于解決這個(gè)問(wèn)題。至少我們可以制定一些可以認證的定義。你需要那個(gè)「黃金模型」。但即便如此,這仍然很困難。那么,你如何創(chuàng )建與架構無(wú)關(guān)、與添加的額外指令無(wú)關(guān)的深入驗證測試,并確保無(wú)論誰(shuí)獲得這些處理器,都能絕對依賴(lài)它來(lái)運行他們的軟件棧,而不會(huì )出錯呢?大多數都會(huì )出問(wèn)題。
Hand:如果你看看 RISC-V 最初的用例,它確實(shí)是為嵌入式系統設計的。他們編寫(xiě)所有的軟件,使用定制的編譯器。這真的不重要。如果你開(kāi)始看現在推出的 RISC-V 系統,無(wú)論是單板計算機還是筆記本電腦,你都必須考慮生態(tài)系統。這些處理器最好與指令集兼容。這真的取決于你的用例是什么。
P?ikryl:不僅是指令集。這只是故事的一部分。他們根據規范編譯配置文件。這是目前缺少的,因為我們確實(shí)有這些架構測試。它存在于 GitHub 上。你可以運行它,但它幾乎不會(huì )給你任何信息。它只會(huì )告訴你,「匯編良好,二進(jìn)制良好?!箖H此而已。它不會(huì )告訴你,當我從用戶(hù)模式切換到另一種模式時(shí),是否正確地完成了切換。這就是我認為如果做得正確,認證可能會(huì )有所幫助的地方。
Kelf:而這正是社區目前正在努力弄清楚的問(wèn)題。我們如何才能正確地做到這一點(diǎn)?
Hand:考慮到你所說(shuō)的,你能正確地做到這一點(diǎn)嗎?你有多種架構,取決于配置文件,取決于擴展,你有數十種微架構來(lái)實(shí)現其中任何一種。對規范的不同解釋層出不窮。然后你還需要實(shí)現,這可能會(huì )在微架構內再次引入不同的東西,而你又進(jìn)入了物理實(shí)現階段,這為整個(gè)事情帶來(lái)了新的轉折。
Min:這是從另一個(gè)角度談?wù)摵诵膬炔?。但我們是否還需要關(guān)注內核外部?哪些總線(xiàn),甚至是那些可能有未記錄小端口的標準總線(xiàn)。當 Arm 設計一個(gè)處理器和網(wǎng)絡(luò )芯片時(shí),他們可以繞過(guò)這個(gè)問(wèn)題,因為他們將其視為一個(gè)嵌入式系統。但當我們參與進(jìn)來(lái)時(shí),情況就不同了。
Hand:這就是你開(kāi)始看到一些混合系統的原因嗎?當他們真的需要利用軟件生態(tài)系統時(shí),他們會(huì )選擇一個(gè)處理器,但當他們真的需要優(yōu)化和壓榨處理器的最后一點(diǎn)性能時(shí),他們會(huì )選擇 RISC-V 架構。你的確會(huì )看到越來(lái)越多的混合系統采用多種處理器架構。也許他們在說(shuō),對于這種特殊情況,這是最安全的選擇。人們喜歡把它說(shuō)成是一場(chǎng)生死之戰。其實(shí)不然。
Lin:這是一個(gè)優(yōu)化選擇。
Kelf:但你提出了一個(gè)很好的觀(guān)點(diǎn)。僅僅是處理器嗎?現在我們在看整個(gè) SoC——甚至可能是中斷控制器、內存管理單元,以及處理器周?chē)乃谢窘M件。你可以看到它正在慢慢擴展,涵蓋了所有這些 SoC 組件。
驗證所有定義為 RISC-V 的內容是一回事,但它未定義的內容呢?當我們開(kāi)始談?wù)撚布?軟件契約時(shí),這意味著(zhù)它們之間共享的一切。為了有一個(gè)符合性的概念,你必須知道契約正在被履行。但契約并沒(méi)有定義。你如何處理這些情況?
Kelf:我們有很多客戶(hù)都在使用 SoC,他們從其他地方引入了 RISC-V。這些處理器中有很多都有漏洞,要么是對 ISA 的誤解,要么就是完全的漏洞。人們認為,當他們獲得一個(gè)處理器 IP 時(shí),就像獲得了一個(gè) Arm 處理器一樣能正常工作,而且非常出色。在很多情況下,處理器 IP 很糟糕,因為 ISA 雖然已經(jīng)做了大量工作,但定義仍不夠完善。這確實(shí)是個(gè)問(wèn)題。
Hand:這也是使用形式化方法的優(yōu)勢之一,因為要得到答案,就必須有約束條件。約束條件就成了未定義內容的參考。為了讓它通過(guò),你必須有約束條件。我們的團隊在檢測工作核心時(shí),會(huì )突然發(fā)現所有這些錯誤。通常是在規范的灰色區域,或者是沒(méi)有定義的尋址模式。記錄下來(lái)后你至少有了關(guān)于漏洞的文檔。你可以使用不同的技術(shù)來(lái)填補處理器規范中的空白。如果 Codasip 團隊說(shuō)現在可以保證這種沙盒環(huán)境,而且因為這是一個(gè)生成的設計,你們不會(huì )干擾其他部分,那這就變得非常強大了?,F在你們說(shuō)可以改變某些東西而不會(huì )破壞其他東西。這通常是個(gè)問(wèn)題。你只是調整一個(gè)尋址模式,卻可能會(huì )突然引發(fā)一堆麻煩。形式化方法可以幫助你識別出這些麻煩,但隨后你需要確定這是有意為之還是無(wú)意的?
P?ikryl:你要花時(shí)間確定正確的界限,檢查常見(jiàn)的變化,然后我們來(lái)創(chuàng )建界限。在這些邊界之內,你就很安全。如果確實(shí)跨越了這些邊界,那么你需要承擔所有的驗證責任。
Hand:這樣做確實(shí)有好處,但在享受這些好處的同時(shí),你必須明確:『我愿意接受的邊界是什么?我愿意承擔的風(fēng)險有多大?我是否要將它視為已知良好的 IP,并信任我的供應商提供的 IP 是可靠的?我是選擇信任但驗證嗎?』我獲取供應商的 IP,然后在其上運行合規性測試套件,看看它是否工作正常。還是因為我清楚自己在做什么并且信任自己,所以把它當作是無(wú)拘無(wú)束的冒險?能力越大,責任也越大。
P?ikryl:說(shuō)到規范中的漏洞,這在開(kāi)始時(shí)尤其如此?,F在比以前好多了。但在開(kāi)始的時(shí)候,我們遇到了很多這樣的問(wèn)題。有時(shí)候,我們認為我們已經(jīng)搞定了,因為我們正確地解釋了規范。然后我們和不同的供應商交談,詢(xún)問(wèn)他們對此的看法。你們是怎么理解的?在某些情況下,它是一致的,但在其他情況下則不是。然后我們必須達成一致。
Darbari:在為 SoC 設計電源控制器時(shí),我發(fā)現了大量由處理器實(shí)現中的架構問(wèn)題引起的設計實(shí)現問(wèn)題。這些問(wèn)題是在使用形式化工具中的預加載固件映像驗證電源控制器設計時(shí)發(fā)現的。這是在驗證的早期階段進(jìn)行的,因為我們被告知設計已經(jīng)通過(guò)仿真驗證,而形式驗證只是最后的部分。然而,暴露出的問(wèn)題意味著(zhù)整個(gè)處理器設計必須重新架構。我可能聽(tīng)起來(lái)像個(gè)老古董,但正式版不僅可以驗證硬件,還可以驗證硬件和軟件(即固件)的邊界。高速緩存子系統也是利用形式化捕捉內存模型相關(guān)錯誤的一個(gè)例子,它暴露了微妙的弱內存模型類(lèi)型錯誤。
Schirrmeister:這讓我想起了你在模擬中遇到的 LRM 問(wèn)題,人們至今仍在爭論競態(tài)條件和如何解釋語(yǔ)言參考手冊。在其他處理器架構中,你知道中斷發(fā)生時(shí)會(huì )發(fā)生什么。事情被存儲起來(lái),你有一種方法可以告訴處理器把東西放到棧上并保存所有寄存器。根據我所了解的,在 RISC-V 中,這一點(diǎn)沒(méi)有定義。你需要弄清楚硬件軟件契約以及中斷來(lái)臨時(shí)該做什么。我的處理器會(huì )做什么?軟件開(kāi)發(fā)者并不關(guān)心這些。他們不想考慮這些。他們希望硬件能為他們解決這些問(wèn)題。運行認證合規性的委員會(huì )將為特定的配置文件定義這些事情應該如何操作。
P?ikryl:沒(méi)錯。我們確實(shí)有基本規定 ISA 的配置文件。然后,我們還有一些平臺,其中一項任務(wù)就是定義一些東西,比如我應該在系統中使用哪種中斷控制器。也許你需要一個(gè)特定的操作系統。這些活動(dòng)都是為了確定這些細節。這可以是蓋章或認證過(guò)程的一部分。你不僅要符合 rva23 或其他標準,還要遵循平臺定義。
Hand:退一步講,RISC-V 已經(jīng)遠遠領(lǐng)先于被 RISC-V 所取代的處理器??纯?RISC-V 所取代的是什么,那大都是人們自己構建的自定義處理器。過(guò)去是一個(gè)供應商,一套軟件基礎設施。那他們的解讀是什么?現在你有多個(gè)團隊,多種解讀,相互交叉驗證。你如何看待這個(gè)問(wèn)題?隨著(zhù)越來(lái)越多的人進(jìn)入生態(tài)系統并對其進(jìn)行解讀,標準正變得更加穩健。參與的人越多,標準就越穩健,對最終用戶(hù)和最終消費者來(lái)說(shuō)就越可靠。隨著(zhù)生態(tài)系統的發(fā)展,它也會(huì )變得更加強大,這比其他替代方案要好得多。如果有 100 家不同的處理器供應商,他們都有自己的軟件生態(tài)系統,都有自己的勘誤表,那可能會(huì )寫(xiě)滿(mǎn)一本教科書(shū)。只有在極端情況下,你才會(huì )發(fā)現問(wèn)題,比如你的自動(dòng)駕駛汽車(chē)沖下橋去。
Min:RISC-V 在過(guò)去六七年里取得了長(cháng)足的進(jìn)步。我們正在達到可以解決第二個(gè)問(wèn)題——軟件工程師或 CPU 工程師問(wèn)題的階段。到目前為止,RISC-V 主要由硬件工程師推動(dòng),并且以硬件為中心。隨著(zhù)重點(diǎn)轉向一致性驗證,軟件人員將推動(dòng)這一進(jìn)程,因為他們只想編寫(xiě)一次軟件,就能在多個(gè)硬件實(shí)例上運行。這種一致性將由軟件驅動(dòng),而不是硬件或測試。一家公司的網(wǎng)絡(luò )瀏覽器能否在另一家公司的 Linux 計算機上成功運行?這本身就會(huì )成為一個(gè)驗證測試或確認測試。同樣,也會(huì )有軟件驅動(dòng)的軟件基準測試。
評論