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