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