基于dMAX的C6727B并行數(shù)據(jù)傳輸設(shè)計
DSP(數(shù)字信號處理器)和FPGA(現(xiàn)場可編程門陣列)一直是數(shù)字信號處理的兩個核心處理單元。目前的無線通信、圖像系統(tǒng)、語音系統(tǒng)都是以這兩類芯片為核心,配置必要的外圍電路來組成整個系統(tǒng)。DSP的主要優(yōu)點是算法處理能力強,而FPGA的主要優(yōu)點則是并行處理。隨著電子技術(shù)和芯片技術(shù)的發(fā)展,DSP和FPGA逐漸融合,目前一般的FPGA芯片都提供數(shù)字算法處理IP核,可以在FPGA上完成FFT、濾波等傳統(tǒng)意義上屬于DSP的工作。這些核的主要缺點是算法固定,只提供成熟的算法,算法處理的靈活性較低。經(jīng)過長期的發(fā)展,DSP的片內(nèi)外設(shè)逐漸豐富,但一直很難觸及FPGA的并行處理。
TI公司推出的C6727B芯片其片內(nèi)集成了最新的dMAX(Dual Data Movement Accelerator,雙向數(shù)據(jù)傳輸加速器)模塊,使得并行數(shù)據(jù)傳輸成為可能。其實現(xiàn)并行數(shù)據(jù)傳輸?shù)谋举|(zhì)就是相當(dāng)于在片內(nèi)集成2個EDMA(En—hanced Direct Memory Access,增強的直接存儲器訪問)模塊,實現(xiàn)數(shù)據(jù)在無需CPU參與情況下的并行雙路傳輸。本文以HPI和EMIF接口的數(shù)據(jù)傳輸為例,介紹dMAX的結(jié)構(gòu)、配置及其使用方法。
1 dMAX及其結(jié)構(gòu)
C6727B是在C671x基礎(chǔ)上發(fā)展的浮點型DSP,其最高工作頻率達(dá)到350 MHz。單個指令周期可以執(zhí)行6個浮點數(shù)據(jù)運算,最高達(dá)到2 100MFLOPS;片內(nèi)具有256KB的RAM,片內(nèi)外設(shè)有。EMIF、UHPI、音頻串口、dMAX、定時器以及I2C、SPI接口等。
dMAx模塊是C672x系列DSP所特有的數(shù)據(jù)傳輸模塊,可以實現(xiàn)內(nèi)部存儲器、片內(nèi)外設(shè)和外部存儲器兩兩之間的數(shù)據(jù)傳輸。其內(nèi)部結(jié)構(gòu)如圖1所示。
從圖中可以看出,dMAX主要由事件和中斷處理模塊、事件編碼器、事件參數(shù)表、事件的地址生成硬件等組成。事件模塊分成高優(yōu)先級和低優(yōu)先級兩個相互獨立的模塊,各自有獨立的事件入口和事件參數(shù)表,和CPU有獨立的接口,使得dMAX可以同時處理兩個不同的事件。當(dāng)訪問CPU端口時,MAX0的優(yōu)先級高,MAXl的優(yōu)先級低。
dMAX可以使用戶定義的數(shù)據(jù)在內(nèi)部數(shù)據(jù)存儲器與外設(shè)之間移動,dMAX能夠移動數(shù)據(jù)到任意能夠?qū)ぶ返拇鎯ζ骺臻g,包括內(nèi)部存儲器、外設(shè)存儲器空間、擴展內(nèi)存。dMAx能夠同時處理2個數(shù)據(jù)轉(zhuǎn)移請求,而且dMAX能夠通過執(zhí)行先進(jìn)的一維、二維與三維數(shù)據(jù)的存儲器傳輸工作,從而使DSP得以專注于信號處理任務(wù),顯著提高系統(tǒng)性能,適合圖像的子幀提取或者語音信號的子信道提取。
為了方便CPU直接控制dMAX,C6727B還有2個專門的寄存器負(fù)責(zé)CPU與dMAX的通信,分別為DETR與DESR寄存器,CPU通過對這兩個寄存器的讀寫就可以控制dMAX的操作。
2 系統(tǒng)硬件結(jié)構(gòu)
C6727B和其他DSP有一個較大的區(qū)別就是,C6727B不再提供專門的外部中斷引腳,而是使用一些GPIO引腳與dMAX配合使用,通過寄存器的設(shè)置將GPIO引腳配置成外部中斷引腳。為了實現(xiàn)并行的數(shù)據(jù)傳輸,需要使用2個外部中斷引腳。為此,使用C6727B的音頻串口的AXR[8]和AXR[9]作為通用I/O引腳,同時需要將音頻串口的CONFIGMCASP0和CONFIGMCASP1分別配置成Ox0001和0x0002,如圖2所示。此時音頻串口不能再作為普通的音頻口使用,而是配置成I/0接口。
從圖2可以看出,配置好音頻串口后,一旦AXR[8]和AXR[9]引腳有上升沿到,則McASP0和McASP1激活dMAX的事件26和事件27。這兩個事件分別連接到dMAX的低優(yōu)先級和高優(yōu)先級模塊。即使兩個中斷同時發(fā)生,dMAX也可以同時響應(yīng)事件,并處理相應(yīng)的數(shù)據(jù)傳輸。
為了實現(xiàn)并行數(shù)據(jù)傳輸,必須將事件26的參數(shù)設(shè)置成與EMIF接口通信,同時需要將傳輸數(shù)據(jù)的源地址,目的地址,數(shù)據(jù)個數(shù)和數(shù)據(jù)增加方式(不變、加1、減1等)在初始化時寫入dMAx(Lo)的參數(shù)中。這樣,一旦事件26觸發(fā),dMAX(Lo)將自動傳輸數(shù)據(jù);數(shù)據(jù)傳輸結(jié)束后,可以根據(jù)需要將dMAX(Lo)配置為向CPU發(fā)送內(nèi)部中斷14。同樣,對于事件27,配置dMAX(Hi)的參數(shù)就可以完成對HPI接口的數(shù)據(jù)傳輸,也可以根據(jù)需要將dMAX(Hi)配置為向CPU發(fā)送內(nèi)部中斷13。
McASP與中斷相關(guān)的寄存器配置是實現(xiàn)以上方案的重點,其中斷配置框圖如圖3所示。從圖中可以看出,使用PFUNC寄存器將其配置成通用I/0引腳;PDIR寄存器控制I/O引腳的方向,若是輸出引腳則由POUT引腳輸出高低電平,若是輸入引腳則由PDIN寄存器讀出該引腳的狀態(tài);此外,可以使用PDCLR和PSET寄存器清除或者設(shè)置輸出引腳的狀態(tài)。
3 系統(tǒng)軟件設(shè)計
系統(tǒng)軟件設(shè)計主要包括McASP、dMAX、HPI和EMIF的初始化,以及中斷使能等。系統(tǒng)主程序只需要等待中斷進(jìn)行相應(yīng)的處理,主要的數(shù)據(jù)傳輸工作都是由dMAX按照軟件配置自動完成,不需要CPU參與。系統(tǒng)軟件流程如圖4所示。圖中,虛線部分表示由dMAX獨立完成的工作,實線部分表示由CPU完成的工作。兩者之間通過內(nèi)部中斷方式實現(xiàn)狀態(tài)的交流。
當(dāng)有2個以上傳輸事件發(fā)生,尤其是多個事件都在同一個dMAX優(yōu)先級完成時,事件仲裁就變得很重要。圖5是多個dMAX事件進(jìn)行數(shù)據(jù)傳輸?shù)睦?。圖中,事件A為dMAX(Hi)數(shù)據(jù)傳輸;事件0~2為dMAX(Lo)數(shù)據(jù)傳輸。在dMAX(Lo)中,設(shè)定事件O優(yōu)先級最高,事件2優(yōu)先級最低。
事件A和事件0同時發(fā)生,將分別觸發(fā)dMAX(Hi)和dMAX(Lo)進(jìn)行數(shù)據(jù)傳輸。在之后的時鐘周期內(nèi),dMAX(Hi)不再有其他事件發(fā)生,將穩(wěn)定、持續(xù)地進(jìn)行事件A的數(shù)據(jù)傳輸,直到傳輸結(jié)束,如圖5中最后一行所示。
對于dMAX(Lo),在傳輸了事件0的一個數(shù)據(jù)后,事件2發(fā)生。雖然事件2的優(yōu)先級低于事件O,但dMAX(Lo)仍然會響應(yīng)事件2,并且會傳輸一個事件2的數(shù)據(jù),如圖中第5行的E2/QO。此時,dMAX(Lo)就存在2個激活的事件——事件O和事件2。之后的數(shù)據(jù)傳輸dMAX(Lo)進(jìn)行優(yōu)先級判斷,將優(yōu)先傳輸事件O的數(shù)據(jù),而將事件2掛起,直到事件O結(jié)束后才開始處理事件2的數(shù)據(jù)傳輸。
4 總 結(jié)
dMAX使用2路獨立的傳輸通道從而實現(xiàn)并行數(shù)據(jù)傳輸,其本質(zhì)是采用了獨立的物理通道,這與FPGA實現(xiàn)并行處理基本一致。本文介紹了基于C6727B的dMAX的基本結(jié)構(gòu)以及軟硬件設(shè)計,使用事件優(yōu)先級控制區(qū)分多個事件的數(shù)據(jù)傳輸。由于可以并行傳輸數(shù)據(jù),使得DSP與外部設(shè)備的通信更加方便和快捷,而且不需要CPU的參與,減輕了CPU的負(fù)擔(dān),使CPU可以專注于復(fù)雜的算法處理。