摘要:介紹了FreeARM7 IP核的基本概況及其接口特點,以LPC2101為原型對該IP核進行了擴展。結(jié)合USB 1.1設(shè)備控制器IP核和自定制硬件邏輯,構(gòu)建了一種微控制器功能驗證回路。在主機端開發(fā)了驗證程序、驅(qū)動和通信軟件。驗證程序下栽執(zhí)行結(jié)果表明,功能驗證回路工作正常,微處理器運行穩(wěn)定。
關(guān)鍵詞:FteeARM7;LPC2101;微處理器;USB
1 FreeARM7 IP核簡介
FreeARM微處理器的ARM7系列(簡稱FreeARM7)首發(fā)于www.socvista.com,由Free-arm聯(lián)合其他ARM愛好者基于ARMv4架構(gòu)開發(fā)而成。整個
IP核代碼采用可綜合的Verilog HDL描述,接口簡單,描述精煉,全部代碼不超過2000行。在整體設(shè)計上,采用了三級流水線和哈佛結(jié)構(gòu),全面兼容各種中斷和操作指令(除Thumb和協(xié)處理器指令)。經(jīng)過評估可知,該IP核基于FPGA和SMIC工藝庫都有很好的實現(xiàn)結(jié)果。
FreeARM7接口定義如表1所列,概括起來可分為4類:
◆系統(tǒng)接口,提供系統(tǒng)控制信號;
◆中斷源,提供ARM架構(gòu)需要的5個中斷信號;
◆ROM接口,與提供指令的ROM之間的接口;
◆單口RAM接口,與單口RAM和外設(shè)之間數(shù)據(jù)交互的接口。
其中,單口RAM接口可以實現(xiàn)兩類用途:一、掛接單口RAM,使得FreeARM7能夠正確地讀寫數(shù)據(jù);二、掛接外設(shè),使得FteeARM7能夠正確操作外設(shè)。
2 微處理器改進與邏輯擴展
基于FreeARM7的微處理器改進與邏輯擴展的結(jié)構(gòu)如圖1所示。預(yù)期的實現(xiàn)目標(biāo)是:在主機上編寫嵌入式程序匯編成機器碼后,經(jīng)過USB 1.1設(shè)備控制器傳輸至雙端口RAM中,在微處理器代碼下載模式下,代碼下載控制邏輯將雙端口RAM中的機器代碼裝載至ROM中,之后啟動微處理器正常工作模式,微處理器執(zhí)行ROM中的嵌入式代碼,接收主機通過USB傳送來的參數(shù)值,并將運行結(jié)果通過USB返回至主機。
基于Cyclone II FPGA具體實現(xiàn)時,ROM、RAM和雙端口RAM都是利用Quartus II軟件中MegaWizardPlug-In.Manager工具例化相應(yīng)的存儲模塊,而其他硬件邏輯的擴展都是以IP核(Verilog描述)的形式出現(xiàn)。
2.1 微處理器lP核改進
FreeARM7 IP核是微處理器的核心部分,不能直接作為微處理器使用,其原因是數(shù)據(jù)總線需要讀取ROM內(nèi)的數(shù)據(jù)、本文選擇Philips公司32位ARM7微處理器LPC2101作為原型設(shè)計。LPC2101帶有適當(dāng)?shù)拇鎯Y源,內(nèi)嵌2 KB片內(nèi)靜態(tài)RAM和8 KB的Flash存儲器,且軟件可移植性好,工作可靠。參考LPC2101工作原理,當(dāng)FreeARM7的輸出信號ram_addr的最高4位為4'b0時,表示數(shù)據(jù)總線需要讀取ROM的數(shù)據(jù)。為解決該問題,新增一個wrap文件lpc2101_arm.v完成該功能。它的作用是:當(dāng)ram_addr[31:28]==4'b0時,該邏輯直接從rom_en、rom_addr、rom_data的接口中讀取ROM數(shù)據(jù),送入ram rdata。
2.2 USB1.1設(shè)備控制器
本文選用的USB設(shè)備控制器是課題組早期項目之一,它是由Opencores網(wǎng)站提供的初級開源版本改進而成,其結(jié)構(gòu)如圖2所示。IP核支持低速和全速模式,共有1個控制傳輸端點(EP0)、7個其他可配置端點,且缺少微處理器也能響應(yīng)主機對設(shè)備的枚舉。收發(fā)器電路主要完成模/數(shù)信號轉(zhuǎn)換,即在OUT事物中將模擬信號D+和D-轉(zhuǎn)換成串行接口引擎模塊可識別的數(shù)字信號rxd、rxdp和rxdn,在IN事物中將數(shù)字信號txdp和
txdn在使能信號txoe的控制下轉(zhuǎn)換成模擬信號D+和D-;串行接口引擎模塊主要完成收發(fā)包,根據(jù)傳輸方向可分為接收和發(fā)送,主要包括總線檢測、同步檢測、時鐘恢復(fù)、不歸零反向編碼和解碼、位填充及位去除、數(shù)據(jù)的串/并轉(zhuǎn)換;協(xié)議層包括協(xié)議引擎態(tài)機、組包、解包、FIFO控制器;端點O控制器主要負(fù)責(zé)響應(yīng)主機標(biāo)準(zhǔn)請求;描述符RAM存儲了設(shè)備的各種描述符;其他端點控制器及FIFO提供了配置接口,目的是預(yù)留給開發(fā)者進行IP核移植。
2.3 代碼下載控制邏輯
該邏輯主要功能是在代碼下載模式下,將雙端口RAM中的匯編程序轉(zhuǎn)移到ROM中,其主要任務(wù)是產(chǎn)生讀雙端口RAM使能信號和地址信號,以及寫ROM的使能信號和地址信號。在硬件邏輯中通過計數(shù)器實現(xiàn)。當(dāng)系統(tǒng)復(fù)位或退出代碼下載模式時,計數(shù)器:rom_wr_cnt清零,否則當(dāng)USB接收完一個包(64字節(jié))后,置計數(shù)器使能信號cnt_vld有效,rom_wr_cnt開始計數(shù)。cnt_vld直接作為讀雙端口RAM的使能信號,cnt_vld兩級緩存后作為寫ROM的使能信號。同時,rom_wr_cnt的低8位直接作為讀雙端口RAM的地址信號,rom_wr_cnt計算結(jié)果經(jīng)過兩級緩存后作為寫ROM的地址信號。當(dāng)64字節(jié)轉(zhuǎn)移完畢后,置cnt_vld無效,此時rom_wr_cnt鎖存當(dāng)前值,等待下一個包接收完畢后再次置cnt_vld有效,代碼下載控制邏輯就將下一個包的數(shù)據(jù)追加到ROM中,反復(fù)進行就完成了代碼經(jīng)由USB接口下載至ROM中。
3 嵌入式代碼的開發(fā)
3.1 uVision3.63環(huán)境設(shè)置
利用μVision3.63新建一個工程,選擇器件類型為NXP(founded by Philips)系列的LPC2101,在默認(rèn)工程環(huán)境的基礎(chǔ)上做如下確認(rèn):
①在“output”選項卡中選中“Create HEX Flie”,確保產(chǎn)生可供下載的機器碼。
②在“Target”選項卡中選擇Code Generation為“ARM-Mode”,確保以ARM指令集為依據(jù)產(chǎn)生機器碼。
③在“C/C++”和“Asm”選項卡中分別去選“EnableARM/Thumb Interworking”,確保生成的代碼只包含ARM指令。
3.2 Bootloader的設(shè)置
Bootloader啟動一般分為兩個階段。第一階段主要包含依賴于微處理器的體系結(jié)構(gòu)硬件初始化的代碼,設(shè)置堆棧并跳轉(zhuǎn)到第二階段的C程序入口點,通常采用匯編語言來實現(xiàn)。第二階段通常用C語言完成,以便實現(xiàn)更復(fù)雜的功能,也使程序有更好的可讀性和可移植性。在μVision3.63軟件自帶的示例工程“Hello”中,通過下面3行代碼實現(xiàn)了兩個階段的工作交接:
由于本文討論的微處理器只是在FreeARM7基礎(chǔ)之上做了一些基本的擴展,微處理器的體系結(jié)構(gòu)硬件單一,因此第一階段主要是對堆棧位置和大小進行設(shè)置。對USB接口的初始化在第二階段的C程序中進行,初始化程序如下:
4 微處理器的功能驗證
在完成前面的工作之后,借助FPGA對微處理器進行了功能驗證。選用Altera公司DE2開發(fā)板作為硬件邏輯的實現(xiàn)載體,微處理器IP核工作時鐘為開發(fā)板上27 MHz晶振輸入,USB控制器IP核工作時鐘為27 MHz晶振倍頻至48 MHz。功能驗證流程如圖3所示,在主機上利用μVision 3.63編寫、編譯驗證程序后,微處理器進入下載模式接收主機對設(shè)備的代碼下載,之后進入用戶模式接收主機端傳送的驗證程序參數(shù)值,在運行代碼后將執(zhí)行結(jié)果返回至主機,通過與主機軟件模擬結(jié)果比較達到驗證微處理器運行結(jié)果的目的。
4.1 驗證程序開發(fā)
數(shù)據(jù)加密標(biāo)準(zhǔn)(DES)是著名的對稱密鑰分組密碼,它由美國標(biāo)準(zhǔn)FIPS 46-2定義?;?strong>ARM7指令系統(tǒng),DES的C語言實現(xiàn)難度不大,但它是對IP核工作能力的一次綜合檢驗。將DES算法分解為密鑰生成算法和加解密算法,對應(yīng)驗證程序中兩個子函數(shù),其最終的代碼實現(xiàn)框架如下:
4.2 主機驅(qū)動與通信軟件開發(fā)
Windows驅(qū)動程序模型(Windows Driver Model,WDM)旨在提供一種靈活的方式來簡化各種驅(qū)動程序的開發(fā),實現(xiàn)對新硬件的支持,降低驅(qū)動程序開發(fā)的復(fù)雜度?;赪DM采用Driver Studio開發(fā)USB驅(qū)動程序,會自動生成一個驅(qū)動程序框架,在此基礎(chǔ)上添加讀寫管道即可完成驅(qū)動程序的開發(fā)。
USB通信軟件采用MFC編寫,主要功能有:將.hex文件以十六進制的形式發(fā)送至USB接收USB返回的數(shù)據(jù),并以十六進制的形式顯示。采用DES程序標(biāo)準(zhǔn)測試向量,其中初始密鑰K=1A624(289520DEC46,明文P=748502CD38451097,密文C=DDOCFEB783CF3FDE,在通信軟件中代碼下載及驗證數(shù)據(jù)的收發(fā)如圖4所示。按照上述原理,還編寫了其他若干驗證程序并下載至ROM中,微控制器的執(zhí)行結(jié)果均正確。