MicroBlaze是AMD-Xilinx提供的一個可以在FPGA中運行的嵌入式軟核IP,其本質是一個32位RISC處理器軟核,可以在150MHz時鐘下,提供125 D-MIPS性能,具有運行速度快、占用資源少、可配置性強等優點。
今天主要是搭建一個通用MicroBlaze最小系統+一個外設,最后固化程序到FPGA。
縮略詞索引:
MB-MicroBlaze
環境平臺
win10 vivado 2020
Vitis 2020
FPGA部分搭建
一個完整的MB系統,包括四個方面:CPU、時鐘、 DDR 和外設,其中CPU不用說就是MB,DDR不是必須的,根據硬件選擇,如果沒有DDR時候選擇內部RAM使用需要選擇大一點,所以下面分成兩種情況建立最小系統。
不帶DDR的MB最小系統-通用系統
第1步
搭建Vivado系統,不過多贅述了!
第2步
點擊 Create Block Design,創建一個 BD 文件,并命名為MB_block。
第3步
單擊添加 IP 圖標,然后輸入關鍵字 MicroBlaze。
雙擊將MB添加到 BD 文件中:
第4步
添加時鐘,在添加IP圖標位置輸入關鍵字Clocking Wizard。
雙擊將Clocking Wizard添加到BD文件中。
第5步-此步可不加
時鐘設置,雙擊Clocking Wizard對時鐘進行配置。
輸入時鐘根據硬件進行選擇,我的硬件是一個單端50MHz時鐘,輸出時鐘參數如下:
clk_out1作為MB的運行時鐘,這里設置為100MHz,而clk_out2的200MHz是作為DDR控制器的運行時鐘。
勾選locked作為后續電路的復位信號。
其他頁面默認即可,點擊【OK】完成設置。
第6步
MB設置,在 BD 文件中,雙擊 MB 圖標,對其進行配置,第一頁配置參數如下圖所示:
注意圖中圓圈是需要勾選的,允許外部存儲 BRAM 作為程序運行緩沖區,方框部分是軟核的頻率、面積和性能三方面的綜合結果(三方不可同時兼得)。
點擊【Next】,進行下一界面進行設置:
界面默認,點擊【Next】:
按照上圖設置,點擊【Next】:
界面默認,點擊【Next】:
按照上圖設置,允許 AXI 數據流。修改完成之后點擊 【OK】 ?即可。
上面主要修改三個部分:第一頁允許外部存儲 BRAM 作為程序運行緩沖區;第三頁設置Cache基地址和長度;第五頁是允許AXI數據流,用來訪問外部DDR。
第7步
讓BD自動完成設置,點擊Run Block Automation完成剩下的設置。
彈出的界面默認即可,時鐘使我們上面第4步Clocking Wizard生成的,Local Memory 選擇 32KB,因為沒有外部存儲器。
第8步
引出相關引腳。
組合鍵 【Ctrl+T】 引出引腳。
第9步
驗證目前設計的正確性:
目前這一步已經完成了最小系統設計。
第10步
修改引腳名稱。
第11步
導出BD,按照下圖位置:
設置路徑,設置BD名稱:
路徑下就生成了一個tcl文件,同理也可以使用下面命令實現相同功能:
write_bd_tcl [你的路徑]/xxx_bd.tcl
第16步
上面就完成了整個最小系統搭建,接下來搭建帶帶DDR的MB最小系統,然后我們以這個最小系統為例說明其為什么具有通用性。
帶DDR的MB最小系統
第1步
搭建Vivado系統,不過多贅述了!
第2步
點擊 Create Block Design,創建一個 BD 文件,并命名為MB_block。
第3步
單擊添加 IP 圖標,然后輸入關鍵字 MicroBlaze。
雙擊將MB添加到 BD 文件中:
第4步
添加時鐘,在添加IP圖標位置輸入關鍵字Clocking Wizard。
雙擊將Clocking Wizard添加到BD文件中。
第5步
時鐘設置,雙擊Clocking Wizard對時鐘進行配置。
輸入時鐘根據硬件進行選擇,我的硬件是一個單端50MHz時鐘,輸出時鐘參數如下:
clk_out1作為MB的運行時鐘,這里設置為100MHz,而clk_out2的200MHz是作為DDR控制器的運行時鐘。
勾選locked作為后續電路的復位信號。
其他頁面默認即可,點擊【OK】完成設置。
第6步
MB設置,在 BD 文件中,雙擊 MB 圖標,對其進行配置,第一頁配置參數如下圖所示:
注意圖中圓圈是需要勾選的,允許外部存儲 BRAM 作為程序運行緩沖區,方框部分是軟核的頻率、面積和性能三方面的綜合結果(三方不可同時兼得)。
點擊【Next】,進行下一界面進行設置:
界面默認,點擊【Next】:
按照上圖設置,點擊【Next】:
界面默認,點擊【Next】:
按照上圖設置,允許 AXI 數據流。修改完成之后點擊 【OK】 ?即可。
上面主要修改三個部分:第一頁允許外部存儲 BRAM 作為程序運行緩沖區;第三頁設置Cache基地址和長度;第五頁是允許AXI數據流,用來訪問外部DDR。
第7步
讓BD自動完成設置,點擊Run Block Automation完成剩下的設置。
彈出的界面默認即可,時鐘使我們上面第4步Clocking Wizard生成的。
第8步
引出相關引腳。
上圖界面選擇clk_in1,組合鍵 【Ctrl+T】 引出引腳:
第9步
驗證目前設計的正確性:
目前這一步已經完成了最小系統設計,下面開始DDR設計。
第10步
添加DDR控制器:
添加IP界面,輸入關鍵字memory interface generator
雙擊memory interface generator后再BD中添加MIG:
第11步
設置MIG IP。
雙擊 mig_7series_0,進行如下配置:
注:如果system clock的頻率在199-201MHz之間,這里會出現一個use system clock 的選項,意思就是用系統時鐘作為參考時鐘
后面全部默認點擊【NEXT】即可。
將MIG的線按照下圖進行連接:
第12步
添加外設,我們主要添加串口,負責調試。
雙擊 UART,將波特率改為 115200:
第13步
再點擊 Run connection Automation,再彈出來的窗口中把所有選項勾選上,再點擊【OK】 即可。
驗證設計:
第14步
修改引腳名稱,因為這部分將作為一個最小系統供后續使用。
第15步
導出BD,按照下圖位置:
設置路徑,設置BD名稱:
路徑下就生成了一個tcl文件,同理也可以使用下面命令實現相同功能:
write_bd_tcl [你的路徑]/xxx_bd.tcl
測試及固化程序
第1步
建立一個新的Vivado工程。
第2步
導入上一節生成的最小系統:
選擇tcl文件,確定即可
這樣就生成了一個最小系統:
第3步
添加Clocking Wiard,按照下圖進行設置
第4步
添加一個AXI-GPIO,按照下圖設置:
后面控制三個LED等。
第5步
點擊 Run connection Automation,再彈出來的窗口中把所有選項勾選上,再點擊【OK】 即可。
第6步
導出硬件
將 bd 文件導出為 tcl 腳本之后,繼續對工程進行完善。
選中 xxx.bd,右單擊然后選擇 Generate Output Products。
第7步
在彈出來的窗口中,如下圖所示,然后單擊【OK】。
第8步
選中 XXX.bd,右單擊然后選擇 Create HDL Wrapper,在彈出來的窗口中直接點擊【OK】。
第9步
添加一個名為 mb_test.xdc 的約束文件,并添加約束(物理約束需要根據自己硬件選擇)。
第12步
單擊下列圖標產生 Bit 文件。
第13步
生成 Bit 文件之后,單擊 File-Export-Export Platform...
第14步
TOOLs-->Launch Vitis IDE
選擇工作文件夾。
創建Platform
選擇上一步生成的Platform(XSA文件)
右擊,build project
無問題后繼續后面步驟。
第15步
創建App
【NEXT】
【NEXT】
輸入App名稱:
【NEXT】
選擇Hello World模板。
【FINISH】
第16步
helloworld.c源碼我們先不修改。
右擊 HelloWorld-->Debug As-->Debug Configurations
設置好參數,使用Vitis自帶的串口工具,運行后即可看到打印信息。
接下來就是添加GPIO驅動,和上面操作一樣,這里有個小技巧,在建立完App后,點擊下圖位置:
導入官方提供的歷程就可以了。
同樣HelloWorld-->Debug As-->Debug Configurations后進行調試即可。
下面說明固化過程。
第17步
固化第一步,生成bit文件,點擊XIlinx-->Program Device
記住箭頭部分生成的bit文件,同時選擇方框內編譯出的elf文件。
固化第二步,下載固化FLASH,點擊XIlinx-->Program Flash
箭頭選擇板卡上FLASH的FLASH,方框選擇上一步生成的bit文件(默認dowload.bit)。
點擊【Program】,完成后重新上電即可。
總結
今天簡單演示了一個MB小例子。
審核編輯:劉清
評論
查看更多