基于ADSP-TS201S的二維DMA數(shù)據(jù)傳輸
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:針對(duì)高速信號(hào)處理系統(tǒng)中數(shù)據(jù)總線傳輸?shù)钠款i問題,采用二維DMA方式進(jìn)行外設(shè)高速緩存到DSP內(nèi)核的數(shù)據(jù)塊實(shí)時(shí)傳輸。對(duì)二維DMA控制和狀態(tài)寄存器組進(jìn)行編程控制,結(jié)合FPGA與DSP鏈路接口設(shè)計(jì),將存儲(chǔ)區(qū)的數(shù)據(jù)塊作為一個(gè)數(shù)據(jù)陣列進(jìn)行傳輸,使DSP在DMA中斷中獲得數(shù)據(jù)。試驗(yàn)結(jié)果證明,二維DMA傳輸方式可解決高速外設(shè)數(shù)據(jù)塊的連續(xù)傳輸和處理問題,保證整個(gè)系統(tǒng)并行信號(hào)處理流水線的順序執(zhí)行,是一種解決數(shù)據(jù)總線傳輸瓶頸問題的實(shí)用方法。目前該技術(shù)已成功應(yīng)用于某水聲測(cè)量系統(tǒng)中。
關(guān)鍵詞:ADSP-TS201;二維DMA;LVDS;鏈路口
0 引言
隨著數(shù)字濾波技術(shù)在水聲信號(hào)處理中的廣泛應(yīng)用,在降低系統(tǒng)硬件復(fù)雜度的同時(shí),對(duì)數(shù)字信號(hào)處理的實(shí)時(shí)性也提出了更高要求。數(shù)字濾波器處理后的大量數(shù)據(jù)需要實(shí)時(shí)高效地傳輸給DSP內(nèi)核,以便進(jìn)行相應(yīng)的數(shù)字信號(hào)處理;為了提高工作效率,信號(hào)處理系統(tǒng)通常會(huì)采用流水線操作。另外為了不打斷系統(tǒng)的運(yùn)行流水線,數(shù)據(jù)傳輸不僅要滿足實(shí)時(shí)高速傳輸?shù)囊螅€需具備DSP內(nèi)核并行處理的排列順序要求。
DMA(Direct Memory Access)是在處理器內(nèi)核不干預(yù)情況下的后臺(tái)高速數(shù)據(jù)傳送機(jī)制,不占用DSP內(nèi)核的處理時(shí)間,特別是二維DMA數(shù)據(jù)傳輸方式,能夠?qū)?shù)據(jù)塊按要求順序傳輸。本文以ADSP-TS201S(以下簡稱TS201)為例,針對(duì)二維DMA數(shù)據(jù)傳輸方式進(jìn)行探討。
1 TS201的DMA傳輸
1.1 DMA簡介與分析
TS201內(nèi)核工作頻率高達(dá)600 MHz,是一款性能極高的靜態(tài)超標(biāo)量處理器,專對(duì)復(fù)雜信號(hào)處理任務(wù)和通信結(jié)構(gòu)進(jìn)行了優(yōu)化,其Tiger SHA RC靜態(tài)超標(biāo)量結(jié)構(gòu)使DSP每周期能夠同時(shí)執(zhí)行4條指令,24個(gè)16位定點(diǎn)運(yùn)算和6個(gè)浮點(diǎn)運(yùn)算。支持14個(gè)DMA通道,可完成片內(nèi)存儲(chǔ)器、片外存儲(chǔ)器、存儲(chǔ)器映射外設(shè)、鏈路口、主機(jī)處理器和其他處理器(如FPGA)之間的低開銷高速傳輸。TS201片內(nèi)的DMA控制器允許將數(shù)據(jù)傳輸作為一個(gè)后臺(tái)任務(wù)執(zhí)行,從而將處理器核釋放出來,進(jìn)行其他數(shù)字信號(hào)處理操作。在復(fù)雜信號(hào)處理系統(tǒng)中,特別是需要大量數(shù)據(jù)傳輸和搬移的操作系統(tǒng),采用DMA方式可以釋放處理器內(nèi)核,提高工作效率。
1.2 TS201的鏈路口DMA
TS210具有適合多DSP并行處理的突破性體系結(jié)構(gòu),除了多條獨(dú)立的128位寬數(shù)據(jù)總線外,具有4位寬的4個(gè)雙向LVDS(Low Voltage Differ ential Signaling)鏈路口是其組成并行系統(tǒng)的關(guān)鍵。鏈路口可以直接由處理器核控制,也可以由DMA控制器控制,每個(gè)鏈路口的接收和發(fā)送都有指定的DMA通道。通過編程控制可以將鏈路口設(shè)置成4位并行或者1位的方式進(jìn)行傳輸。
TS201鏈路口通過寫TX緩沖寄存器完成數(shù)據(jù)的發(fā)送,讀取RX緩沖寄存器數(shù)據(jù)完成數(shù)據(jù)的接收。只要TX移位寄存器為空,所有寫TX緩沖區(qū)的數(shù)據(jù)都會(huì)拷貝到移位寄存器。當(dāng)RX移位寄存器為空,或者RX緩沖器有多余的空間可以從RX移位寄存器接收完整的4個(gè)字的接收數(shù)據(jù)時(shí),接收方才允許數(shù)據(jù)輸入。RX緩沖器為空,有4個(gè)字的接收已經(jīng)完成,才會(huì)從移位寄存器讀入數(shù)據(jù)。如果RX緩沖器已滿,會(huì)將數(shù)據(jù)拷貝至RX臨時(shí)接收緩沖器內(nèi),一直保持到RX緩沖器為空。片上每個(gè)鏈路口都與2個(gè)DMA通道相連,分別進(jìn)行數(shù)據(jù)的發(fā)送和接收。2個(gè)DMA通道都與內(nèi)部寄存器、外部寄存器及其他鏈路口緩沖器相連接。鏈路口收發(fā)結(jié)構(gòu)見圖1所示。
1.3 二維DMA
TS201可以尋址和傳輸1個(gè)二維存儲(chǔ)陣列,二維DMA將存儲(chǔ)區(qū)的數(shù)據(jù)塊作為1個(gè)數(shù)據(jù)陣列進(jìn)行傳輸,這對(duì)制定矩陣操作的DSP算法十分有用。存儲(chǔ)器中的二維存儲(chǔ)塊可以通過鏈路口向外發(fā)送,由鏈路口接收的數(shù)據(jù)塊也可以按照二維存儲(chǔ)陣列的形式保存到存儲(chǔ)器中。接收端存儲(chǔ)器矩陣的大小可以與發(fā)送端的不同,只要兩邊所含的總字節(jié)數(shù)相等即可。二維DMA的優(yōu)點(diǎn)如下:
(1)允許任意一個(gè)矩陣區(qū)域的數(shù)據(jù)交叉存取,以一種比較直觀的處理順序?qū)?shù)據(jù)放入存儲(chǔ)區(qū)。例如,將同一個(gè)A/D經(jīng)過不同數(shù)字濾波器后的并行數(shù)據(jù),以數(shù)據(jù)塊的形式進(jìn)行搬移,自動(dòng)存入各自的高速緩存區(qū)或片內(nèi)存儲(chǔ)區(qū)。
(2)能夠?qū)崟r(shí)高效地完成數(shù)據(jù)塊存取。DMA控制器和DSP內(nèi)核同時(shí)存取向不同存儲(chǔ)塊的操作均可在一個(gè)時(shí)鐘周期內(nèi)完成。例如,當(dāng)DSP內(nèi)核對(duì)一子存儲(chǔ)塊的數(shù)據(jù)進(jìn)行操作時(shí),DMA可以向另一個(gè)存儲(chǔ)塊存放數(shù)據(jù)。在某些條件下,甚至可以同時(shí)訪問同一個(gè)存儲(chǔ)塊。
(3)允許有選擇的數(shù)據(jù)傳輸,即只選擇需要的輸入數(shù)據(jù)塊而不是全部數(shù)據(jù)。例如,系統(tǒng)在處理不同通道的數(shù)據(jù)時(shí),可以在二維DMA傳輸過程中進(jìn)行數(shù)據(jù)的實(shí)時(shí)更改與選擇。
(4)鏈?zhǔn)蕉SDMA可以在DSP內(nèi)核不干預(yù)的情況下進(jìn)行無限制的多次DMA傳輸,并且每次操作的屬性和I/O都可以不同。
(5)允許在一個(gè)激活的二維DMA鏈中插入高優(yōu)先級(jí)的鏈?zhǔn)紻MA,能實(shí)時(shí)實(shí)現(xiàn)DMA鏈的更新,繼續(xù)二維DMA數(shù)據(jù)傳輸。
假設(shè)某系統(tǒng)中存在4種并行數(shù)據(jù)(如并行A/D采集數(shù)據(jù))的二維DMA傳輸,通過乒乓緩存的方式進(jìn)行數(shù)據(jù)的轉(zhuǎn)存,其數(shù)據(jù)塊二維傳輸過程如圖2所示。
圖2中的Data0…Data3表示連續(xù)產(chǎn)生的4路并行數(shù)據(jù),Data00…Data0n表示Data0的n個(gè)數(shù)據(jù)塊。左側(cè)表示為原始輸入數(shù)據(jù),例如A/D數(shù)據(jù)經(jīng)過數(shù)字濾波器后的4路并行數(shù)據(jù)。中間表示為高速緩存區(qū)內(nèi)部的一維排列數(shù)據(jù),右邊表示經(jīng)過二維DMA鏈路口傳輸后的二維數(shù)據(jù)塊排列。從圖中可以看出,二維DMA傳輸將原來不適合DSP流水線操作的數(shù)據(jù),實(shí)時(shí)高效地傳輸?shù)紻SP內(nèi)部,并將數(shù)據(jù)塊按照流水線要求順序排列存儲(chǔ)。
TS201的二維DMA控制和狀態(tài)寄存器組,包括DMA控制寄存器、DMA狀態(tài)寄存器、清除寄存器和傳輸控制寄存器等。通過對(duì)寄存器組編程可以允許相應(yīng)DMA產(chǎn)生中斷,整塊數(shù)據(jù)傳輸完畢后,DMA將產(chǎn)生中斷。中斷發(fā)生在計(jì)數(shù)寄存器減至0,而且是最后一個(gè)數(shù)據(jù)單元傳輸后。每個(gè)DMA控制塊都有自身的中斷,DMA中斷會(huì)鎖存在ILAT寄存器中,并由IMASK寄存器打開。但需要注意的是,DMA中的計(jì)數(shù)器必須是減到零,向計(jì)數(shù)器寄存器寫零并不會(huì)產(chǎn)生DMA中斷。[!--empirenews.page--]
DMA傳輸控制塊寄存器是一個(gè)128位的四字組寄存器,含有DMA塊傳輸所需的控制信息。在DMA發(fā)送時(shí),4個(gè)字包含了原數(shù)據(jù)的地址、將要發(fā)送的字?jǐn)?shù)量、地址增量和控制位。在DMA接收時(shí),4個(gè)字包含了目的地址、將要接收的字?jǐn)?shù)據(jù)數(shù)量、地址增量和控制位,其結(jié)構(gòu)如圖3所示。
其中,DI寄存器是一個(gè)32位的DMA索引寄存器,它包括了將要發(fā)送或者接收的數(shù)據(jù)源地址或者目的地址,既可以指向內(nèi)部寄存器和外部寄存器,也可以指向鏈路口。DX寄存器包含一個(gè)16位的汁數(shù)值和一個(gè)16位的修改量,計(jì)數(shù)值保存在高16位,修改量保存在低16位。如果使能了二維DMA,則該寄存器保存的只是X方向的計(jì)數(shù)值和修改量。計(jì)數(shù)值和修改量均以32位字為單位。DY寄存器和DX寄存器結(jié)合使用,該寄存器保存了Y方向上的16位修改量和16位計(jì)數(shù)值。如果只是進(jìn)行一維的DMA傳輸,就不需要設(shè)置該寄存器。DP寄存器包含了DMA傳輸?shù)乃锌刂菩畔ⅰ?2位到31位包含了所有控制信息,0位到21位包含了鏈?zhǔn)叫畔ⅰ?br />
一般情況下啟動(dòng)二維DMA的步驟如下:
(1)保存TCB DI寄存器中的當(dāng)前地址,啟動(dòng)一個(gè)DMA存儲(chǔ)器周期。
(2)在該周期內(nèi),將TCB DX增量寄存器中的X修改量與TCB DI寄存器中的當(dāng)前地址相加。
(3)TCB DX計(jì)數(shù)寄存器內(nèi)容減1,若TCB DX計(jì)數(shù)寄存器值為零,則執(zhí)行第4步。
(4)重新加載TCB DX計(jì)數(shù)寄存器值。
(5)DMA寄存器中Y維增量加到TCB DI寄存器中的當(dāng)前地址。
(6)TCB DX計(jì)數(shù)寄存器內(nèi)容減1。
(7)若TCB DX計(jì)數(shù)寄存器值等于零,則DMA傳輸結(jié)束,在再次設(shè)置TCB前,需禁止它。
2 二維DMA應(yīng)用
2.1 硬件設(shè)計(jì)
水聲信號(hào)處理系統(tǒng)的復(fù)雜性和連續(xù)性要求信號(hào)處理系統(tǒng)具有較高的實(shí)時(shí)處理能力,所以設(shè)計(jì)時(shí)采用多片TS201來構(gòu)成并行處理系統(tǒng),以提高系統(tǒng)的數(shù)據(jù)處理能力。各DSP之間僅通過鏈路口無縫連接,片間連線少,降低了PCB布線難度和層數(shù),節(jié)約了制板成本。此外,數(shù)據(jù)傳輸采用鏈路口的二維DMA方式,并不占用DSP內(nèi)核的運(yùn)算時(shí)間,可以提高處理板的實(shí)時(shí)性能,保證系統(tǒng)流水線操作的順利執(zhí)行。系統(tǒng)硬件結(jié)構(gòu)圖見圖4所示。
模擬輸入端采用2片18位的高速A/D進(jìn)行模數(shù)轉(zhuǎn)換,每一片A/D的數(shù)據(jù)分別經(jīng)過FPGA中的4個(gè)FIR濾波器,產(chǎn)生的8路并行數(shù)據(jù)通過鏈路口二維DMA傳送給DSP組,進(jìn)行相應(yīng)的數(shù)字信號(hào)處理。具體數(shù)據(jù)傳輸框圖見圖5所示。
其中,①,②,…,⑧表示LVDS鏈路口數(shù)據(jù)傳輸順序;lal表示AD1數(shù)據(jù)經(jīng)過FIRa濾波器后的低1 KB數(shù)據(jù),lah表示AD1數(shù)據(jù)經(jīng)過FIRa濾波器后的高1 KB數(shù)據(jù)。濾波后的A/D數(shù)據(jù)進(jìn)入乒乓緩存,最后通過鏈路口將數(shù)據(jù)傳輸?shù)紻SP內(nèi)部。這里要求,在下一個(gè)數(shù)據(jù)塊采樣結(jié)束之前,需要完成上一個(gè)數(shù)據(jù)塊的傳輸、濾波、相關(guān)及功率譜分析等一系列較為復(fù)雜的數(shù)據(jù)處理。由于AD1,AD2是同步采樣的,經(jīng)過數(shù)字濾波器的數(shù)據(jù)通過LVDS鏈路口順序傳輸,為了減少數(shù)據(jù)塊調(diào)整和挑選的時(shí)間,這里采用鏈路口的二維DMA傳輸方式,可以快捷地將A/D采集的數(shù)據(jù)塊按照流水順序?qū)懭隓SP內(nèi)部存儲(chǔ)區(qū)。[!--empirenews.page--]
2.2 軟件設(shè)計(jì)
以圖4中所示的FPGA與DSP0的L3鏈路口的二維DMA數(shù)據(jù)傳輸為例,假設(shè)數(shù)據(jù)塊大小設(shè)定為1 024點(diǎn),其鏈路口數(shù)據(jù)排列順序如圖6所示。
上標(biāo)表示DSP0內(nèi)部存儲(chǔ)區(qū)內(nèi)的偏移地址,每次DMA中斷傳輸4×1 024個(gè)數(shù)據(jù),即每次傳輸4行1 024列大小的數(shù)據(jù),8次DMA中斷即可獲得一個(gè)時(shí)間片內(nèi)的2個(gè)A/D采集數(shù)據(jù)經(jīng)過4個(gè)FIR濾波器后的全部數(shù)據(jù),而且數(shù)據(jù)塊按照DSP0的流水線順序排列。
DSP0軟件需要完成L3鏈路口的初始配置和接受中斷函數(shù)的設(shè)計(jì),首先進(jìn)行DSP系統(tǒng)時(shí)鐘和UART及FIR濾波器系統(tǒng)的初始設(shè)置,然后進(jìn)行二維DMA寄存器控制和內(nèi)存塊的分配,然后開啟硬件A/D采集,等待二維DMA中斷,進(jìn)入中斷后獲得最終數(shù)據(jù)。軟件流程見圖7所示。
二維DMA中斷處理代碼如下:
其中的L3r_data為數(shù)據(jù)存儲(chǔ)區(qū)的首地址。
3 結(jié)語
本文介紹了TS201的二維DMA傳輸,結(jié)合實(shí)例說明了鏈路口二維DMA設(shè)置及應(yīng)用方法,給出軟件設(shè)置流程圖及關(guān)鍵代碼。實(shí)踐證明,二維DMA傳輸能夠保證大量數(shù)據(jù)的可靠傳輸,同時(shí)又解決了多處理器之間共用總線所產(chǎn)生的I/O瓶頸問題,增強(qiáng)了多處理器系統(tǒng)的并行處理能力,提高了系統(tǒng)流水線運(yùn)行效率。