DSP鏈路口在并行處理系統(tǒng)中的應(yīng)用
隨著數(shù)字信號(hào)處理技術(shù)的快速發(fā)展,數(shù)字信號(hào)處理技術(shù)在多個(gè)領(lǐng)域(如通信、雷達(dá)、聲納等)得到了廣泛應(yīng)用。在很多情況下,由于對(duì)信號(hào)要求實(shí)時(shí)處理并且數(shù)據(jù)量不斷增加,單片DSP芯片已不能滿足要求。AD公司推出的ADSP2106X系列,由于采用了超級(jí)哈佛結(jié)構(gòu),適用于構(gòu)成各種不同的并行多處理器系統(tǒng),較好地滿足了上述要求,因此在國(guó)內(nèi)外得到廣泛應(yīng)用。在多片并行ADSP2106x處理系統(tǒng)中,鏈路口的應(yīng)用得到了越來越多的重視。在這方面,如何充分、有效地利用鏈路口進(jìn)行數(shù)據(jù)傳輸,已成為廣大DSP應(yīng)用者首先要解決的一個(gè)問題。
本文根據(jù)筆者在工程中應(yīng)用和調(diào)試ADSP2106X器件的經(jīng)驗(yàn),著重討論鏈路口的適用場(chǎng)合、使用方法,并對(duì)使用過程中常見問題進(jìn)行分析,給出解決方法。
1 ADSP2106X及其鏈路口的特點(diǎn)和功能
ADSP2106X采用超級(jí)哈佛結(jié)構(gòu),具有體積小、速度高、內(nèi)存大、訪問靈活等特點(diǎn),適用于構(gòu)成各種不同的并行多處理器系統(tǒng),完成各種實(shí)時(shí)信號(hào)的處理功能,特別適用于雷達(dá)信號(hào)處理和聲納信號(hào)處理。
ADSP2106X提供了6個(gè)鏈路口,每個(gè)鏈路口包括4位數(shù)據(jù)線、一個(gè)雙向時(shí)鐘信號(hào)、一個(gè)雙向確認(rèn)信號(hào)。鏈路握手信號(hào)包括LxCLK和LxACK,鏈路口以四位碼一組的方式傳送32位或48位字。發(fā)送方在時(shí)鐘LxCLK的上升沿送出4位碼,接收方利用時(shí)鐘下降沿鎖存4位碼,并且使LxACK有效,表示已準(zhǔn)備接收下一個(gè)字。在每個(gè)字開始發(fā)送時(shí),發(fā)送方如果看到LxACK無效,將使LxCLK變高,并等待LxACK有效后發(fā)送新字。當(dāng)發(fā)送緩存為空時(shí),LxCLK將保持低。如果接收時(shí)鐘不超過主時(shí)鐘(40MHz),LCOM寄存器的LCLKX2x位應(yīng)設(shè)為0;若接收時(shí)鐘為主時(shí)鐘的2倍,則置為1。兩個(gè)用于數(shù)據(jù)通信的鏈路口之間的連接關(guān)系如圖1所示。
每個(gè)鏈路口還可以按2倍時(shí)鐘頻率的速率進(jìn)行數(shù)據(jù)傳輸。
鏈路口有以下功能和特點(diǎn):
?、鸥麈溌房诳梢元?dú)立工作或同時(shí)工作;
?、奇溌窋?shù)據(jù)可以打包成32位或48位數(shù)據(jù),可以被處理器核訪問,可以與片內(nèi)存儲(chǔ)器進(jìn)行DMA傳送;
?、峭獠恐鳈C(jī)可以直接訪問鏈路口;
?、染哂须p緩沖的發(fā)送和接收寄存器;
?、煽赏ㄟ^時(shí)鐘/確認(rèn)信號(hào)在鏈路口通信時(shí)握手,每個(gè)鏈路口均可收/發(fā)數(shù)據(jù),并分別有一個(gè)DMA通道支持;
⑹利用鏈路連接可以組成一維到多維的各種形式處理器網(wǎng)絡(luò)。
鏈路口有三種中斷形式:
?、臘MA使能時(shí),DMA完成后將產(chǎn)生一個(gè)可屏蔽中斷;
⑵DMA禁止時(shí),處理器核可以對(duì)存儲(chǔ)器映射的LBUF進(jìn)行讀寫,當(dāng)接收緩沖不空或發(fā)送緩沖不滿時(shí),可產(chǎn)生可屏蔽中斷;
?、钱?dāng)外部設(shè)備訪問一個(gè)未指定的鏈路口,或者訪問一個(gè)已指定但對(duì)應(yīng)LBUF被禁止的鏈路口時(shí),將產(chǎn)生可屏蔽的LSRQ中斷。
鏈路口有三個(gè)重要的寄存器:LAR寄存器、LCTL寄存器、LCOM寄存器,它們都是32位寄存器。LAR寄存器(3x~3x+2位)代表了LBUFx的指定鏈路口,x取0~5,其它位保留。LCTL寄存器主要用來對(duì)各個(gè)LBUF進(jìn)行設(shè)置(是否使能、是否用DMA方式、是否用鏈?zhǔn)紻MA、發(fā)送還是接收數(shù)據(jù))。LCOM寄存器包含每個(gè)LBUF的狀態(tài)位(空還是滿),設(shè)置各LBUF傳送數(shù)據(jù)的速率以及其它功能。
ADSP2106X有6個(gè)獨(dú)立的鏈路緩沖LBUF5~0,每個(gè)LBUF由一個(gè)內(nèi)部寄存器和一個(gè)外部寄存器組成的2級(jí)FIFO構(gòu)成。當(dāng)LBUF用于發(fā)送時(shí),內(nèi)部寄存器接收片內(nèi)存儲(chǔ)器送來的數(shù)據(jù),外部寄存器將數(shù)據(jù)字展開成4位碼,并且最高位先發(fā)送。當(dāng)DMA或處理核送來的數(shù)據(jù)占滿這2級(jí)FIFO時(shí),將送出一個(gè)“滿”標(biāo)志。每當(dāng)一個(gè)字展開發(fā)送后,F(xiàn)IFO中將空出一個(gè)位置并發(fā)出一個(gè)DMA請(qǐng)求。當(dāng)FIFO空時(shí),LxCLK無效。當(dāng)LBUF用于接收時(shí),外部寄存器用于數(shù)據(jù)打包,然后數(shù)據(jù)經(jīng)內(nèi)部寄存器以DMA方式送到片內(nèi)存儲(chǔ)器。通過鏈路指定寄存器LAR確定LBUF5~0與LINK5~0的連接關(guān)系。存儲(chǔ)器之間傳送數(shù)據(jù)時(shí)可以把一個(gè)LINK指定給兩個(gè)LBUF,利用DMA通信。
直接數(shù)據(jù)傳輸(DMA)可以承擔(dān)數(shù)據(jù)傳輸任務(wù)而無需運(yùn)算控制單元干預(yù),從而提高了程序執(zhí)行效率。ADSP2106X提供了10條DMA通道,其中只有LBUF0~3支持二維DMA(即以行主模式訪問一個(gè)二維陣列元素)。LBUF5~0與6個(gè)DMA通道的對(duì)應(yīng)關(guān)系如下:
DMA通道1 鏈路緩沖LBUF0(與串口1接收共享)
DMA通道3 鏈路緩沖LBUF1(與串口1發(fā)送共享)
DMA通道4 鏈路緩沖LBUF2
DMA通道5 鏈路緩沖LBUF3
DMA通道6 鏈路緩沖LBUF4(與外部口0 EPB0共享)
DMA通道7 鏈路緩沖LBUF5(與外部口1 EPB1共享)
2 鏈路口的設(shè)置及應(yīng)用中需要注意的問題
對(duì)于多DSP系統(tǒng),為了克服多處理器之間占用總線的瓶頸問題,增強(qiáng)處理器之間的通信能力,一般利用各處理器的鏈路口兩兩互聯(lián)進(jìn)行高速、點(diǎn)到點(diǎn)通信。處理器間的數(shù)據(jù)連接可以根據(jù)需要進(jìn)行設(shè)置,多個(gè)鏈路口數(shù)據(jù)通路可以同時(shí)并行工作而互不干擾。每個(gè)鏈路口的LxCLK和LxACK提供了處理器之間進(jìn)行異步數(shù)據(jù)傳輸?shù)奈帐中盘?hào)。因?yàn)椴捎面溌房谕ㄐ?,所以允許發(fā)送和接收端的長(zhǎng)距離互聯(lián)。鏈路口采用的是自同步方式,這樣時(shí)鐘和數(shù)據(jù)均只有相對(duì)延時(shí),不存在絕對(duì)延時(shí),這對(duì)印制板布線很重要。
要利用鏈路口進(jìn)行通信,首先必須對(duì)鏈路口及DMA寄存器進(jìn)行正確的設(shè)置。一般的DMA設(shè)置是:對(duì)DMA參數(shù)寄存器的起始地址IIx、地址修正IMx及傳輸次數(shù)Cx進(jìn)行設(shè)置,然后設(shè)置相應(yīng)的DMA控制器中的DMA使能位,這樣就啟動(dòng)了DMA。設(shè)置鏈路口操作時(shí),應(yīng)按照LAR、LCOM、LCTL的次序設(shè)置寄存器,在對(duì)LAR重新指定前,必須禁止鏈路口所要指定的LBUF,一旦設(shè)置LCTL,就啟動(dòng)了DMA。如果已打開中斷服務(wù)程序屏蔽位,則收/發(fā)數(shù)據(jù)完后就進(jìn)入相應(yīng)的LBUF的中斷服務(wù)程序。在鏈路口中斷服務(wù)程序中,通過檢驗(yàn)LCOM的相應(yīng)位判斷收/發(fā)數(shù)據(jù)是否完成,進(jìn)而利用中斷服務(wù)程序來完成其它功能。要注意的是,在中斷服務(wù)程序開始,要啟動(dòng)備用寄存器,退出時(shí)一定關(guān)閉。也就是說在中斷服務(wù)程序中使用備用寄存器,以保護(hù)正常程序中的寄存器。
如果傳輸?shù)臄?shù)據(jù)在內(nèi)存中不是一段數(shù)據(jù),而是多段數(shù)據(jù),就可以利用鏈?zhǔn)紻MA。先禁止鏈路口所要指定的LBUF,對(duì)LAR指定,依次設(shè)置LCOM和LCTL(置LxCHEN位為1),向CP寄存器寫入DMA控制塊(每個(gè)控制塊包含了相應(yīng)收/發(fā)數(shù)據(jù)段的信息)在內(nèi)存中的首地址,就可啟動(dòng)鏈?zhǔn)紻MA;而向CP寫入0則禁止鏈?zhǔn)紻MA。當(dāng)前DMA完成后,由DMA控制器自動(dòng)裝入下一套參數(shù),放在存儲(chǔ)器中的(DMA)參數(shù)寄存器,建立下一個(gè)DMA。CP的位17為1時(shí)表示當(dāng)前DMA完成后產(chǎn)生一個(gè)中斷請(qǐng)求。DMA參數(shù)有4個(gè):
IIx 地址(存儲(chǔ)器起始地址)
IMx 地址修改量
Cx 計(jì)數(shù)指針
CPx 鏈指針
它們?cè)趦?nèi)存中的位置關(guān)系如圖2所示。
鏈?zhǔn)紻MA方式只是對(duì)同一個(gè)LBUF口而言,多個(gè)LBUF不存在相互之間的鏈?zhǔn)紻MA的情況。
如果兩個(gè)鏈路口之間是單次傳輸數(shù)據(jù),那么先設(shè)置接收方DMA還是先設(shè)置發(fā)送方DMA都沒關(guān)系;但是,如果是多次循環(huán)的收發(fā)數(shù)據(jù),一定要保證接收方的DMA設(shè)置早于發(fā)送方DMA,否則每次傳輸數(shù)據(jù)時(shí)都會(huì)丟掉前兩個(gè)32位字。這是因?yàn)榘l(fā)送方一旦準(zhǔn)備好,就往接收方的緩存預(yù)先打入兩個(gè)32位字。而當(dāng)接收方設(shè)置DMA接收數(shù)據(jù)時(shí),首先要清除這個(gè)將要用到的緩存,因此這兩個(gè)32位字就丟掉了。在實(shí)際DMA傳輸數(shù)據(jù)過程中,一定不能對(duì)正在用的LBUF進(jìn)行其它操作。
當(dāng)鏈路口禁止時(shí),其數(shù)據(jù)線LxDAT3~0及LxCLK、LxACK都是三態(tài)。為了允許收發(fā)雙方在被使能的時(shí)間上有先后,在鏈路口禁止時(shí)要對(duì)LPDPD清0,以使LxDAT3~0及LxCLK、LxACK被內(nèi)部下拉(50kΩ)。要注意的是,這些信號(hào)線如果懸空,則必須用內(nèi)部或外部下拉電阻。
通過LINK口對(duì)DSP進(jìn)行程序加載,一般用host(主機(jī))或EPROM加載模式。
3 鏈路口應(yīng)用實(shí)例分析
筆者在實(shí)際工作中曾用到某型雷達(dá)信號(hào)處理系統(tǒng)。該系統(tǒng)包括4塊運(yùn)算板和一塊后處理板,這5塊板子結(jié)構(gòu)完全相同。單塊DSP板包括20片ADSP2106X,同時(shí)處理同一個(gè)周期的4個(gè)通道(和通道、輔助通道1、輔助通道2和差通道)的數(shù)據(jù),每5片處理一個(gè)通道,4個(gè)通道連線關(guān)系原則上基本相同。實(shí)際工作中根據(jù)重頻來改變運(yùn)算板的個(gè)數(shù),運(yùn)算板處理完數(shù)據(jù)通過鏈路口分時(shí)向后處理板傳送數(shù)據(jù)。因?yàn)樵趯?shí)際中將出現(xiàn)多個(gè)鏈路口同時(shí)工作,為了避免各鏈路口工作時(shí)之間的高頻干擾,對(duì)印制板設(shè)計(jì)的要求非常高。限于篇幅,下面只給出和通道的原理框圖,如圖3所示。
LINK0和LINK3分別接收輔助通道的數(shù)據(jù),LINK2和LINK5把處理后的數(shù)據(jù)傳送到后處理板,4塊板子分時(shí)向后處理板匯總數(shù)據(jù)。通過調(diào)試發(fā)現(xiàn),在同一塊運(yùn)算板內(nèi)部,各鏈路口之間的數(shù)據(jù)以80MHz的速率傳送(系統(tǒng)時(shí)鐘工作頻率為40MHz)時(shí),同時(shí)工作,相互之間幾乎沒有干擾,可以保證數(shù)據(jù)傳送的準(zhǔn)確性,大大提高了并行傳輸?shù)哪芰?。而?塊運(yùn)算板和后處理板之間傳送數(shù)據(jù)(即板子之間傳送數(shù)據(jù)),如果采取80MHz的速率同時(shí)傳送,則相互之間干擾比較大,很難保證傳輸?shù)恼_性;用1倍速(40MHz)的速率傳送就可減少干擾,而且在接收板(即后處理板)鏈路口的握手信號(hào)上采取加濾波電容或下拉電阻的措施可以減少信號(hào)中的毛刺。本系統(tǒng)本來設(shè)計(jì)為同時(shí)由和通道、輔助通道1和差通道向后處理板傳送數(shù)據(jù),但實(shí)際工作中為了保證數(shù)據(jù)的正確性,在滿足要求的情況下,把輔助1通道的數(shù)據(jù)通過鏈路口傳送到和通道,再由和通道把數(shù)據(jù)發(fā)送出去,這樣減少了用于傳送數(shù)據(jù)的鏈路口的個(gè)數(shù),數(shù)據(jù)可以正確地傳輸。鏈路口之間握手信號(hào)線采用電纜連接(一般用雙絞線)。目前本系統(tǒng)已在某型雷達(dá)中得到了很好的應(yīng)用。
工程實(shí)踐表明,并行多DSP系統(tǒng)中充分利用鏈路口,可在保證數(shù)據(jù)傳輸可靠性的同時(shí),克服多處理器之間占用總線的瓶頸問題,增強(qiáng)了處理器之間的通信能力。