魏厚剛,楊寬泗,孫武,張開鋒
(中國人民解放軍75576部隊,海口570236)
PicoBlaze 8位嵌入式處理器是Xilinx公司為Virtex、Spartan系列FPGA 和CoolRunner-II系列CPLD設(shè)計的嵌入式處理器軟核。針對不同的器件,Xilinx公司共推出了3 個版本的PicoBlaze,包括KCPSM3(目標器件為Spartan 3、Virtex II、Virtex II PRO、Virtex 4和Virtex 5),CPLD版(目標器件為CoolRunner-II)和最新推出的KCPSM6(目標器件為Spartan 6、Virtex 6 和7 系列FPGA)。KCPSM6針對Spartan 6、Virtex 6和7系列FPGA 進行了特殊優(yōu)化,增加了一些新特性,在開發(fā)和調(diào)試方法上也與KCPSM3 有所不同。本文分析對比了其異同,對KCPSM6在開發(fā)調(diào)試中的注意事項進行總結(jié),并在Avnet Spartan 6 MicroBoard上進行了實例驗證。
KCPSM6PicoBlaze(以下簡稱KCPSM6)8位嵌入式處理器是Xilinx公司為Spartan 6、Virtex 6和7系列FPGA 設(shè)計的嵌入式處理器軟核,它具有效率高、占用資源少等優(yōu)點,可以方便地嵌入到硬件系統(tǒng)設(shè)計中,實現(xiàn)與其他功能模塊的無縫連接[1]。它僅占用26個Slice和1個BRAM,占XC6SLX4器件4.3%的資源、XC6SLX150T 器件不到0.11%的資源。KCPSM6嵌入式處理器具有高達52~120 MIPS的指令執(zhí)行速度,具體速度取決于所選用的FPGA 所屬系列和器件速度等級。
KCPSM6微處理器主要由以下幾個單元組成:
◆兩組16個8位通用寄存器;
◆最高支持4KB的程序存儲單元;
◆8 位算術(shù)邏輯單元,帶有CARRY 和ZERO標志位;
◆64、128或256字節(jié)內(nèi)部暫存RAM;
◆256個輸入和256個輸出端口,方便擴展應(yīng)用;
◆中斷控制單元;
◆休眠模式,進一步降低系統(tǒng)功耗。
KCPSM6嵌入式處理器的原理框圖如圖1所示。
KCPSM6新增的特性和功能總結(jié)如下:
(1)新增引腳
圖1 KCPSM6嵌入式處理器原理框圖
sleep引腳。當sleep引腳電平由低變高時,KCPSM6在執(zhí)行完最后一條已讀取指令后,進入休眠模式,以降低系統(tǒng)功耗。若將sleep引腳一直置低電平,則KCPSM6一直處于正常工作狀態(tài)。
K_write_strobe為常量輸出觸發(fā)信號,與OUTPUTK指令配合使用,可用一條指令即可完成向輸出端口輸出常量值,而無需寄存器的干預(yù)。
bram_enable為程序存儲單元BRAM 使能信號,可進一步降低系統(tǒng)功耗。
Address[11:10]為程序存儲單元高位地址線,最大支持4KB程序存儲。
(2)新增屬性
KCPSM6新增了3個屬性,分別是hwbuild(與HWBULID指令配合使用,可用于定義軟件版本等功能)、interrupt_vector(定義中斷矢量,默認為0x3FF)和scratch_pad_memory_size(定義內(nèi)部暫存RAM 大小,默認為64B)。
(3)新增指令
KCPSM6指令集向下兼容KCPSM3的指令集,并新增了9 條指令,分別是TESTCY、COMPARECY、REGBANK、STAR、OUTPUTK、JUMP @、CALL @、LOAD&RETURN 和HWBULID。新指令的擴展,極大地改善了KCPSM6的編程靈活性和代碼效率。例如,向端口0x01 輸出0x5A,在KCPSM3 中需執(zhí)行兩條指令:“LOAD s0,5A”和“OUPUT s0,01”。而在KCPSM6 中,只需執(zhí)行“OUTPUTK 5A01”即可。其他新增指令的詳細功能,見參考文獻[1]。
KCPSM6 的開發(fā)流程與 KCPSM3 基本相同。KCPSM6的開發(fā)流程如圖2所示。
圖2 KCPSM6開發(fā)流程示意圖
如圖2所示,用戶程序和ROM 模塊經(jīng)編譯器KCPSM6Assembler編譯后,生成包含程序代碼的ROM模塊。在頂層模塊中例化ROM 模塊和KCPSM6 模塊,然后綜合、實現(xiàn)并生成比特流下載到FPGA 中。在程序調(diào)試過程中,經(jīng)常需要對用戶程序進行反復(fù)修改,如果采用常規(guī)的方法,則每次修改用戶程序,都要重新綜合、布局布線,生成新的比特文件,往往需要幾分鐘到十幾分鐘,耗時耗力[2],給調(diào)試帶來了極大不便。為此,與KCPSM3類似,Xilinx公司也為KCPSM6提供了JTAG Loader工具,而采用JTAG Loader進行調(diào)試則無需重新綜合、布局布線,通過JTAG 接口直接修改PicoBlaze的程序BRAM,只需幾秒即可完成程序更新,大大加快了調(diào)試進度。
JTAG Loader的使用步驟如下:
①將代碼中的C_JTAG_LOADER_ENABLE屬性設(shè)為“1”。
②綜合、實現(xiàn)生成比特流并下載到FPGA 中。
③將JTAG Loader.exe復(fù)制到當前工程目錄下。
④打開命令提示符,并切換到當前目錄,運行JTAG Loader(如果是64位操作系統(tǒng)則運行JTAG Loader64),JTAG Loader自行識別目標FPGA,如果報錯顯示未知器件,則需要輸入其IR_Length參數(shù),該參數(shù)可以在ISE安裝目錄下查到,如:C:\Xilinx\13.2\ISE_DS\ISE\acecf\data\xccace.bsd文件中的attribute INSTRUCTION_LENGTH of XCCACE:entity is 8,其他器件的查閱方法類似。
⑤修改用戶程序,并用kcpsm6.exe重新編譯程序。
⑥運行jtagloader–l your_program.hex,即可實現(xiàn)一鍵更新程序。
另外,值得注意的是,使用JTAG Loader之前,必須正確設(shè)置系統(tǒng)的環(huán)境變量,具體方法是運行ISE安裝目錄下C:\Xilinx\13.2\ISE_DS文件夾內(nèi)的settings32.bat批處理文件即可。
為了驗證KCPSM6的新增功能及JTAG Loader的使用方法,本文在FPGA 開發(fā)板上實現(xiàn)了8 位LED 的控制——編者注:工程文件詳見本刊網(wǎng)站www.mesnet.com.cn。綜合結(jié)果顯示,本設(shè)計共占用了35個Slice和2個RAMB 16BWERs單元,僅占XC6SLX75T-3FGG676總Slice數(shù)和BRAM 單元的1%。最后,將生成的比特流下載到開發(fā)板上進行驗證,LED 能夠按預(yù)期要求閃爍。修改用戶程序,重新編譯后,能夠用JTAG Loader快速更新程序。
本文簡要闡述了Xilinx公司最新推出的KCPSM6軟核的結(jié)構(gòu)及原理,并與KCPSM3進行了對比分析。介紹了KCPSM6的開發(fā)調(diào)試流程,并進行了實例驗證。本文對已有KCPSM3 使用經(jīng)驗的設(shè)計者快速熟悉KCPSM6的應(yīng)用開發(fā)具有積極意義。
[1]Xilinx.PicoBlaze 8-bit Embedded Microcontroller User Guide[EB/OL].(2011-07-22)[2010-09].http://www.xilinx.com/support/documentation/ip_documentation/ug129.pdf.
[2]鄭嘉平,孫迪鋒,劉傳,等.PicoBlaze軟核的仿真與調(diào)試[J].單片機與嵌入式系統(tǒng)應(yīng)用,2011(3):74-75.