RISC-V ISA(指令集架構(gòu))是以模塊化方式設(shè)計(jì)的。這意味著ISA有幾組指令(ISA擴(kuò)展),可以根據(jù)需要啟用或禁用。這允許精確地實(shí)現(xiàn)應(yīng)用程序所需的指令組,而無(wú)需為沒(méi)有使用到的區(qū)域提供額外的功耗。其中有一點(diǎn)相當(dāng)重要,設(shè)計(jì)人員可以為他們想要加速的應(yīng)用程序添加所需的任何指令。這是一個(gè)強(qiáng)大的功能,因?yàn)樗粫?huì)破壞任何軟件兼容性,同時(shí)為新的發(fā)明和差異化留出空間。
RISC-V指令集架構(gòu)被設(shè)計(jì)為在基本指令集的基礎(chǔ)上擴(kuò)展出更多的指令。你可以隨意混合搭配。例如,可能有一個(gè)實(shí)現(xiàn)最小值的RISC-V處理器,或者一個(gè)實(shí)現(xiàn)所有ISA擴(kuò)展的RISC-V處理器,這取決于設(shè)計(jì)需求。下表列出了已被RISC-V基金會(huì)批準(zhǔn)的主要ISA擴(kuò)展,以及目前正在開發(fā)的ISA擴(kuò)展。
隨著更多ISA擴(kuò)展的添加,上表的內(nèi)容將會(huì)逐步被擴(kuò)展到更多。但是如果這些基本擴(kuò)展依然不能滿足客戶需求時(shí),就需要采用RISC-V規(guī)范允許添加自定義指令擴(kuò)展。這可能是公司的“秘密武器”和一個(gè)關(guān)鍵的區(qū)別。
大家一定會(huì)有疑問(wèn),為什么采用了自定義指令依然可以保持軟件的兼容性?
由于RISC-V生態(tài)系統(tǒng)的特性,定制ISA擴(kuò)展需要不會(huì)破壞與主要規(guī)范的一致性;即使有額外的指令,您的處理器仍然完全符合RISC-V,并且可以運(yùn)行來(lái)自生態(tài)系統(tǒng)的通用軟件堆棧。這就需要通過(guò)軟件架構(gòu)來(lái)協(xié)同實(shí)現(xiàn)。
圖1顯示了自定義ISA擴(kuò)展如何適合于軟件堆棧。
圖1
在最底層上,有一個(gè)與RISC-V兼容的處理器和一個(gè)定制的ISA擴(kuò)展。中間一層它運(yùn)行一個(gè)操作系統(tǒng),它可以用任何與標(biāo)準(zhǔn)RISC-V處理器兼容的編譯器編譯(沒(méi)有特殊的ISA擴(kuò)展)。除了操作系統(tǒng)之外,還有三個(gè)應(yīng)用程序。App1是一個(gè)不需要任何加速的通用應(yīng)用程序。您可以使用公開可用的現(xiàn)成編譯器(例如GCC)來(lái)編譯它,甚至可以使用預(yù)編譯的應(yīng)用程序;RISC-V處理器將能夠直接運(yùn)行它。App2和App3是需要盡可能快地運(yùn)行的重要應(yīng)用程序。這些必須由專門配置了定制ISA擴(kuò)展的編譯器來(lái)編譯。編譯器可以利用新的自定義指令來(lái)加速App2和App3
圖2顯示了另一個(gè)具有定制ISA擴(kuò)展的RISC-V兼容處理器示例。App1使用基本指令集,沒(méi)有使用定制的ISA擴(kuò)展。App2和App3使用通用API。這個(gè)API是由一個(gè)支持定制ISA擴(kuò)展的庫(kù)來(lái)實(shí)現(xiàn)的,它同樣可以加速App2和App3。App2和App3都可以在現(xiàn)成的RISC-V處理器中重用。所需要的只是實(shí)現(xiàn)所需API的庫(kù)。在這個(gè)系統(tǒng)中,將帶有自定義ISA擴(kuò)展的App2和App3從RISC-V遷移到?jīng)]有擴(kuò)展的RISC-V是很容易的,并且不需要做任何應(yīng)用程序移植的工作。
圖2