一、創(chuàng)建帶有MicroBlaze處理器的IP設(shè)計(jì)
使用Vivado進(jìn)行MicroBlaze設(shè)計(jì)和使用ISE有很大的不同。(譯者加:所以你要仔細(xì)看下面的說明)
Vivado IDE使用IP綜合設(shè)計(jì)工具進(jìn)行嵌入式開發(fā)。IP綜合工具是一個(gè)基于圖像界面的工具,能夠幫助你構(gòu)建復(fù)雜的IP子系統(tǒng)。
Vivado IDE的IP目錄中提供了很多現(xiàn)成的IP核,提供使用。你也可以向這個(gè)目錄添加自定義的IP核。
開始IP綜合設(shè)計(jì)(步驟)
1、在工作流導(dǎo)向面板中的IP Integrator中,點(diǎn)擊Create Block Design。(表示你要開始構(gòu)建帶有IP核的框圖了)
2、Add IP,找到MicroBlaze,添加到Block中。
(當(dāng)然,也可以用tcl命令添加IP核:create_bd_cell -type ip -vlnv xilinx.com:ip:microblaze:9.3 microblaze_0)
3、雙擊MicroBlaze的Block,開始配置軟核。
三、MicroBlaze配置窗口(配置窗口說明)
MicroBlaze的配置向?qū)峁┤缦鹿δ埽?br />
---可一鍵配置的基于模板的配置對(duì)話框
---MicroBlaze主要參數(shù)的評(píng)估:相對(duì)面積,頻率,性能表現(xiàn),評(píng)估是基于對(duì)話框中給定的參數(shù)。
---配置流程的向?qū)?br />
---所有配置選項(xiàng)的提示,用來理解各個(gè)選項(xiàng)的作用
---使用Adaanced按鈕,可以直接訪問tabbed接口的所有選項(xiàng)。
MicroBlaze配置向?qū)峁┤缦孪驅(qū)ы摚?br />
---配置向?qū)?Configuration Wizard):第一頁,提供模板選擇和一般設(shè)置。
---一般設(shè)置(General):執(zhí)行單元的選擇,優(yōu)化。
---異常(Exceptions):異常功能的使能。(如果在第一頁選中了該功能)
---調(diào)試(Debug):斷點(diǎn)和查看點(diǎn)的數(shù)量。(如果在第一頁選中了該功能)
---緩存(Cache):緩存設(shè)置。(如果在第一頁選中了該功能)
---內(nèi)存管理單元(MMU):MMU設(shè)置。(如果在第一頁選中了該功能)
---總線(Buses):總線設(shè)置。最后一頁,總是顯示。
在配置向?qū)У臍g迎頁中,左邊顯示的是當(dāng)前設(shè)置的頻率、面積和性能的相對(duì)評(píng)估值。
頻率:這個(gè)值是用當(dāng)前架構(gòu)的最大值進(jìn)行歸一化取得相對(duì)值。表示當(dāng)前設(shè)置能夠達(dá)到的頻率。(這個(gè)值可能會(huì)比實(shí)際的值超過30%,不要把這個(gè)估計(jì)值當(dāng)做系統(tǒng)一定能達(dá)到的頻率的保證。)
面積:這個(gè)值表示LUT數(shù)量,用當(dāng)前架構(gòu)的最大值進(jìn)行歸一化取得相對(duì)值。...(...5%...)
性能:當(dāng)前設(shè)置下的相對(duì)性能估計(jì)。
BRAMs:(Vivado 2015.1中沒找見)
DSP48或者M(jìn)ULT18:(Vivado 2015.1中沒找見)
第一頁(Welcome Page)
使用配置向?qū)ё詈?jiǎn)單的辦法便是,使用六個(gè)配置模板中的一個(gè),每一個(gè)配置模板都是一個(gè)完整的配置方案。你可以使用模板作為自己配置的起點(diǎn),再修改模板給定的設(shè)置。
每當(dāng)你修改一個(gè)選項(xiàng),左邊的評(píng)價(jià)參數(shù)便會(huì)實(shí)時(shí)更新。下面介紹這六個(gè)配置模板。
---最小面積(Minimum Area):軟核提供的最小架構(gòu)。沒有緩存和調(diào)試。
---最強(qiáng)性能(Maximum Performance):可能的最大性能。擁有很大的緩存和調(diào)試,擁有所有的執(zhí)行單元。
---最高頻率(Maximum Frequency):可能的最高頻率。小緩存,沒有調(diào)試,一部分執(zhí)行單元。
---帶有MMU的Linux(Llinx with MMU):當(dāng)運(yùn)行帶有MMU的linux時(shí),能夠獲得高性能的設(shè)置。內(nèi)存管理使能,大的緩存和調(diào)試,所有的執(zhí)行單元。
---低端的帶有MMU的Linux:...內(nèi)存管理使能,小的緩存和調(diào)試。
---典型:在性能、面積、頻率中取了折中。適合脫機(jī)程序,低開銷內(nèi)核。有緩存和調(diào)試功能。
一般設(shè)置
如果模板沒有選擇,也可以在頁面中,根據(jù)項(xiàng)目需求,進(jìn)行選項(xiàng)配置。當(dāng)你把鼠標(biāo)放在選項(xiàng)上時(shí),會(huì)出現(xiàn)一個(gè)提示,告訴你它有什么用。下面詳細(xì)介紹這些選項(xiàng)。
---Select implemention to optimize area(with lower instruction throughput):使能面積優(yōu)化功能。如果選了這個(gè),implementation就會(huì)優(yōu)化面積,尤其是減少流水線數(shù)量,從5條減少到3條。(推薦:建議在資源比較緊張的架構(gòu),如Artix-7,使能這個(gè)選項(xiàng)。然而,如果對(duì)性能有敏感的要求,就不要選這個(gè)選項(xiàng),因?yàn)橐恍┲噶钚枰~外的時(shí)鐘周期去執(zhí)行。另外,對(duì)于MMU, Branch Target Cache, Instruction Cache Streams, Instruction Cache Victims, Data Cache Victims, ACE是不能進(jìn)行面積優(yōu)化的。)
---Enable MicroBlaze Debug Module Interface:使能調(diào)試功能。用Xilinx Microprocessor Debugger來下載、調(diào)試程序。(推薦:除非面積資源奇缺,否則不要禁止這個(gè)功能。)
---Use Instruction and Data Caches:當(dāng)執(zhí)行放在LMB之外的程序的時(shí)候,可以使用指令緩存來改善性能。指令緩存有如下特點(diǎn):....當(dāng)使用外部存儲(chǔ)時(shí),激活這個(gè)選項(xiàng)可以明顯地改善性能,即使這個(gè)緩存很小。
---Enable Exceptions:當(dāng)使用一個(gè)支持異常的操作系統(tǒng)時(shí),需要激活這個(gè)選項(xiàng)?;蛘咴谝粋€(gè)單獨(dú)的程序中添加異常回調(diào)函數(shù)。
---Use Memory Management:當(dāng)使用一個(gè)支持虛擬內(nèi)存保護(hù)的操作系統(tǒng)時(shí)(如Linux),需要激活。(當(dāng)你使能面積優(yōu)化或者堆棧保護(hù)功能時(shí),內(nèi)存管理單元是不可見的,自動(dòng)禁止)
---Enable Discrete Ports:使能軟核上的獨(dú)立端口。
第二頁(General)
1、指令(Instructions)
---使能桶型移位器(Enable Barrel Shifter):使能軟核中的筒形移位器硬件。激活這個(gè)參數(shù),就可以使用如下指令(bsrl,bsra,...)使能這個(gè)可以提高應(yīng)用的性能,但是會(huì)增大軟核的尺寸。如果激活,編譯器會(huì)自動(dòng)使用筒形移位器指令。
---使能浮點(diǎn)單元(Enable Floating Point Unit):使能一個(gè)單精度浮點(diǎn)單元(FPU)。使用FPU可以明顯地提高應(yīng)用的單精度浮點(diǎn)性能,同時(shí)也會(huì)增大軟核的尺寸。
---使能整形乘法器(Enable Integer Multiplier):使能一個(gè)整形乘法器硬件。若激活,則可以在給MUL32賦值時(shí),使用mul和muli指令。當(dāng)給MUL64賦值時(shí),使用mulh,mulhu,mulhsu指令。這個(gè)參數(shù)可以設(shè)置為NONE,可以把MUL或者DSP48釋放,用作其他用途。這樣做對(duì)軟核的面積影響很小。當(dāng)使用這個(gè)選項(xiàng),編譯器自動(dòng)使用mul指令。
---使能整形觸發(fā)器(Enable Integer Divider):使能一個(gè)整形除法器硬件。若激活,可以使用idiv,iduvu指令。使能這個(gè)選項(xiàng)可以提高應(yīng)用中的除法性能,但是增大了軟核的尺寸。當(dāng)使用這個(gè)選項(xiàng),編譯器自動(dòng)使用idiv指令。
---使能額外機(jī)器狀態(tài)寄存器指令(Enable Additional Machine Status Register Instructions):若激活,則可以讀寫MSR,使用msrset和msrclr命令??梢蕴岣咴L問MSR的性能。
---使能模式比較器(Enable Pattern Comparator):如激活,則可以使用模式匹配指令pcmpbf,pcmpeq,pcmpne。模式匹配字節(jié)查找指令(pattern comparator byte find, pcmpbf)返回找到的第一個(gè)字節(jié)的位置,提高字符串和模式匹配操作的效率。若使能,SDK庫會(huì)自動(dòng)使用這個(gè)指令。pcmfeq和pcmpne指令根據(jù)兩個(gè)字是否相同,返回1或者0。這些指令會(huì)提高setting flags的效率,編譯器會(huì)自動(dòng)使用它們。激活這個(gè)選項(xiàng)還可以count leading zeros指令,clz。clz指令能提高優(yōu)先級(jí)編碼的效率。
---使能保留的加載/保存和交換指令(Enable Reserved Load/Store and Swap Instructions):lbur,lhur,lwr,sbr,shr,swr,swapb,和swaph。這些指令能夠以相對(duì)的字節(jié)序來讀寫數(shù)據(jù),交換指令能交換字節(jié)或者半個(gè)字長。當(dāng)用little-endian的MicroBlaze訪問big-endian的網(wǎng)絡(luò)時(shí),可以提高效率。
---使能額外的流命令(Enable Additional Stream Instructions):當(dāng)使用AXI4-Stream鏈接時(shí),提供額外的功能。這包括動(dòng)態(tài)訪問指令GETD和PUTD,這兩個(gè)指令用寄存器來選擇接口。(重要:一定要激活流異常功能,才能使用這些指令,而且知道選擇一個(gè)流鏈接)
2、優(yōu)化
選擇Implementation來優(yōu)化面積(當(dāng)指令吞吐量很低時(shí)):這個(gè)選項(xiàng)和歡迎頁的選項(xiàng)功能相同。...
3、容錯(cuò)
---使能容錯(cuò)功能(Enable Fault Tolerance Support)
第三頁(異常)
1、數(shù)學(xué)異常(Math Exceptions)
---使能浮點(diǎn)單元異常
---使能整形除法異常
2、總線異常(Bus Exceptions)
---使能指令端AXI異常
---使能數(shù)據(jù)段AXI異常
3、其他異常(Other Exceptions)
---使能非法指令異常
---使能Unaligned數(shù)據(jù)異常
---產(chǎn)生非法指令異常,除了NULL指令
---使能流異常
---使能堆棧保護(hù)
第四頁(緩存)
第五頁(MMU)
第六頁(調(diào)試)
第七頁(總線)
1、本地內(nèi)存總線接口(LMB)
2、AXI和ACE接口
3、流接口
4、其他接口
四、MicroBlaze處理器的交叉觸發(fā)特性
當(dāng)使能basic debugging,交叉觸發(fā)功能有兩個(gè)信號(hào)提供:DBG_STOP和MB_Halted。
---當(dāng)DBG_STOP輸入為1,MicroBlaze會(huì)在幾條指令后暫停。XMD檢測(cè)到MicroBlaze暫停了,并記錄暫停的位置。這個(gè)信號(hào)可以被任何外部的事件用來暫停軟核,例如當(dāng)一個(gè)集成邏輯分析器(ILA)被觸發(fā)。
---MB_Halted輸出信號(hào)為1,當(dāng)MicroBlaze暫停的時(shí)候,例如碰到一個(gè)斷點(diǎn)或者觀察點(diǎn),執(zhí)行了一條XMD停止指令之后,或者當(dāng)DBG_STOP被置1。當(dāng)通過XMD命令重新啟動(dòng)軟核時(shí),輸出清0。
這兩個(gè)引腳是隱藏的,除非在歡迎頁中使能顯示獨(dú)立端口(Show Discrete Ports)。
你也可以使用MB_Halted信號(hào)來觸發(fā)一個(gè)集成邏輯分析器,或者在多核系統(tǒng)中,暫停其他MicroBlaze軟核(連接到它們的DBG_STOP端)。
當(dāng)啟動(dòng)擴(kuò)展調(diào)試功能時(shí),交叉觸發(fā)功能可以和MDM一起使用。MDM在所有連接的處理器中,提供可編程的交叉觸發(fā)功能,包括外部觸發(fā)的輸入端和輸出端??梢圆殚哅icroBlaze Debug Module Product Guide手冊(cè)查看細(xì)節(jié)。
MicroBlaze最多支持8個(gè)交叉觸發(fā)動(dòng)作。交叉觸發(fā)動(dòng)作由相對(duì)應(yīng)的MDM交叉觸發(fā)輸出產(chǎn)生,兩者通過調(diào)試總線連接。
可以有兩個(gè)地方設(shè)置擴(kuò)展調(diào)試功能:一個(gè)是前面提到的調(diào)試配置頁,另一個(gè)是在運(yùn)行MicroBlaze的Block Antomation時(shí),選擇該功能。
另外,還要在MDM模塊的配置頁中,使能交叉觸發(fā)功能(Enable Cross Trigger)。MDM模塊可以最多配置4組外部觸發(fā)的輸入和輸出。
最后,運(yùn)行Connection Automation,連接交叉觸發(fā)信號(hào)到ILA(ILA教程)。
...
五、自定義邏輯
Vivado的IP管理器允許用戶和第三方IP核開發(fā)者將自定義的IP核添加到Vivado的IP核目錄中。這樣用戶就能在Vivado中實(shí)例化第三方IP核了。
當(dāng)IP開發(fā)者使用Vivado的IP管理器打包IP核時(shí),IP的使用者對(duì)xilinx提供的IP核,還是第三方IP,亦或用戶定義的IP,都有一樣的使用體驗(yàn)。
IP開發(fā)者可以使用IP管理器打包IP文件,并把數(shù)據(jù)放入ZIP文件。IP使用者接收這個(gè)ZIP文件,安裝到Vivado的IP目錄中,然后用戶就可以使用這個(gè)IP核了。
推薦:為了保證IP核的質(zhì)量,建議IP開發(fā)者在用用戶的使用工作流中運(yùn)行每一個(gè)IP核,確保每個(gè)IP核都是可用的。
六、完成連接(Completing Connections)
當(dāng)你配置完了MicroBlaze處理器,就可以開始實(shí)例化其他IP核,繼續(xù)你的設(shè)計(jì)。
在Canvas(放置Block的面板)上,右擊,選擇Add IP。
你可以使用兩個(gè)內(nèi)置的特性來完成子系統(tǒng)剩余部分的IP核設(shè)計(jì):Block Automation和Conncetions Automation,幫助你放置一個(gè)基本的微處理器系統(tǒng),并且/或者連接端口到外部I/O口。
Block Automation
當(dāng)block design中實(shí)例化了一個(gè)ZYNQ7處理系統(tǒng)或者M(jìn)icroBlaze處理器時(shí),Block Automation功能就可以使用。
1、點(diǎn)擊Run Block Automation,幫助你完成一個(gè)簡(jiǎn)單的MicroBlaze系統(tǒng)。
Run Block Automation對(duì)話框提供了一個(gè)微處理器系統(tǒng)必需的基本特性。
2、單擊OK。
Using Connection Automation
當(dāng)IP集成工具發(fā)現(xiàn)canvas上的IP實(shí)例化之間,存在可能的連接時(shí),它會(huì)打開Connection Automation功能。
例如,我另外添加了兩個(gè)IP核,GPIO和Uartlite。IP集成工具會(huì)決定一下連接:
---處理器的ext_reset_in引腳必須連接到一個(gè)復(fù)位源,復(fù)位源可以是內(nèi)部的復(fù)位源,或者是外部輸入引腳。
---時(shí)鐘模塊的CLK_IN_1_D引腳必須連接到一個(gè)內(nèi)部時(shí)鐘源,或者外部輸入引腳。
---AXI GPIO的s_axi必須接到一個(gè)主機(jī)的AXI接口上。
---AXI GPIO的核心gpio必須接到外部的IO引腳。
---Uartlite的s_axi必須接到一個(gè)主機(jī)的AXI接口上。
---Uartlite的uart必須接到外部引腳上。
Using Board Automation
當(dāng)使用像KC705這種刁刁的板子的時(shí)候,Vivado提供了Board Automation(像我這種撐死只有Nexys4的屌絲,只能......怒略一記)
Manual Connections in an IP Integrator Design
(譯者注:一般連線方式,可以手動(dòng)連接,類似于AD畫板子軟件里的那種)
Manual Creating and Connecting to I/O Ports
你可以在IP工具中創(chuàng)建外部IO端口。你可以選擇信號(hào)或者接口到外部的IO端口,通過選擇一個(gè)引腳,總線或者接口連接。
具體辦法是,在模塊的引腳接口處,右擊。在彈出的菜單中,選擇:
---Make External.可以用多選操作(Ctrl+Click)選擇多個(gè)端口。這個(gè)命令的作用是連接模塊上的引腳到外部引腳。
startgroup
create_bd_intf_port -mode Master -vlnv xilinx.com:interface:gpio_rtl:1.0 GPIO
connect_bd_intf_net [get_bd_intf_pins axi_gpio_0/GPIO] [get_bd_intf_ports GPIO]
endgroup
(這是該操作的tcl命令,第一句話是創(chuàng)建端口,第二句話是連接)
---Create Port.對(duì)非信號(hào)接口使用該命令,如clock,reset,或者uart_txd.創(chuàng)建的時(shí)候,可以設(shè)定很多參數(shù),比如輸出/輸出,位寬,類型等等。如果是時(shí)鐘,需要指定它的頻率。
startgroup
create_bd_port -dir I -type clk aa
set_property CONFIG.FREQ_HZ 100000000 [get_bd_ports aa]
endgroup
(這是該操作的tcl命令,第一句話是創(chuàng)建端口,第二句話是設(shè)置參數(shù))
---Create Interface Port。對(duì)同一個(gè)功能的一組信號(hào)接口創(chuàng)建此類端口。例如,S_AXI是一些Xilinx IP的接口端口。這個(gè)接口還可以指定接口的類型和模式(主機(jī)還是從機(jī))。
Memory Mapping in Address Editor
產(chǎn)生地址映射的方法如下:
1、單擊Address Editor。
2、單擊左邊的Auto Assign Address按鈕。(按鈕在左側(cè))
如果你從IP框圖產(chǎn)生RTL代碼時(shí)沒有第一次生成地址,會(huì)彈出一個(gè)提示框,提供一個(gè)自動(dòng)分配地址的工具。
你也可以在Offset Address和Range兩類輸入值,來設(shè)置地址。只有當(dāng)IP框圖中包含一個(gè)總線主機(jī)的IP核(例如ZYNQ7)時(shí),Address Editor才會(huì)打開。
Running Design Rule Checks
Vivado實(shí)時(shí)進(jìn)行設(shè)計(jì)規(guī)則檢查。然而,錯(cuò)誤總是會(huì)發(fā)生。例如,時(shí)鐘引腳上的頻率也許沒有設(shè)置正確。
如果要運(yùn)行一個(gè)全面的檢查,可以單擊Validate Design。
Integrating a Block Design in the Top-Level Design
完成了上面的步驟后,還有兩個(gè)步驟需要做:
---產(chǎn)生輸出文件
---創(chuàng)建HDL封裝
在項(xiàng)目的源文件窗口創(chuàng)建文件。文件類型取決于項(xiàng)目新建時(shí)是verilog還是vhdl。具體方法如下:
1、在Block Design面板下,展開Design Source,選擇Generate Output Products。
2、在左側(cè)的工作流面板中的IP工具下,單擊Generate Block Design.
你可以在一個(gè)高層次設(shè)計(jì)中集成一個(gè)IP block。這樣做的方法是,在高層次的HDL文件中,實(shí)例化這個(gè)Block設(shè)計(jì)。
為了實(shí)例化一個(gè)更高的層次,在Block Design面板中的Design Sources中,右鍵design,選擇創(chuàng)建HDL封裝。
Vivado提供了兩種創(chuàng)建HDL封裝的方法:
---Vivado新建并自動(dòng)更新封裝,這是默認(rèn)選項(xiàng)。
---創(chuàng)建一個(gè)用戶可修改的腳本,這個(gè)腳本可以修改和保存。如果你選擇了這個(gè),那你每次如果修改了block design中的端口,都需要修改手動(dòng)更新封裝。
到這里,你已經(jīng)為你的IP設(shè)計(jì)做好了HDL封裝,可以進(jìn)行后面的步驟了。
MicroBlaze處理器約束
IP工具已經(jīng)在產(chǎn)生輸出文件時(shí),為IP核創(chuàng)建了約束文件;然而,你必須為自定義的IP或者更高層次的代碼設(shè)置約束。
一組約束,是XDC文件中的包含了設(shè)計(jì)約束的集合。有兩種約束:
---物理約束。定義了引腳放置,以及元胞(BRAM, LUT, Flip Flop)的絕對(duì)或者相對(duì)位置,還有器件的配置。
---時(shí)序約束。遵循SDC業(yè)界標(biāo)準(zhǔn),定義了設(shè)計(jì)的頻率要求。如果沒有時(shí)序約束,Vivado僅僅會(huì)優(yōu)化線寬和布線擁堵。(如果沒有時(shí)序約束,Vivado的implementation就無法提高設(shè)計(jì)的性能。Vivado不支持UCF格式的約束)
關(guān)于時(shí)序約束,下面多說兩句:
你有幾種使用約束集合的方法:
---一個(gè)約束集合中有多個(gè)約束文件
---多個(gè)約束集合,然而在分開的文件夾中。
---一個(gè)主約束文件,設(shè)計(jì)中的改變存于一個(gè)新的約束文件夾中。
---...
按功能,分開約束文件,有利于你從宏觀更清楚地把握約束策略,有利于應(yīng)對(duì)時(shí)序和實(shí)現(xiàn)過程中的變化。
約束水太深,又太重要,詳情查看官方文檔。Vivado Design Suite User Guide: Using Constraints
當(dāng)你完成了設(shè)計(jì),也約束完了,現(xiàn)在可以進(jìn)行合成、實(shí)現(xiàn)、生成bit流了。
然后,就可以導(dǎo)入硬件到SDK了。具體方法是:
File->Export->Export Hardware for SDK,彈出對(duì)話框,提供一些選擇選項(xiàng)。你可以導(dǎo)出硬件定義和比特流,并打開SDK。然后,就可以開始編寫軟件了。或者,你也可以從SDK把elf文件導(dǎo)入到Vivado。
評(píng)論