在嵌入式系統中,很容易在系統核心找到 FPGA。這是因為 FPGA 能同時并行執行多個功能,并具有確定性的響應。很多嵌入式系統還包含一個處理器,用來處理通信任務、內務管理、調度任務以及通常在軟件中執行的其他任務。
這種 FPGA 與處理器的組合會增加系統的 SWAP-C。SWAP-C 是指解決方案的尺寸、重量、功耗和成本。顯然,同時使用處理器和 FPGA 不僅會增加材料成本,同時還會增加偶生工程成本(NRE)。此外,設計與驗證工作變得更加復雜。兩個器件還需要更多板級空間,這會增大解決方案的尺寸和重量。電源結構也比只用一個器件時復雜,這進一步影響 SWAP-C。
盡管難以用軟件驅動的處理器來實現通常由 FPGA 執行的功能,但在 FPGA 內部實現處理器,通常能讓設計大受裨益。
對于在賽靈思 FPGA 中實現處理器,我們有多個選擇:
PicoBlaze– 8 位高確定性微控制器(見賽靈思中國通訊 54 期,“充分發揮 PicoBlaze 微控制器的優勢。”)
MicroBlaze– 32 位 RISC(精簡指令集計算機)處理器,可針對眾多應用在性能和面積方面進行定制。
Zynq UltraScale MPSoC 和 Zynq-7000 SoC將硬化的嵌入式 ARM 處理器和可編程邏輯完美集成在單個芯片上。(如需了解有關 Zynq-7000 SoC 使用方面的信息,敬請查閱MicroZed Chronicles)
本文中,我們將深入了解如何在 FPGA 設計中實現賽靈思 MicroBlaze 處理器以減小 SWAP-C。
什么是 MicroBlaze
MicroBlaze 是 32 位軟核處理器。這意味著它是一款可先定制,然后綜合,最后布局布線到目標 FPGA 的邏輯資源中的軟 IP 核。每個 MicroBlaze 處理器實例都是自定義的,包含 FPU(浮點單元)、MMU(存儲器管理單元)以及指令與數據緩存這樣的高級特性。
用戶可在 MicroBlaze 處理器上運行一系列操作系統,包括 FreeRTOS、Micrium uc/OSiii 和 Linux。用戶還可以運行裸機代碼。實例的軟特性可確保不存在過時問題。簡而言之,MicroBlaze 處理器是一款功能非常強大的嵌入式系統開發工具。
創建 MicroBlaze 系統
在設計中實現 MicroBlaze 處理器是賽靈思 Vivado HL WebPACK 版本的一項標準功能。
首先要做的是在 Vivado 中創建新項目,并添加一個新的方框圖。然后,我們可以從 IP Catalog 中選擇添加 MicroBlaze 處理器核。一旦我們將 MicroBlaze 處理器放在方框圖中,應針對所需的性能對其進行自定義。打開要自定義的 MicroBlaze 處理器后,會出現五個處理器自定義頁面中的第一個。在第一頁中,我們可以為處理器核選擇所需的性能,如圖 1 所示。本例中,我們將開發一個高性能 MicroBlaze 處理器。
?
圖 1:選擇 MicroBlaze 的配置。
要創建一個基礎的系統,我們需要以下 IP 核:
AXI UART lite – 雙擊它可設置 RS232 選項。默認設置是 9600bps,無奇偶校驗位,一個停止位。
AXI 定時器
AXI 中斷控制器 – 需要一個連接模塊驅動來自定時器和 AXI UART lite 的中斷。
用于 AXI 數據和指令緩存的 AXI BRAM 控制器和 BRAM
用于輸出 166.667MHz 時鐘和 333MHz 時鐘的時鐘向導
MicroBlaze 調試模塊
用于連接定時器和 UART 的 AXI 外設互連
用于連接 MIG (DDR) 和 AXI BRAM 控制器的 AXI 存儲器互連
針對 MicroBlaze 時鐘域的處理器復位系統
針對存儲器接口生成器時鐘域的處理器復位系統
這些模塊的連接架構如以下的圖 2 所示:
?
圖 2:高級方框圖
我們將 100MHz 時鐘作為時鐘向導的輸入,該向導利用 MMCM(混合模式時鐘管理器)生成 100MHz、166.667MHz 和 200MHz 的時鐘。MicroBlaze 處理器將采用 MMCM 的 100MHz 輸出來運行,而其他時鐘將被用于存儲器接口生成器。下面的表 1 和表 2 給出了 AXI 互連的配置:
?
表 1:外設 AXI 互連,時鐘和復位配置
?
?
表 2:存儲器 AXI 互連,時鐘和復位配置
配置 DDR 存儲器
我們正在開發高性能 MicroBlaze 系統,因此我們希望能從 DDR SDRAM 執行我們的程序,并且還能使用更多特殊功能(包括 DMA),這樣 MicroBlaze 處理器能夠處理所捕獲的數據。DDR 存儲器接口由于其復雜的驅動要求而難以實現,但是賽靈思 MIG 可以自動生成 AXI 總線與 DDR SDRAM 之間的 DDR 接口。
MIG 在 IP Catalog 中提供,通過對它進行自定義,我們可以選擇想要的時鐘頻率、目標存儲器設備、存儲器選項、終止計劃以及引腳分配。圖 3 給出了目標 DDR 設備的選擇。盡管開始看起來比較復雜,但其實很容易上手和使用,而且運行快速。
?
圖 3:MIG 選擇目標設備
根據應用需求對接口進行自定義后,本例中我們需要提供兩個時鐘:200MHz 參考時鐘和 166.667MHz 系統時鐘。
設計中所有模塊都根據需求進行了自定義,我們可以創建 RTL 包裝器并重新生成輸出,這樣就能構建系統并開發第一個應用。
開發軟件
完成項目實現并獲得數字文件后,我們可以打開實現后的設計,并將 HDF 和數字文件導出至 SDK。現在,我們已準備好創建軟件應用。
如果是第一次打開 SDK,那么軟件會詢問你想使用哪個工作空間。工作空間是存儲項目和相關軟件項目文件(例如板支持包 (BSP) 和硬件定義)的區域。
要啟動并在 SDK 中運行,我們需進行以下操作:
創建硬件定義項目
為硬件定義創建 BSP
創建應用
構建應用
定義調試環境,以使我們能夠通過 JTAG 鏈路在開發板上運行應用
第一步是導入硬件定義。要在 Vivado 中進行此操作,應從 SDK 菜單中選擇 file -> new -> other。這會打開一個對話框,如圖 4 所示。選擇 Xilinx 文件夾下的“Hardware Platform Specification”
?
圖 4:選擇硬件平臺規范
在下個對話框中輸入項目名稱。比較好的方法是始終命名為 project_HW,以清楚標明。瀏覽至 Vivado 項目中包含 HDF 文件的目錄。注意,這在 Vivado 項目下的 .sdk 文件夾內。
這樣可創建硬件規范,并出現在 SDK 左側的項目瀏覽器中。這個項目中,你可打開 HDF 文件,并查看所有存儲器映射的外設的地址。
利用創建的硬件平臺,我們現在就可創建 BSP。這里面包含用來驅動和控制硬件的驅動程序和 API。我們可選擇 file -> new -> board support package,以創建 BSP。這將打開一個對話框,我們可以逐頁設置。
輸入項目名稱。注意它如何關聯我們剛創建的硬件平臺。本例中,我們使用獨立的操作系統。這會打開一個 BSP 的設置彈出窗口。在這里,我們不需要做任何修改,但是如果需要,可以添加一些選項,例如輕量級 IP 協議棧等。
在獨立頁面中,我們還可為編譯器選擇 stdin 和 stdout。確保將它設置成 AXI UART。
此時,我們就可以創建自己的應用了。本例中,我使用“hello world”簡單模板。我們在 SDK 中選擇 -> new -> application project ,以創建應用項目。這將打開一個對話框,我們可以在對話框中選擇之前創建的 BSP,以及硬件定義和我們針對的處理器。(本例中只有一個。)
通過這些步驟,我們可以創建一個通過 UART 輸出“hello world”字符串的簡單應用。選擇“build all”以構建 BSP 和應用項目,并產生一個 ELF 文件,你可以下載這個文件并在硬件上運行。
在硬件上運行
我們需要創建一個調試環境,然后點擊下載 ELF 文件。為此,右鍵點擊應用項目并選擇 Debug As -> Debug Configurations。這將打開一個對話框,如圖 5 所示,在此創建一個新的調試環境。我們希望創建一個新的 GBD 調試應用。
?
圖 5:創建調試配置
提供一個名稱,在接近底部的下拉菜單中選擇“Reset Processor”。我們還需要點擊“Debugger applications”標簽,并將“stop at main() when debugging.”選項取消選中,以確保應用程序下載后自動運行。最后,點擊apply,而非調試,然后關閉。
首先要做的是對 FPGA 編程。我們在 Xilinx Tools -> Program FPGA 下進行此操作。對 FPGA 編程后,就可以下載 ELF 文件。點擊頂部菜單上的“bug”圖標,這樣就可使用剛剛創建的調試配置。
下載后,你可以看到軟件運行,而且“hello world”消息出現在所選的終端程序中。
結論
構建 MicroBlaze 系統非常簡單,而且容易實現,開發系統上運行的軟件也同樣如此。如果你想降低系統的 SWAP-C,那么 MicroBlaze 處理器可以幫到你。
評論
查看更多