PicoBlaze軟核的仿真與調(diào)試
引言
PicoBlaze是Xilinx公司為Virtex、Spartan系列FPGA和CoolRunnerII系列CPLD設(shè)計(jì)的8位嵌入式處理器軟核。PicoBlaze嵌入式處理器具有高達(dá)44~100 MIPS的指令執(zhí)行速度,并具有效率高、占用資源少等優(yōu)點(diǎn),可以方便地嵌入到硬件系統(tǒng)設(shè)計(jì)中,實(shí)現(xiàn)與其他功能模塊的無(wú)縫連接[1],在FPGA嵌入式系統(tǒng)中具有廣泛的應(yīng)用。傳統(tǒng)的PicoBlaze項(xiàng)目調(diào)試方法通常將PicoBlaze的匯編程序編譯后,與FPGA相關(guān)邏輯綜合、實(shí)現(xiàn),然后下載到電路板上進(jìn)行板級(jí)驗(yàn)證,往往要花費(fèi)大量時(shí)間,效率低下。本文介紹了一種基于pBlazIDE的PicoBlaze匯編程序仿真調(diào)試方法,并對(duì)基于JTAG Loader的PicoBlaze程序快速更新方法進(jìn)行了詳細(xì)分析。實(shí)踐證明,該方法簡(jiǎn)便可行、效率較高,大大加快了PicoBlaze項(xiàng)目的調(diào)試進(jìn)度。
1 pBlazIDE仿真調(diào)試工具
pBlazIDE是一款免費(fèi)的圖形化仿真調(diào)試工具,只有1?45 MB,無(wú)需安裝即可使用[1],非常適合于PicoBlaze匯編程序的前期仿真驗(yàn)證。pBlazIDE具有以下功能:
◆ 按語(yǔ)法分色高亮顯示代碼;
◆ 指令集仿真器,可設(shè)置斷點(diǎn),并可查看寄存器和存儲(chǔ)器內(nèi)容;
◆ 源代碼格式化;
◆ KCPSM3到pBlazIDE導(dǎo)入功能,并自動(dòng)完成語(yǔ)法轉(zhuǎn)換;
◆ 支持語(yǔ)法分色高亮顯示HTML文件輸出。
pBlazIDE仿真調(diào)試工具窗口布局如圖1所示。pBlaz?IDE仿真調(diào)試工具窗口布局為標(biāo)準(zhǔn)的Windows界面,主要包括菜單欄、工具欄、代碼區(qū)、I/O端口欄、PicoBlaze處理器狀態(tài)欄、暫存RAM欄、輸出狀態(tài)區(qū)和系統(tǒng)狀態(tài)欄。其中,I/O端口欄和暫存RAM欄只有在程序中使用了I/O端口和暫存RAM時(shí)才顯示,平時(shí)默認(rèn)為不顯示狀態(tài)。PicoBlaze處理器狀態(tài)欄顯示程序運(yùn)行過(guò)程中PicoBlaze的寄存器值和標(biāo)志位狀態(tài),輸出狀態(tài)區(qū)顯示程序編譯和運(yùn)行信息,系統(tǒng)狀態(tài)欄顯示內(nèi)容包括程序運(yùn)行時(shí)間、當(dāng)前PC值、當(dāng)前堆棧指針和堆棧值等。
圖1 pBlazIDE仿真調(diào)試工具
pBlazIDE與標(biāo)準(zhǔn)的KCPSM3語(yǔ)法相比,除中斷處理和其他少量語(yǔ)句外,大部分均相同。在導(dǎo)入KCPSM3程序時(shí),pBlazIDE會(huì)自動(dòng)完成語(yǔ)法轉(zhuǎn)換,無(wú)需人工干預(yù)。必須注意的是,pBlazIDE對(duì)KCPSM3語(yǔ)法中I/O端口的定義不會(huì)自動(dòng)轉(zhuǎn)換,必須手動(dòng)修改,否則編譯時(shí)會(huì)報(bào)錯(cuò)。例如,KCPSM3語(yǔ)法中輸出端口定義LED EQU 1應(yīng)修改為L(zhǎng)ED DSOUT 1,輸入端口和雙向口的定義與此類(lèi)似。
pBlazIDE仿真調(diào)試步驟如下:
① 打開(kāi)pBlazIDE仿真調(diào)試工具,在Settings里選擇合適的Picoblaze 類(lèi)型,對(duì)于Spartan3、VirtexII或VirtexII Pro系列FPGA選擇Picoblaze 3即可。另外,還需在Settings→Options中設(shè)置軟核的系統(tǒng)時(shí)鐘,以便pBlazIDE顯示程序精確運(yùn)行時(shí)間。
② 點(diǎn)擊File→Import命令,導(dǎo)入KCPSM3語(yǔ)法格式的.psm源文件,pBlazIDE會(huì)自動(dòng)完成語(yǔ)法轉(zhuǎn)換。
③ 手動(dòng)修改I/O端口定義,以滿足pBlazIDE語(yǔ)法要求。
④ 單擊Assemble&Simulate按鈕,對(duì)程序進(jìn)行匯編,如果程序沒(méi)有錯(cuò)誤,即可開(kāi)始仿真。仿真既可以全速運(yùn)行,也可以單步運(yùn)行,并可設(shè)置斷點(diǎn)等,大部分功能與常用的單片機(jī)開(kāi)發(fā)軟件Keil 51類(lèi)似。在仿真過(guò)程中,可以查看或修改寄存器和存儲(chǔ)器內(nèi)容,監(jiān)測(cè)I/O輸出是否與預(yù)期結(jié)果相符,設(shè)置輸入端口值和模擬端口輸入;另外,還可以對(duì)外部中斷進(jìn)行模擬仿真,極大地方便了用戶程序調(diào)試。
2 PicoBlaze程序快速更新方法
PicoBlaze軟核編譯后的程序存儲(chǔ)在FPGA中的BRAM單元中,在調(diào)試基于PicoBlaze的項(xiàng)目時(shí),若采用傳統(tǒng)的調(diào)試方法,那么每次改變PicoBlaze的匯編程序時(shí)都要重新綜合、布局布線,生成新的比特文件,往往需要幾分鐘到十幾分鐘,耗時(shí)耗力;而采用JTAG Loader進(jìn)行調(diào)試則無(wú)需重新綜合、布局布線,可通過(guò)JTAG接口直接修改PicoBlaze的程序BRAM,只需幾秒即可完成,大大加快了調(diào)試進(jìn)度[2]。JTAG Loader程序更新接口示意圖如圖2所示。
圖2 JTAG Loader程序更新接口示意圖
由圖2可知,JTAG Loader通過(guò)JTAG接口直接修改程序BRAM,達(dá)到更新PicoBlaze程序的目的。整個(gè)過(guò)程簡(jiǎn)便迅速,并且Xilinx公司提供了相應(yīng)的JTAG_Loader_ROM_form.vhd模板和批處理文件,用戶在初次使用時(shí)設(shè)置好相關(guān)參數(shù)后,只需運(yùn)行批處理文件即可實(shí)現(xiàn)PicoBlaze程序的一鍵更新。JTAG Loader的使用步驟如下:
① 將JTAG_Loader_ROM_form.vhd重命名為ROM_form.vhd,并替換原工程目錄下的ROM_form.vhd。
② 用kcpsm3.exe重新編譯程序。
③ 將程序ROM的reset端連接到PicoBlaze的復(fù)位端。
④ 將JTAG Loader文件夾下的hex2svf.exe、hex2svfsetup.exe、playxsvf.exe、svf2xsvf.exe和jtag_loader.bat復(fù)制到工程目錄下。
⑤ 編輯jtag_loader.bat文件。
(a) 并口下載電纜方式。打開(kāi)jtag_loader.bat文件,輸入下列內(nèi)容:
if exist .\hex2svf.cnf goto one
echo Need to set up jtag chain first
hex2svfsetup.exe
echo jtag chain set up
pause
:one
hex2svf %1.hex %1.svf
svf2xsvf ?d ?i %1.svf ?o %1.xsvf
playxsvf %1.xsvf
將jtag_loader.bat中的1%替換為.psm的文件名,例如led.psm,則將1%替換為led。
(b) USB下載電纜方式。打開(kāi)jtag_loader.bat文件,輸入下列內(nèi)容:
if exist .\hex2svf.cnf goto one
echo Need to set up jtag chain first
hex2svfsetup.exe
echo jtag chain set up
pause
:one
hex2svf %1.hex %1.svf
svf2xsvf ?d ?i %1.svf ?o %1.xsvf
@echo setMode ?bscan﹥﹥impact_batch_commands.cmd
@echo setCable ?port usb21 ?baud ?1﹥﹥impact_batch_commands.cmd
@echo addDevice ?position 1 ?file .\%1.xsvf﹥﹥impact_batch_commands.cmd
@echo play﹥﹥impact_batch_commands.cmd
@echo quit﹥﹥impact_batch_commands.cmd
impact ?batch impact_batch_commands.cmd
將jtag_loader.bat中的1%替換為.psm的文件名,例如led.psm,則將1%替換為led即可。
⑥ 運(yùn)行jtag_loader.bat,按提示進(jìn)行即可實(shí)現(xiàn)程序更新。值得注意的是,第一次運(yùn)行jtag_loader.bat時(shí),需輸入IR_Length參數(shù),該參數(shù)可以在ISE安裝目錄下查到,如:D:\Xilinx\10.1\ISE\acecf\data\xccace.bsd文件中的attribute INSTRUCTION_LENGTH of XCCACE : entity is 8。其他器件的查閱方法類(lèi)似。
本方法已在Xilinx XUP VirtexII PRO開(kāi)發(fā)板上進(jìn)行了驗(yàn)證,取得了良好的效果,整個(gè)程序過(guò)程僅需幾秒,即可實(shí)現(xiàn)程序的一鍵更新。
結(jié)語(yǔ)
8位嵌入式處理器PicoBlaze應(yīng)用靈活方便。本文介紹的基于pBlazIDE的PicoBlaze匯編程序仿真調(diào)試方法和基于JTAG Loader的PicoBlaze程序快速更新方法簡(jiǎn)便可行,可明顯提高PicoBlaze項(xiàng)目調(diào)試效率,具有較高的應(yīng)用價(jià)值。