幾乎所有的電子設計師和嵌入式系統開發人員都聽過現場可程式化邏輯閘陣列(FPGA)。對於實際的FPGA元件,設計人員和開發人員都知道它擁有可程式化設計架構,能夠對其進行設定來執行想要的功能,但他們的瞭解可能僅限於此。
同樣,當涉及打造一個可以在FPGA上實現的設計時,他們可能聽過硬體描述語言(HDL)和暫存器傳輸級(RTL)之類的術語,但可能並未充分理解它們的含義。
與Verilog或VHDL相似,HDL能讓FPGA設計人員描述設計意圖,正如軟體開發人員使用C或者C++等程式化設計語言一樣。理解HDL的方式之一就是它可以用來描述同時發生的事物,這也是現實世界中硬體工作的方式。相比之下,軟體程式化設計語言通常用於描述順序發生的事。
同時,RTL是常用於邏輯綜合引擎輸入的抽象級電路。該工具將RTL轉換到邏輯元件和互聯網路,然後在FPGA的可程式化設計邏輯內實現。邏輯綜合引擎可以比作軟體開發者的編譯器,後者採用高階程式作為輸入,並將其轉換為由處理器執行的機器程式碼。FPGA的可程式化設計結構可用於建構硬體加速器,以低功耗執行資料處理任務。可程式化設計結構經過設定後可打造一個或多個更適合處理決策任務的軟核處理器,這些處理器還可以控制硬體加速器,包括向其提供資料並根據結果採取相應措施。
RISC-V就是這樣一種處理器,它是一種開源指令集架構(ISA),可以透過開源許可免費獲得。RISC-V開源硬體概念的創作者受到Linux開源軟體成功的啟發。RISC-V的一大優勢是在各類設計實現中都有出色的軟體相容性,並且目前這些處理器的使用急劇成長。 然而,對於想要使用這種處理器的非FPGA設計人員而言,問題在於他們缺乏有關FPGA設計語言、工具和流程的專業知識。為了解決這個問題,有低功耗可程式化設計FPGA供應商如萊迪思半導體(Lattice)開發了名為Lattice Propel的工具,這是一款使用圖像使用者介面(GUI)的設計環境,任何使用者(無論是否具有FPGA專業知識)都能使用它以拖放的方式快速設計使用RISC-V處理器的系統。
Propel輸出的是RTL檔,可以發送到綜合引擎,生成可載入FPGA的設定檔。之後軟體開發人員可以在使用FPGA的RISC-V設計實現上執行他們的RISC-V可執行檔,正如在其他任何RISC-V處理器上執行一樣。萊迪思為其FPGA客戶免費提供RISC-V IP核心。
解決方案使用FPGA
資料處理要求有合適的運算引擎。開發者擁有諸多不同選擇,包括微處理器(MPU)、微控制器(MCU)、繪圖卡(GPU)、FPGA和SoC等元件。
MPU和MCU在執行決策任務時效率很高,但是在實現原始資料處理演算法時,無論是處理時間還是功耗都不太理想。SoC能以最低的功耗實現最高效能,但缺點是開發起來價格昂貴、耗費資源且十分耗時,並且在此類晶片架構中實現的演算法基本上都是固定無法更改的,而系統採用的協定和標準會不斷變化,因此會帶來很多問題。
某些資料處理任務(包括許多AI/ML演算法)非常適合並行處理。FPGA的可程式化設計架構(圖1a)經設定可實現硬體加速器(HA)功能,以大規模並行方式執行任務(圖1b),進而顯著提高效能,同時降低功耗。
許多情況下還需要資料協同處理功能,使用中央處理器(CPU)來強化硬體加速器,處理器可以執行高級決策和控制功能。不同於直接在晶片中實現的硬核CPU,FPGA的可程式化設計架構能夠實現軟核CPU以及相關的匯流排結構(位址、資料、控制)和任何所需的周邊IP功能(圖1c)。
需要注意的是,根據FPGA元件和使用者的要求,額外的可程式化設計邏輯功能和周邊通訊功能(例如USB、MIPI、I2C、SPI、CAN和UART)可以透過硬核或軟核實現。
使用軟核CPU有諸多優點,包括能夠設定處理器的操作及許多可選功能,如動態記憶體存取(DMA)控制器,進而對其精確調整,高效地滿足目標應用的要求。此外,如有需要,可以設定可程式化設計結構實現其他周邊IP功能。如在人工智慧應用中,可以使用可程式化設計邏輯資源來打造簡單的人工神經網路,用於推論之類的任務。
RISC-V
如前所述,RISC-V是採用既有精簡指令集電腦(RISC)原則的開源指令集架構,可透過開源許可獲得。此外,許多公司目前提供支援RISC-V的RISC-V硬核或開源操作系統,並且幾種主流的軟體工具鏈均支援該指令集。
RISC-V的模組化設計包括基礎指令集和其他的擴展指令集。在產業、研究界和教育機構的共同努力下,兩者已得到長足的發展。基礎指令集規定了指令(及其編碼)、控制流、暫存器(及其大小)、記憶體和定址、邏輯(即整數)操作以及輔助功能。僅基礎指令集就能實現具有全面軟體支援(包括通用編譯器)的通用電腦。
還可以透過可選擴展指令集實現額外功能,進而讓設計人員靈活選擇其應用所需的功能。RISC-V定義了許多擴展指令集,包括A(原子)、F(單精度浮點數)、D(雙精度浮點數)、Q(四精度浮點數)和C(壓縮的16位元指令以減少程式碼尺寸,用於儲存空間有限的系統)。上述指令集均可靈活選擇。
與作為專用處理器的硬核實現相比,使用FPGA的軟核RISC-V擁有的優勢在於FPGA可重新設定的巨大潛力能夠滿足各種擴展需求。 本文提及的RISC-V軟核IP套件擁有32位元RISC-V處理器核心以及可選的計時器和可程式化設計中斷控制器(PIC)子模組。該CPU核心支援RV32I指令集、外部中斷和符合JTAG IEEE 1149.1標準的除錯。
計時器子模組是一個64位元即時計數器,它將即時暫存器與另一個暫存器進行比較以觸發計時器中斷。PIC子模組最多將八個外部中斷輸入整合為一個外部中斷。處理器核心透過使用產業標準的32位元AHB-L匯流排介面存取子模組暫存器。
萊迪思Propel
許多嵌入式系統的設計人員都對使用FPGA很感興趣,但是一想到要使用傳統的FPGA設計工具和HDL就望而卻步。為了解決這一問題,Propel採用了使用圖像使用者介面的設計環境,任何使用者(無論是否具有FPGA專業知識)都能使用其拖放的設計方式快速建構和設定使用RISC-V處理器的設計。
Propel輸出是使用Verilog HDL語言的RTL檔,可將其發送到綜合引擎,建立可載入FPGA的設定檔。該設定檔可用於像是萊迪思CrossLink-NX(針對嵌入式視覺應用)、Certus-NX(通用FPGA)以及MachXO3D和Mach-NX FPGA(安全系統控制)系列產品。FPGA設定完成後,軟體開發人員可在使用FPGA的RISC-V設計實現上執行他們的RISC-V可執行檔,正如在其他任何RISC-V處理器上執行一樣。
Lattice Propel由兩個部分組成(圖2)。首先是Propel Builder,它提供圖像的拖放介面,讓使用者選擇IP模組並將其連接在一起。這些IP模組包括RISC-V處理器(帶有可選的計時器和中斷控制器)、AMBA匯流排結構、介面、記憶體、輸入/輸出(I/O)等。使用者還可以方便地線上升級現有的IP模組和獲得新的IP模組。
除了拖放IP實例化,Propel Builder還能自動進行引腳連接,透過嚮導配置(Wizard-guided)和參數化以及採用按構造逐步校正進行IP整合。
其次是軟體開發套件Propel SDK,可提供無縫的軟體開發環境。它擁有產業標準的整合開發環境(IDE)和工具鏈。SDK還為Propel Builder定義的系統提供軟硬體除錯功能以及軟體庫和主機板支援套件(BSP)。
需要注意的重要一點是,Propel可以良好對接下游工具,並且它也是一個獨立的程式,且其大小僅為0.5GB,可以快速輕鬆地下載和安裝。同樣令人感興趣的是,Propel的所有命令都可以用Tcl編寫,進而提高了設計效率並將其快速整合到使用者自己的設計環境中(圖3)。
對於硬體設計,Propel是那些需要FPGA優勢但缺乏FPGA硬體設計經驗的團隊的選擇。此外,如果團隊成員確實具有FPGA設計經驗,那麼他們還可以根據需要針對設計更精確控制。對於軟體設計,Propel提供產業標準的C/C++開發環境。軟體開發人員似乎較多使用現成的微控制器。
設計人員可以使用Propel在CrossLink-NX、Certus-NX和Mach-NX FPGA中快速輕鬆地建立使用RISC-V軟核的處理器系統,進而提供複雜的影片處理、系統控制和系統安全功能,其延遲遠低於透過外部獨立處理器實現的設計。
除了擁有以低功耗執行高效能資料處理任務的邏輯功能和硬體加速器外,FPGA內部的可程式化設計架構還可用於實現一個或多個更適合決策任務的軟核處理器,以及用於諸如硬體加速器之類的控制功能,包括向它們提供資料並根據結果採取措施。
RISC-V就是這樣一種處理器,它是一種開源指令集架構,可以透過開源許可免費獲得。對於想要使用這種處理器的非FPGA設計人員而言,問題在於他們缺乏有關FPGA設計語言、工具和流程的專業知識。為了解決這個問題,本文提供Propel來簡化設計流程,讓開發人員能夠快速設計採用RISC-V處理器的系統。
(本文作者為萊迪思半導體設計工具資深產品線經理)