孫豐祥 程玉偉 胡恩俊 鄭昌露
(國電南京自動化股份有限公司,南京 210061)
Xilinx首創(chuàng)了現(xiàn)場可編程邏輯陣列(FPGA)這一創(chuàng)新性的技術,隨著FPGA技術的發(fā)展,其邏輯容量逐步增大而成本卻越來越低。在這種趨勢下,F(xiàn)PGA可以代替系統(tǒng)中越來越多的器件,并且發(fā)展到FPGA片上系統(tǒng)。Xilinx推出了32位軟核MicroBlaze,用來替代片上的微控制器,有效地縮小了PCB板的面積和器件數(shù)量,降低了整個系統(tǒng)的成本。MicroBlaze采用 32 位哈佛RISC 架構(gòu),32位獨立的地址總線和數(shù)據(jù)總線。對于簡單的設計,可以將代碼直接放入片上的BRAM中;也可以將復雜設計的Bootloader放在片上的BRAM中。用戶IP可以通過總線或快速點對點連接接入系統(tǒng)。由于FPGA有設計靈活等諸多優(yōu)點,因此設計一個基于MicroBlaze軟核的嵌入式最小系統(tǒng)十分必要,對于不同需求的產(chǎn)品只需在該最小系統(tǒng)上導入需要的IP核擴展接口,這樣既減少了開發(fā)時間,又降低了開發(fā)成本。
嵌入式最小系統(tǒng)的硬件平臺選用的是Xilinx的SPARTAN6芯片,此款芯片資源豐富、性能可靠,具有PFGA所特有的可靈活配置的特性,各項指標滿足在產(chǎn)品中應用。首先要搭建起底層的物理平臺,使用廠家提供的開發(fā)軟件中的XPS(Xilinx Platform Studio)開發(fā)工具創(chuàng)建硬件工程平臺。主要完成兩部分的工作:使用基本系統(tǒng)向?qū)SB(Base System Builder)搭建MicroBlaze平臺和根據(jù)項目需要定制自己需要的IP核。
使用基本系統(tǒng)向?qū)SB搭建MicroBlaze平臺依次需要選擇系統(tǒng)總線種類、FPGA芯片型號與參數(shù)、系統(tǒng)時鐘大小和Local Memory的大小[1]。本設計中選用AXI總線,主芯片選擇使用Xilinx的SPARTAN6,系統(tǒng)時鐘設置為100MHz,Local Memory設置為16KByte。完成上述設置后需要添加外設,Xilinx開發(fā)環(huán)境中為用戶提供了豐富的IP核,用戶可根據(jù)需要選用。本設計中根據(jù)目標版實際硬件設計選擇DDR2控制器的IP核,并為其分別分配大小為2KByte的數(shù)據(jù)Cache和大小為2KByte的指令Cache;根據(jù)需要自主設計了帶中斷的定時器IP核、SPI控制器IP核與效率更高、更節(jié)省資源的串口控制器IP核。完成上述工作后還要對系統(tǒng)的一些細節(jié)參數(shù)重新配置,打開Project->Project Options 確認芯片的封裝形式;在MCB_DDR2右鍵ConfigIP對DDR2控制器手動配置;對ucf文件按照目標實際設計為每個模塊配置管腳,并編譯生成硬件比特流文件。
本最小系統(tǒng)設計中考慮到后期要在目標板上集成μCOSII操作系統(tǒng),需要帶中斷信號的定時器為操作系統(tǒng)提供時鐘標記。同時需要串口下載應用程序,并實現(xiàn)內(nèi)部規(guī)約通信的接口;因此在最小系統(tǒng)設計中,自己定制了串口控制器IP核和定時器IP核;在XPS中定制用戶IP使用時掛接在AXI總線上,實現(xiàn)與MicroBlaze的通信。XPS提供自定義IP核的生成向?qū)В凑障驅(qū)?chuàng)建IP核過程中,設置好IP核中需要的IO管腳、中斷觸發(fā)方式及所需寄存器的個數(shù)等信息;系統(tǒng)會自動生成一個IP核代碼框架;生成的User_Logic文件是需要用戶進行手動添加自定義邏輯代碼的地方,在這里用戶只需關注自己需要實現(xiàn)的功能,不用考慮它們與MicroBlaze之間的通信連接[2]。本設計中User_Logic采用Verilog語言編寫;串口IP核結(jié)構(gòu)框圖如圖1所示。

圖1 串口控制其IP核結(jié)構(gòu)框圖
與串口IP核實現(xiàn)方法類似,SPI的IP核與帶中斷信號的定時器IP、IO核按照上述流程進行設計后導入之前創(chuàng)建好的工程;將所有的IP核掛在AXI總線上,與之前加入的IP核一起統(tǒng)一進行地址分配。重新編譯生成硬件比特流文件,用系統(tǒng)提供的IPACT工具配合仿真器將硬件比特流文件燒寫到FPGA中。配置好的硬件工程主窗口如圖2所示。圖2中顯示了掛接在AXI總線上的各個模塊,包括系統(tǒng)提供的DDR2核中斷控制器核、485串口核用于控制串行 SPI FLASH的SPI核等。此外在AXI總線上還掛接每個系統(tǒng)都必須有的時鐘管理及接地管理等必備模塊。

圖2 硬件系統(tǒng)配置完成主界面
在構(gòu)建起的硬件平臺上編寫軟件應用程序,包括應用程序代碼及驅(qū)動程序等;使用Xilinx提供的SDK(Software Development Kit)新建軟件工程,系統(tǒng)會自動生成各個IP核相關的宏文件,里面定義好了每個IP核的首地址等信息。但是自己定值額度IP核的驅(qū)動需要根據(jù)IP核的編寫方法自主編寫調(diào)試。最后將硬件的比特流配置文件和軟件的可執(zhí)行位文件進行合并形成最終的文件,通過串口配合XModem協(xié)議將可執(zhí)行的文件下載到SPI FLASH中。系統(tǒng)配置完成后由Bootloader程序(圖3)將Flash中的應用程序拷貝到片外的DDR RAM中運行。

圖3 Bootloader程序流程
當系統(tǒng)上電后自動運行Bootloader主函數(shù),首先初始化串口;并讀看門狗狀態(tài),當看門狗狀態(tài)為0時,表示看門狗被禁止,此時允許下載程序;然后使用超級終端選用Xmodem協(xié)議將程序下載到SPI FLASH。拔掉目標板上看門狗短接帽,看門狗會復位系統(tǒng),重新執(zhí)行主函數(shù),這樣將重新讀取看門狗狀態(tài),此時狀態(tài)為1;當看門狗狀態(tài)為1時,調(diào)用函數(shù)軟件上禁止看門狗,并將之前下載到SPI FLASH中的程序拷貝到DDR2上運行。
構(gòu)建完成上述軟硬件平臺后,需要在SDK軟件工程中新建一個應有程序文件夾,在應有程序中添加上述IP核的驅(qū)動代碼[3];同時為后期產(chǎn)品研發(fā)做準備,需要集成必要的操作系統(tǒng),本設計中選用μCOSII,參考Xilinx官網(wǎng)給出的示例,將μCOSII移植進來使用。在應有程序主函數(shù)中創(chuàng)建基于μCOSII操作系統(tǒng)的485口的通信任務。通過485上位調(diào)試軟件與目標版通信,通信規(guī)約選用內(nèi)部使用的801規(guī)約。串口通信程序流程如圖4所示。
系統(tǒng)正常運行后打開上位調(diào)試軟件,將電腦名稱、工程名稱和波特率設置正確后,調(diào)試軟件會

圖4 串口通信程序流程
顯示連接成功;打開通信監(jiān)視窗口會有握手幀出現(xiàn)。此時點擊上位調(diào)試軟件按鈕,觸發(fā)通信幀下傳給目標板,則目標板程序的串口進入接收中斷,并將接收到的通信幀存入相應緩存,并調(diào)用操作系統(tǒng)的發(fā)信函數(shù)將緩存中的數(shù)據(jù)以消息隊列形式發(fā)出;在通信任務中一直處于等待接收狀態(tài)的系統(tǒng)任務此時收到有效數(shù)據(jù),通過解析函數(shù)分析上位軟件要請求的功能,分析完成后會回復相應的應答幀完成調(diào)試軟件所請求的功能。通信連接成功校核保護界面如圖5所示,通過串口監(jiān)視窗口抓取監(jiān)聽的報文信息,經(jīng)過與協(xié)議要求對比,內(nèi)容與結(jié)果都完全正確,通過長時間大量數(shù)據(jù)的傳送對比實驗,此最小系統(tǒng)構(gòu)建的通信測試平臺完全達到預期效果滿足產(chǎn)品開發(fā)的需要。

圖5 通信成功界面與報文監(jiān)聽
通過上述對基于MicroBlaze軟核的嵌入式最小系統(tǒng)軟、硬件設計,并通過串口801通信規(guī)約測試,基于MicroBlaze軟核的嵌入式最小系統(tǒng)性能可靠完全符合產(chǎn)品開發(fā)的要求,同時此最小系統(tǒng)應用靈活,對于不同的產(chǎn)品只需添加不同的IP核,避免了平臺的多次重復開發(fā),降低了難度并減少了工作量,提高了效率。目前,在此最小系統(tǒng)上開發(fā)的產(chǎn)品已逐步用于工程實踐。