??? 摘 要: 針對在FPGA內(nèi)集成嵌入式處理器" title="嵌入式處理器">嵌入式處理器消耗資源大的特點,提出了在FPGA內(nèi)嵌入最小資源配置" title="資源配置">資源配置軟核" title="軟核">軟核的新方法,減少了在FPGA內(nèi)嵌入處理器內(nèi)核" title="處理器內(nèi)核">處理器內(nèi)核所占用的資源,降低了損耗功率,擴展了可以應用軟核的FPGA類型。經(jīng)過仿真和下載測試,此方法具有配置靈活、節(jié)省資源的優(yōu)點。
??? 關鍵詞: 嵌入式微處理器;FPGA;Nios II;Mico8
?
??? 單片機與FPGA結(jié)合處理的方案是信息處理的經(jīng)典模式。此方案存在增加連線復雜度、需要電壓轉(zhuǎn)換電路、要求編程人員編寫不同程序及生產(chǎn)時單片機程序與FPGA程序分別下載的缺點,它們增加了開發(fā)成本,延長了開發(fā)周期,增加了系統(tǒng)復雜性和不可靠性。因此,產(chǎn)品開發(fā)尤其是商業(yè)產(chǎn)品的開發(fā)迫切需要在一個芯片中實現(xiàn)用戶定義的完整系統(tǒng)。隨著FPGA的發(fā)展,已經(jīng)能夠在單個可編程器件內(nèi)實現(xiàn)整個系統(tǒng),即單芯片系統(tǒng)(SoC)。因此,在FPGA中嵌入處理器內(nèi)核是一個良好選擇。在嵌入式處理器內(nèi)核中,可以直接在FPGA結(jié)構(gòu)中運行的軟核以其靈活性得到廣泛應用。
??? 在嵌入處理器的發(fā)展過程中,向低端發(fā)展的8位處理器,以低功耗和低資源占有率的優(yōu)點在不太復雜的系統(tǒng)中有著重要應用。未來,8位嵌入式軟核必然會在功能上更加豐富多彩,滿足各種個性化的需求。占有資源和功耗是很多商業(yè)產(chǎn)品開發(fā)中考慮的首要問題,而很多系列的FPGA在并行存在大規(guī)模邏輯模塊的情況下很難再嵌入軟核,更換FPGA類型會使成本大大增加。本文以Altera系列FPGA為例,討論如何在FPGA中實現(xiàn)最小資源配置的微處理器軟核。
1 在Altera系列FPGA中實現(xiàn)微處理器核的通用途徑
??? Altera系列FPGA中通常使用Nios II系列32位RSIC嵌入式軟核處理器。Nios II是Altera的第二代FPGA嵌入式處理器,性能可以超過200DMIPS,實現(xiàn)成本僅需35美分。下面討論一種采用NIOS II實現(xiàn)較小資源配置的32位微處理器軟核的方法。
1.1 Nios II基本介紹
??? Nios II系列包括經(jīng)濟、標準和快速3種產(chǎn)品,具有32位處理器的基本結(jié)構(gòu)單元:32位指令大小、位數(shù)據(jù)和地址路徑、通用寄存器和外部中斷源;使用同樣的指令集架構(gòu)(ISA),100%二進制代碼兼容。設計者可以根據(jù)系統(tǒng)需求的變化更改CPU,選擇滿足性能和成本的最佳方案。為實現(xiàn)小資源配制,本文討論經(jīng)濟類型處理器(NIOS II/e)的開發(fā),NIOS II/e的RISK為32bit,可以達到7DMIPS,存儲單元使用兩個M4Ks。
??? 需要使用的基本軟件工具有Quartus II、SoPC Builder、ModelSim、Matlab/DSP Builder和Nios II IDE。
1.2 Nios II開發(fā)流程
??? Nios II的開發(fā)流程圖如圖1所示。
?
?
??? Nios II開發(fā)的基本思想是在FPGA已經(jīng)開發(fā)的邏輯處理模塊單元外再嵌入一個Nios II自動生成的處理器模塊單元。生成一個可選擇配置的Nios II 處理器軟核需要利用Quartus II集成的SoPC Builder工具。在本文的仿真中,為了實現(xiàn)較小的資源配置,選擇NIOS II/e經(jīng)濟類型處理器核。Nios II處理器中必須包括的內(nèi)容有Nios CPU Core,這是嵌入式處理器的最基本軟核。它與一個在線調(diào)試串口(JTAG_UART)就構(gòu)成了Nios II中最小的處理器。其他可選擇添加的內(nèi)容有on_chip_memory(片上存儲器)、UART(串口)、輸入輸出口、Timer(定時器)、SDRAM、FLASH和Avalon三態(tài)總線橋。經(jīng)過軟件自動生成的處理器可以像其他邏輯模塊一樣直接在HDL程序中調(diào)用或者在原理圖中連線。Nios II處理器支持C及C++語言,可在Nios IDE軟件中進行編譯及調(diào)試。調(diào)試通過后,利用Quartus II綜合系統(tǒng)就可在硬件上下載調(diào)試。本文建立的Nios II經(jīng)濟型處理器結(jié)構(gòu)如圖2所示。
?
1.3 NIOS II/e經(jīng)濟類型占用資源分析
??? 經(jīng)過仿真可以得到Nios II經(jīng)濟型嵌入式處理器所占用的邏輯單元(LEs)和存儲單元(memory)的數(shù)量,如表1所示。
?
??? 由表1可知,使用Nios II實現(xiàn)最小功能的軟核處理器(僅包含處理器核以及一個在線調(diào)試JTAG)需要大約2000LEs,這對于很多LEs資源不多的FPGA來說是一個很大的消耗。在并行存在大規(guī)模邏輯處理單元的情況下,在某些FPGA中利用Nios II實現(xiàn)嵌入式微處理器軟核成為一件困難的事情。而且Nios II處理器僅支持Stratix、Stratix GX、Stratix II和Cyclone系列以及以后推出的FPGA系列,不能應用于其他系列FPGA。
??? 下面討論一種在LEs資源不豐富的Altera系列FPGA上集成最小配置的嵌入式處理器的方法。此方法使用最小配置的Mico8軟核作為嵌入式軟核。在功能足夠的情況下,所占用的資源遠小于Nios II,對于LEs資源不豐富或者不支持Nios II的Altera系列FPGA是一種理想選擇。
2 Mico8簡介及建立流程
??? Lattice Mico8TM是一個8位軟微處理核,它是一種非常靈活的單片機內(nèi)核,目前有4種配置情況。每種配置方式所支持的指令略有不同,不同配置的Mico8所具備的設計資源,包括內(nèi)部的寄存器、存儲器是不一樣的,所需要的FPGA實現(xiàn)的邏輯大小也不一樣。設計者在使用時可以根據(jù)實際的設計需要選擇配置模式。
??? 本文首先在Lattice的MACHXO系列FPGA平臺上建立Mico8處理器,然后移植到Altera系列FPGA上。
??? 在MACHXO上建立Mico8的流程如圖3所示。
?
??? Mico8只支持匯編代碼,因此,在編寫處理器代碼時只能使用特定的匯編程序。Mico8的指令集包括位操作、算術(shù)操作、比較操作等通用的匯編指令和一些偽指令。其格式與通用匯編指令有一些差別[1]。建立一個完整的Mico8處理器內(nèi)核需要使用的基本軟件工具有ispLEVER(用于完成LatticeMico8系統(tǒng)的綜合、硬件優(yōu)化、適配、編程下載和硬件測試)、isp8asm_asm.exe(用于編譯初始化prom的匯編指令)以及isp8asm_asm.exe(用于對匯編指令進行仿真)。Mico8的另一優(yōu)點是對于編譯和仿真工具具有完全開放的C源代碼" title="源代碼">源代碼可供參考,可以根據(jù)用戶需要修改源代碼。isp8asm_win.exe 編譯匯編語言程序生成初始化EBR的hex文件命令格式為:isp8asm_win.exe-vx-o?鄢.hex?鄢.s。isp8sim_win.exe的作用是對編譯成功的匯編程序進行仿真,命令格式為:isp8sim_win.exe-t mico8_demo.hex,可以對二進制或十六進制代碼進行跟蹤及反匯編。匯編程序仿真成功以后,編譯所生成的十六進制或二進制文件就可以作為初始化軟核中的prom的代碼,類似于要下載到單片機prom或者Flash中的十六進制或二進制文件。
??? 對軟核的配置可以利用Mico8已經(jīng)給定的4種配置形式[2],除此之外還可以對Mico8進行手動配置,配置內(nèi)容包括內(nèi)部RAM的寬度、PROM地址線寬度以及是否使用外部RAM等。不同的配置會改變Mico8的功能和消耗資源,對其運算速度不會產(chǎn)生影響,配置文件會對Mico8軟核的相關部分進行修改。在本文中,使用最小配置,即16位RAM、9位PROM地址線寬度和不使用外部RAM。對于不同的Lattice器件,Mico8是不兼容的,要對軟核的源代碼或相關單元進行修改。例如本文中所使用的MACHXO系列,只能支持分布式RAM,這就要利用ispLEVER Project Navigator對Mico8軟核的PROM進行修改,并在Mico8源代碼中將相應的設制改為XO。
??? 利用ispLEVER Project Navigate建立新工程,在確定路徑、編程語言、綜合工具、器件后生成新項目并導入項目文件。導入文件時應該注意ispLEVER會自動將模塊分層,需要保證導入文件之間模塊的引用層次正確。如果HDL文件層次不對,將出現(xiàn)不止一個頂層,不能進行后續(xù)操作。同時在導入文件時需要區(qū)分普通文件和測試文件。測試文件只有在用modelsim進行仿真時才起作用,不能用于實際硬件中。生成適合MACHXO系列FPGA。
??? 可以利用ispLEVER嵌入的工具Ipexpress。在菜單中選擇分布式ROM(Distributed ROM)并指定ROM的地址寬度、數(shù)據(jù)長度和初始化文件(對匯編編譯生成的HEX文件),指定文件格式HEX 類型。將生成ROM的HDL文件prom.v重新引入工程即可編譯成功。經(jīng)過分配管腳,編譯成功后即可生成可下載的JEDEC文件,這時頂層文件就是一個配置最小的Mico8核。
??? 生成的Mico8可以在Lattice的MACHXO器件上直接應用,但是本文舉的例子要在Altera系列FPGA上進行應用,還需要對Mico8進行移植。
3 把Mico8軟核移植到Altera器件
??? Mico8軟核與其他硬件具有很好的兼容性,其大多數(shù)單元可以在Altera器件上直接進行移植。移植過程包括兩個步驟:在Quartus II的新工程中導入相關的Mico8內(nèi)核文件和配置文件,在Altera器件基礎上重新創(chuàng)建與Lattice器件不兼容的RAM以及ROM。
??? 其中,LatticeMico8的分布式ROM與Altera不兼容,需要利用Quartus II自帶的mega-plug in manage重新建立單口ROM。LatticeMico8的SPRAM和SDRAM與Altera兼容,但比Altera自動生成的單元更耗費LEs,因此建議進行移植,重新生成Altera SPRAM和SDRAM操作。移植過程與上類似,不再贅述。在工程中需要引用新的存儲模塊。Altera定義DPRAM時序與Lattice中定義的DPRAM時序不同,會造成錯誤。因此采用Mico8中的DPRAM源文件雖然會浪費一定的邏輯單元,但指標可以達到要求。
??? Altera中,初始化PROM文件采用Intel Hex文件格式,需要對Mico8的初始化PROM文件進行格式轉(zhuǎn)換,或者在Quartus II的寄存器編譯器中直接填寫利用Quartus II自動轉(zhuǎn)換為Intel Hex文件格式。Intel HEX由一條或多條記錄組成,每行一個記錄,每條記錄以冒號“:”開始,以回車(0DH)和換行(0AH)結(jié)束。除“:”外,每條記錄有五個域,每一域由2N(N>=1)個HEX字符組成,格式為::[AA][BBBB][CC][DD….DD][EE]。其中,[AA]表示該記錄的實際數(shù)據(jù)的長度;[BBBB]表示該記錄所包含的數(shù)據(jù)在實際存儲區(qū)中的起始地址;[CC]為該記錄的類型;[DD….DD]為該記錄的實際數(shù)據(jù),由2N(N>=1)個HEX字符組成,該域的長度應當與[LL]域所指出長度一致;[EE]為該記錄的數(shù)據(jù)校驗和。文件格式轉(zhuǎn)化可以用Matlab程序?qū)崿F(xiàn)。
??? 完成上述移植過程后的Mico8軟核可以在Altera系列FPGA上直接應用,應用時把Mico8軟核直接作為單元模塊導入系統(tǒng)工程中即可。在Altera中,Mico8軟核的資源利用情況如表2所示。
?
??? Mico8軟核占用約200 LEs,由程序決定的PROM和訪問PROM所需的DPRAM的大小約為300LEs,PROM的大小可根據(jù)匯編代碼程序再作調(diào)整。在小配置下,Mico8經(jīng)過移植后大致使用500LEs,遠小于Nios II生成軟核的資源占用情況。Mico8在不能支持Nios II或者已有大規(guī)模邏輯處理單元不能嵌入Nios II內(nèi)核的FPGA中是一個理想的應用。在Altera中嵌入Mico8軟核需注意,Mico8和普通單片機不同,設計者在使用Mico8時,應該根據(jù)Mico8的體系結(jié)構(gòu)的特點來設計系統(tǒng)。
??? Mico8設計要點及可行性分析:
??? (1)Mico8只有一個8位的外部數(shù)據(jù)端口和一個8位的外部地址端口,設計者需要設計地址編碼和解碼電路。由于Mico8的地址和數(shù)據(jù)總線是分離的,所以Mico8不需要地址/數(shù)據(jù)鎖存信號。
??? (2)Mico8僅支持匯編語言的設計指令最長512條。如果程序代碼不超過512行,設計員只需在編譯程序時指定程序的長度,否則還需要修改實現(xiàn)Mico8的HDL源代碼中的程序計數(shù)器PC位寬及相應邏輯。修改后,跳轉(zhuǎn)指令的跳轉(zhuǎn)范圍仍然在512行之內(nèi)。
??? (3)Mico8作為最小內(nèi)核的另一個優(yōu)點是可以修改軟核源代碼。在功能達到要求時,可以刪除不需要的所有單元結(jié)構(gòu)的代碼,如SPRAM、DPRAM甚至輸入輸出口都可以刪除,從而可以達到最小的資源利用率。在實際應用時應根據(jù)具體情況做出選擇。
??? (4)Mico8作為8位嵌入式內(nèi)核,處理能力不如32位RISK的Nios II,但由于其可修改軟核源代碼的靈活性和占用資源極小的節(jié)省性,在很多并行存在大規(guī)模邏輯處理單元以至資源不夠或不支持Nios II的FPGA上可以得到很好應用。
??? 本文針對在FPGA內(nèi)集成嵌入式處理器軟核消耗資源大的特點,提出了在FPGA內(nèi)嵌入最小資源配置的Nios II和Mico8軟核的方法,在保證有效性的前提下,利用移植Mico8最小軟核,盡可能減少軟核的資源消耗,從而可以在一些資源不允許使用軟核的情況和FPGA類型上使用嵌入式CPU軟核。與普通嵌入軟核方法的主要區(qū)別是在Altera系列FPGA上移植了開放源代碼的Mico8軟核,使移植的軟核可以作最大限度的剪切修改,并對移植的實用性進行了測試。經(jīng)過仿真和下載測試,表明此方法適合于工程實踐,具有配置靈活、節(jié)省資源的優(yōu)點。
參考文獻
[1] Nios II Software Developer′s Handbook.America:www.altera.com,2007.
[2] LatticeMico8 User′s Guide.America:www.lattice.com,2007.