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