喬霖 李永紅 岳鳳英
摘 要:以Freescale公司LMX6系列的ARM處理器及Xilinx公司的Kintex_7系列FPGA為核心的硬件平臺(tái),介紹了一種通過EIM總線接口傳輸?shù)腁RM與FPGA之間的數(shù)據(jù)通信設(shè)計(jì)實(shí)現(xiàn)方法。文中簡(jiǎn)單概述了EIM總線數(shù)據(jù)通信的功能特點(diǎn)及異步通信的基本原理,基于Linux嵌入式操作設(shè)計(jì)完成EIM總線接口驅(qū)動(dòng)代碼開發(fā),通過VHDL硬件語(yǔ)言配置數(shù)據(jù)通信邏輯,結(jié)合測(cè)試代碼通過EIM接口對(duì)FPGA的相關(guān)寄存器進(jìn)行讀寫測(cè)試,通過ChipScope設(shè)置信號(hào)觸發(fā),完成通信數(shù)據(jù)采集與驗(yàn)證。通過該通信接口的研究設(shè)計(jì),實(shí)現(xiàn)ARM系統(tǒng)與FPGA之間的高速數(shù)據(jù)互聯(lián)通信,實(shí)時(shí)性強(qiáng),傳輸速率高。該技術(shù)已成功運(yùn)用于某型多功能總線數(shù)據(jù)采集板卡設(shè)計(jì)。
關(guān)鍵詞:通信接口;EIM總線;異步通信;通信邏輯;讀寫測(cè)試;通信驗(yàn)證
中圖分類號(hào):TN913-34;TP274
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1004-373X( 2019) 24-0092-04
0 引言
隨著高速數(shù)字信號(hào)處理技術(shù)的發(fā)展,ARM嵌入式設(shè)備外設(shè)控制要求不斷增加,單一的ARM嵌入式處理設(shè)備應(yīng)用開發(fā)越來越難以滿足日趨復(fù)雜產(chǎn)品的應(yīng)用需求,而伴隨著可編程邏輯器件FPAG的廣泛拓展應(yīng)用,為ARM嵌入式設(shè)備功能擴(kuò)展研發(fā)提供了一種有效的解決辦法。作為嵌入式技術(shù)發(fā)展的重要方向,兩者之間數(shù)據(jù)交互通信,為復(fù)雜的高速數(shù)字信號(hào)處理業(yè)務(wù)提供了完善的硬件解決方案[1-3]。作為該平臺(tái)設(shè)計(jì)方案的核心,如何實(shí)現(xiàn)兩者之間的高速通信配置是該方案設(shè)計(jì)的技術(shù)難點(diǎn)。
I.MX6系列多媒體應(yīng)用處理器是Freescale公司面向解決多媒體和顯示應(yīng)用的最靈活設(shè)計(jì)開發(fā)平臺(tái),具有多核可擴(kuò)展和低功耗、性能和完備的集成度等優(yōu)勢(shì)。基于ARM9rM,ARM Cortex-A9等內(nèi)核處理器技術(shù),為快速增長(zhǎng)的消費(fèi)電子、汽車和工業(yè)市場(chǎng)應(yīng)用提供較好的需求解決方案[4]。EIM總線是Freescale公司I.MX6系列芯片的重要并行數(shù)據(jù)總線接口,主要用于同外設(shè)芯片或外部存儲(chǔ)器進(jìn)行數(shù)據(jù)傳輸,實(shí)現(xiàn)異步訪問帶SRAM接口的外設(shè)器件或者同步訪問帶NOR FLASH或PSRAM等接口的外設(shè)器件[5]。本文采用Freescale公司的I.MX6Q處理器及Xilinx公司的Kintex_7系列FPGA為核心的硬件設(shè)計(jì)平臺(tái),連接EIM總線接口設(shè)計(jì)實(shí)現(xiàn)ARM Cortex-A9處理器與FPGA之間的高速數(shù)據(jù)通信。該技術(shù)方法實(shí)現(xiàn)從Linux操作系統(tǒng)應(yīng)用到FPGA的底層數(shù)據(jù)鏈路通信,可作為相關(guān)高速數(shù)字信號(hào)采集與處理的平臺(tái)設(shè)計(jì)研發(fā)關(guān)鍵性技術(shù)參考,有效地降低了相關(guān)項(xiàng)目開發(fā)難度,縮短了研發(fā)周期。
1 EIM總線概述
EIM總線是I.MX6Q處理器與外部片外和存儲(chǔ)器設(shè)備之間數(shù)據(jù)通信的重要并行總線接口,可為其提供片選、時(shí)鐘和讀、寫邏輯控制等功能。作為I.MX6Q與外設(shè)芯片之間重要的并行通信總線接口,EIM總線接口通信具有數(shù)據(jù)傳輸實(shí)時(shí)性強(qiáng)、誤碼率低、外設(shè)可擴(kuò)展等優(yōu)點(diǎn),它具有以下幾方面技術(shù)特點(diǎn):
1)可同時(shí)支持多達(dá)4個(gè)片選信號(hào),靈活的地址空間配置,每個(gè)片選分區(qū)空間可通過VIA端口自由分配;
2)支持自由選擇和定義分區(qū)尋址空間,最高可同時(shí)滿足6個(gè)尋址空間獨(dú)立定義和配置;默認(rèn)每個(gè)獨(dú)立片區(qū)支持128 MB尋址空間;
3)每個(gè)獨(dú)立片選具備可選的寫保護(hù)引腳,支持16 bit/32 bit復(fù)用地址/數(shù)據(jù)模式;
4)支持X8,X16和X32的數(shù)據(jù)位大小配置,每個(gè)片選空間讀/寫通道具有獨(dú)立的等待狀態(tài)控制信號(hào);
5)異步訪問模式支持可編程的控制信號(hào)保持和建立時(shí)序,可編程的自由或固定的讀、寫潛伏期時(shí)序配置,支持異步頁(yè)面訪問模式;
6)支持同步內(nèi)存突發(fā)讀/寫模式訪問NOR-FLASH和PSRAM等存儲(chǔ)設(shè)備;
7)支持大/小端點(diǎn)訪問操作模式,RDY-INT信號(hào)設(shè)置外部中斷功能和定義外部啟動(dòng)信號(hào)等;
8)通過AXI總線協(xié)議進(jìn)行數(shù)據(jù)通信,支持直接存儲(chǔ)訪問( Direct Memory Access,DMA)數(shù)據(jù)傳輸技術(shù)。
EIM總線通過配置控制寄存器MUM,SRD,SWR等模式控制位,支持異步訪問模式、異步頁(yè)面模式、多路復(fù)用地址數(shù)據(jù)模式、突發(fā)時(shí)鐘模式、低功耗模式及啟動(dòng)模式等工作模式[6]。這些工作模式下,根據(jù)DSZ位可改變支持8 bit,16 bit或32 bit數(shù)據(jù)位大小。
2 系統(tǒng)設(shè)計(jì)
數(shù)據(jù)通信接口模塊設(shè)計(jì)通過EIM接口實(shí)現(xiàn)ARM與FPGA之間的數(shù)據(jù)鏈路通信,通信模塊連接結(jié)構(gòu)如圖1所示。Freescale公司I.MX6Q系列處理器芯片支持?jǐn)U展4個(gè)ARM Cortex_A9內(nèi)核,運(yùn)行頻率最高可達(dá)1.2 GHz,支持USB 2.0,IEEE 1588以太網(wǎng),SD/MMC,SPI,MIPl-HIS等豐富的外設(shè)擴(kuò)展端口[7-8]。處理器內(nèi)部特殊的哈佛指令和數(shù)據(jù)分離結(jié)構(gòu),即實(shí)現(xiàn)系統(tǒng)運(yùn)行性能最優(yōu)化,又充分地利用了系統(tǒng)存儲(chǔ)資源空間。Kintex_7系列FPGA是Xilinx公司性價(jià)比最高的新型現(xiàn)場(chǎng)可編程門陣列器件,該系列FPGA芯片串行帶寬達(dá)800 Gb/s、478 KB邏輯處理單元、34 Mbit分布?jí)KRAM,高性能選擇1/0技術(shù)支持最高1 866 Mb/s的DDR3接口,內(nèi)置DSP模塊25x18乘法器、48位累加器和高性能濾波預(yù)加器,峰值性能可達(dá)2 845 GMAC/s,高速串行收發(fā)器最高可支持到12.5 Gb/s的數(shù)據(jù)傳輸速率[9]。
3 EIM驅(qū)動(dòng)開發(fā)
EIM總線驅(qū)動(dòng)開發(fā)是完成從FPGA數(shù)據(jù)采集與ARM應(yīng)用層數(shù)據(jù)通信的關(guān)鍵,為底層硬件與應(yīng)用APP之間通信提供標(biāo)準(zhǔn)的Linux驅(qū)動(dòng)接口[10-11]。EIM總線接口設(shè)計(jì)配置EIM_CSnGCR1控制寄存器支持如圖2所示的幾種地址/數(shù)據(jù)復(fù)用配置模式,本設(shè)計(jì)采用MUM=1和DSZ=O01復(fù)用16 bit地址/數(shù)據(jù)模式,地址線和數(shù)據(jù)線復(fù)用EIM_DA[15:0]引腳,節(jié)約引腳數(shù)量,減少對(duì)其他外設(shè)模塊影響,地址空間范圍為Ox08000000- Ox0800FFFF。由于EIM總線存在端口功能復(fù)用,根據(jù)配置要求修改端口MUX模式,修改Linux內(nèi)核board - mx6q_sabreauto.h文件。
EIM總線配置寄存器用于控制通信時(shí)序信息、數(shù)據(jù)/地址接口數(shù)據(jù)寬度、片選分區(qū)尋址空間設(shè)置等,通用寄存器配置完成EIM總線接口初始化,定義接口數(shù)據(jù)傳輸?shù)目刂菩詤?shù),EIM總線配置通信時(shí)序如圖3所示。根據(jù)硬件平臺(tái)設(shè)計(jì)要求CSnGCR1通用控制寄存器配置操作模式,MUM=1開啟地址/數(shù)字總線復(fù)用模式,SRD=SWR=1,配置數(shù)據(jù)讀、寫傳輸為異步模式,設(shè)置突發(fā)長(zhǎng)度BL為4個(gè)數(shù)據(jù)字節(jié),設(shè)置數(shù)據(jù)為DS2[2:0]=001,DATA[15:0]對(duì)應(yīng)16 bit數(shù)據(jù)位,設(shè)置EIM讀和寫配置寄存器CSORCRi和CSOWCRI定義BE,CS,WE,OD及ADV等控制信號(hào)建立和保持時(shí)鐘時(shí)序等信息。
void mx6q_setup_weimcs ( void )
{
unsigned int reg;
void _ iomem *eim_reg = oremap (WEIM_BASE_ADDR,Ox20) ;
void _ iomem *ccm_reg = ioremap (CCM_BASE_ADDR,Ox80) ;
if( !eim_reg) {printk ( "error iomem eim_reg\n" ) ; }
if( !ccm_reg) {printk( "error iomem ccm_reg\n" ) ; }
/* For CCM Serial Clock Multiplexer Register *l
/*CCM_CSCMRI : Divicer for aclk_eim_slow *l
reg = readl(ccm_reg + OxIC) ;
reg&=-(Ox60000000);
reg b Ox00380000;
writel(reg, ccm_reg+ OxlC);
/*For CCM Clock Gating Register 6*/
/*CLKCTL_CCGR6: Set emi_slow_clock to be on in allmodes*/
reg= readl( ccm_reg+ Ox80);
reg I= OxOOOOOCOO;
writel(reg, ccm_reg+ Ox80);
/*For EIM General Configuration registers.*/
writel( Ox07f13089, eim_reg);
writel( Ox00000001, eim_reg+ Ox00000004);
/* For EIM Read Configuration registers. CSORCRI,CSORCR2;e/
writel( Ox18022072, eim_reg+ Ox00000008);
writel( OxOOOOb068, eim_reg+ OxOOOOOOOC);
/* For EIM Write Configuration registers. CSOWCRl,CSOWCR2 */,
writel( Oxd863ffe6, eim_reg+ Ox00000010);
writel( Ox00000000, eim_reg+ Ox00000014):
printk(”WEIM init end. CSOGCRl_is%x\n”, readl( eim_reg));
iounmap( eim_reg);
iounmap( ccm_reg);
)
在系統(tǒng)內(nèi)核文件board-mx6q_sabreauto.c中,為完成EIM接口與FPGA之間通信,添加數(shù)據(jù)通信各類操作函數(shù),如:imx6_baseboard_init/exit函數(shù)提供EIM總線初始化配置和資源卸載;eim_request_irq配置FPGA數(shù)據(jù)中斷請(qǐng)求;eim_write/read_datl6提供基于CSO尋址空間的讀、寫數(shù)據(jù),地址接口映射等。通過修改imx6q-sabreau-to_gpmi-weim.dts文件中參數(shù),注冊(cè)使能weim-nor驅(qū)動(dòng)程序,完成接口驅(qū)動(dòng)加載配置[12]。
4 邏輯實(shí)現(xiàn)
為保證EIM總線通信數(shù)據(jù)傳輸?shù)恼_性,邏輯讀寫時(shí)序參數(shù)需與I.MX6Q驅(qū)動(dòng)寄存器配置保持一致,邏輯設(shè)計(jì)采用VHDL硬件語(yǔ)言編寫,采用模塊化編碼思想,充分考慮代碼功能復(fù)用。邏輯程序按照功能可劃分為FIFO存儲(chǔ)單元、數(shù)據(jù)采集單元和讀/寫控制邏輯單元。讀操作周期中,數(shù)據(jù)采集單元將數(shù)據(jù)緩存至FIFO存儲(chǔ)器空間,等待EIM接口數(shù)據(jù)傳輸讀操作控制。將待讀寄存器地址寫入EIM地址總線Addr[15:0],通過EIM—LBA信號(hào)提示FPGA鎖存地址,對(duì)應(yīng)邏輯預(yù)設(shè)FIFO存儲(chǔ)器地址,拉低片選CSO信號(hào)后,使能FPGA讀設(shè)備;拉低OE輸出使能,同時(shí)釋放地址線,將對(duì)應(yīng)FIFO存儲(chǔ)器數(shù)據(jù)寫人EIM數(shù)據(jù)總線Data[15:0];經(jīng)過Tr時(shí)間拉高OE使能信號(hào),讀取總線數(shù)據(jù),完成EIM總線讀操作周期。除OE,BE讀/寫控制信號(hào)外,讀寫操作邏輯程序基本類似,讀/寫邏輯數(shù)據(jù)控制流程如圖4所示。5測(cè)試
FPGA根據(jù)驅(qū)動(dòng)時(shí)序編寫測(cè)試程序,初始化內(nèi)部寄存器值為Ox0000。通過ARM應(yīng)用驅(qū)動(dòng)讀寫函數(shù),對(duì)EIM總線數(shù)據(jù)接口模塊進(jìn)行寄存器讀寫通信測(cè)試。寫入FPGA內(nèi)部定義地址寄存器OxOAOO-OxOAOF依次寫入數(shù)據(jù)位OxOOO01-OxOOOF,然后再通過EIM接口,讀對(duì)應(yīng)位寫人數(shù)據(jù),結(jié)合FPGA軟件集成環(huán)境ChipScope設(shè)置信號(hào)LBA下降沿觸發(fā),捕捉數(shù)據(jù)波形,驗(yàn)證通信數(shù)據(jù)采集正確性。采集測(cè)試讀寫操作時(shí)序如圖5、圖6所示,根據(jù)測(cè)試數(shù)據(jù)分析表明,通過EIM總線數(shù)據(jù)通信接口設(shè)計(jì)實(shí)現(xiàn)基本數(shù)據(jù)傳輸功能,滿足處理器之間數(shù)據(jù)通信功能要求。
6 結(jié)論
本文根據(jù)多功能數(shù)據(jù)總線采集與處理應(yīng)用項(xiàng)目需求,基于Freescale公司I.MX6Q處理器及Xilinx公司Kin-tex_7系列FPGA為核心的硬件平臺(tái),研究實(shí)現(xiàn)了一種通過EIM總線接口傳輸?shù)腁RM與FPGA之間的數(shù)據(jù)通信方法。通過系統(tǒng)地分析EIM接口通信特點(diǎn),重點(diǎn)介紹了EIM接口設(shè)計(jì)軟件驅(qū)動(dòng)程序開發(fā)和邏輯控制的具體實(shí)現(xiàn),通過系統(tǒng)互聯(lián)通信測(cè)試,驗(yàn)證了接口數(shù)據(jù)通信的正確性,該設(shè)計(jì)滿足接口數(shù)據(jù)通信需求。結(jié)果表明,該技術(shù)方法適用于其他類似相關(guān)處理器平臺(tái)通信設(shè)備應(yīng)用場(chǎng)合,具有一定的設(shè)計(jì)參考價(jià)值。
參考文獻(xiàn)
[1]張高健,楊剛,楊霖,等.基于ARM+FPGA的多路廣播音頻處理系統(tǒng)[J].電聲技術(shù),2015( 12):68-70.
ZHANG Gaojian, YANG Gang, YANG Lin, et al.Multiplexbroadcasting audio processing system based on ARM and FP-GA [J]. Audio engineering, 2015( 12): 68-70.
[2]朱曉鵬,肖鐵軍,趙蕙.ARM+FPGA的實(shí)時(shí)數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)T程與設(shè)計(jì),2009,30( 13):3088-3090.
ZHU Xiaopeng, XIAO Tiejun. ZHAO Hui. System design ofreal-time data acquisition based on ARM and FPGA [J]. Com-puter engineering and design, 2009, 30( 13): 3088-3090.
[3]常秀清.基于Linux系統(tǒng)的EIM接口數(shù)據(jù)傳輸方法[J].無線電工程, 2016.46(6):18-22.
CHANG Xiuqing.A data transmission method for EIM inter-face based on Linux operation system[J].Radio engineering,2016, 46(6):18-22.
[4] NXP Semiconductor. Embedded solutions based on ARM tech-nology guide [M]. Austin: Freescale. 2014.
[5]陳崇森,基于i.MX6Q+FPGA平臺(tái)Android下EIM總線接口設(shè)計(jì)[J].現(xiàn)代計(jì)算機(jī),2016( 13):60-65.
CHEN Chongsen. Design of EIM bus interface based on i.MX6Q+FPGA platform under Android [J]. Modern computer,2016(13):60-65.
[6] NXP Semiconductor. i.MX6Dual/6Quad applications processorreference manual [M]. Austin: Freescale, 2017.
[7] NXP Semiconductor.i. MX6 series of applications processors[M]. Austin: Freescale, 2017.
[8]杜培軍,閆帥,劉錦高.基于i.MX6車載音視頻系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2015,23( 20):185-188.
DU Peijun, YAN Shuai, LIU Jingao. Design and implementa-tion of vehicle audio and video system hased on i.MX6 [J].Electronic design engineering, 2015. 23(20): 185-188.
[9] Xilinx.7 Series FPGAs data sheet: overview[M]. San Jose:Xilinx. 2017.
[10]宋寶華.Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解[M].北京:人民郵電出版社.2010.
SONG Baohua. Embedded Linux device driver development[M]. Beijing: Ports&Telecom Press, 2010.
[11]韓少云,嵌入式Linux驅(qū)動(dòng)程序?qū)崙?zhàn)開發(fā)[M].北京:北京航空航天大學(xué)出版社 , 2012.
HAN Shaoyun. Implementation of embedded Linux devicedriver development [M]. Beijing: Beijing University of Aero-nautics and Astronautics Press. 2012.
[12] NXP Semiconductor. i.MX reference manual [M]. Austin : Fre-escale. 2018.
作者簡(jiǎn)介:?jiǎn)塘兀?993-),男,山西臨汾人,碩士,研究方向?yàn)閯?dòng)態(tài)測(cè)試與智能儀器。
李永紅(1967-),男,山西臨汾人,碩士生導(dǎo)師,教授,研究方向?yàn)樾l(wèi)星/微慣性組合導(dǎo)航技術(shù)、飛行器彈載數(shù)據(jù)記錄儀、
常規(guī)彈藥制導(dǎo)與控制。
岳鳳英(1977-),女,山西忻州人,碩士生導(dǎo)師,副教授,研究方向?yàn)閷?dǎo)航、制導(dǎo)與控制,檢測(cè)技術(shù)與自動(dòng)化裝置。