摘要:在雷達(dá)信號(hào)處理、數(shù)字圖像處理等領(lǐng)域中,信號(hào)處理的實(shí)時(shí)性至關(guān)重要。由于FPGA芯片在大數(shù)據(jù)量的底層算法處理上的優(yōu)勢(shì)及DSP芯片在復(fù)雜算法處理上的優(yōu)勢(shì),DSP+FPGA的實(shí)時(shí)信號(hào)處理系統(tǒng)的應(yīng)用越來(lái)越廣泛。ADI公司的TigerSHARC系列DSP芯片浮點(diǎn)處理性能優(yōu)越,DSP的DSP+FPGA處理系統(tǒng)正廣泛應(yīng)用于復(fù)雜的信號(hào)處理領(lǐng)域。同時(shí)在這類實(shí)時(shí)處理系統(tǒng)中,F(xiàn)PGA與DSP芯片之間數(shù)據(jù)的實(shí)時(shí)通信至關(guān)重要。
TigerSHARC系列DSP芯片與外部進(jìn)行數(shù)據(jù)通信主要有兩種方式:總線方式和鏈路口方式。鏈路口方式更適合于FPGA與DSP之間的實(shí)時(shí)通信。隨著實(shí)時(shí)信號(hào)處理運(yùn)算量的日益增加,多DSP并行處理的方式被普遍采用,它們共享總線以互相映射存儲(chǔ)空間,如果再與FPGA通過(guò)總線連接,勢(shì)必導(dǎo)致FPGA與DSP的總線競(jìng)爭(zhēng)。同時(shí)采用總線方式與FPGA通信,DSP的地址、數(shù)據(jù)線引腳很多,占用FPGA的I/O引腳資源太多。而采用鏈路口通信不但能有效緩解DSP總線上的壓力,而且傳輸速度快,與FPGA之間的連線相對(duì)也少得多,故鏈路口方式更適合于FPGA與DSP之間進(jìn)行實(shí)時(shí)數(shù)據(jù)通信。
?
1 TS101和TS201的鏈路口分析與比較
TS101和TS210都是高性能的浮點(diǎn)處理芯片,目前兩者都廣泛應(yīng)用于復(fù)雜的信號(hào)處理領(lǐng)域。TS201是繼TS101之后推出的新型芯片,核時(shí)鐘最高可達(dá)600MHz,其各類性能也相對(duì)優(yōu)于TS101,而且TS201的鏈路口采用了低壓差分信號(hào)LVDS技術(shù),功耗更低、抗噪聲性能更好。表1列出了兩種芯片鏈路口性能的詳細(xì)比較,其中TS101核時(shí)鐘工作在250MHz,TS201核時(shí)鐘工作在500MHz。
由于TS101收發(fā)端共用一個(gè)通道,所以只能實(shí)現(xiàn)半雙工通信。而TS201將收發(fā)端做成兩個(gè)獨(dú)立通道,可實(shí)現(xiàn)全雙工通信,理論上數(shù)據(jù)的傳輸速率可以提高一倍。雖然TS201的鏈路口收發(fā)通道獨(dú)立,但實(shí)際上二者的收發(fā)機(jī)制大體相同,都是靠收發(fā)緩存和移位寄存器收發(fā)數(shù)據(jù)。然而FPGA內(nèi)部的鏈路口設(shè)計(jì)不必拘泥于此,只要符合鏈路口通信協(xié)議并達(dá)成通信即可。
2 FPGA與DSP的鏈路口通信
2.1 鏈路口通信協(xié)議分析
TS101的鏈路口共有11根引腳,通過(guò)8根數(shù)據(jù)線(LxDAT[7..0],這里x可以是0、1、2或3,代表TS101或TS201的0號(hào)-3號(hào)鏈路口中的一個(gè),以下同)進(jìn)行數(shù)據(jù)傳輸,并采用3根控制線(LxCLKOUT、LxCLKIN、LxDIR)來(lái)控制數(shù)據(jù)傳輸時(shí)鐘、通信的握于和數(shù)據(jù)傳輸方向。其中LxDIR為通知鏈路口當(dāng)前工作狀態(tài)是接收或發(fā)送的輸出引腳,可懸空不用。TS201的鏈路口共24根引腳,接收和發(fā)送各12根引腳,通過(guò)LVDS形式的數(shù)據(jù)線(LxDAT_P/N[3..0])和時(shí)鐘線(LxCLK_P/N)進(jìn)行數(shù)據(jù)傳輸,并采用LxACK和LxBCMP#(‘#’代表信號(hào)低有效)來(lái)通知接收準(zhǔn)備好和數(shù)據(jù)塊傳輸結(jié)束。
采用FPGA與DSP通過(guò)鏈路口通信的關(guān)鍵是令雙方通信的握手信號(hào)達(dá)成協(xié)議,促使數(shù)據(jù)傳輸?shù)倪M(jìn)行。實(shí)際上,如果考慮TS201的LVDS信號(hào)形式已經(jīng)被轉(zhuǎn)換完畢,則TS101和TS201鏈路口傳輸?shù)臄?shù)據(jù)形式是一樣的,都是時(shí)鐘雙沿觸發(fā)的DDR數(shù)據(jù),并且每次傳輸?shù)臄?shù)據(jù)個(gè)數(shù)都是4個(gè)長(zhǎng)字(即128bit)的整數(shù)倍。鑒于以上兩種芯片鏈路口數(shù)據(jù)的共同點(diǎn),所以采用FPGA與兩類芯片通信時(shí),接收和發(fā)送的數(shù)據(jù)緩存部分的設(shè)計(jì)應(yīng)該是很相近的,只是通信握手信號(hào)部分的設(shè)計(jì)應(yīng)當(dāng)分別加以考慮。下面分別給予介紹。
2.2 基于FPGA的TS101鏈路口設(shè)計(jì)
圖1給出了FPCA與TS101進(jìn)行半雙工鏈路口通信的設(shè)計(jì)(對(duì)LxCLKOUT、LxCLKIN均以FPCA的角度來(lái)敘述),該接口由接收、控制和發(fā)送三部分組成。本設(shè)計(jì)FPGA時(shí)鐘為40MHz,TS101核時(shí)鐘上作在250MHz,鏈路口時(shí)鐘設(shè)定為DSP核時(shí)鐘的8分頻,F(xiàn)PGA與DSP的實(shí)際數(shù)據(jù)傳輸率為62.5MBps。
?。?) 接收部分:由編碼和緩存兩部分組成。由于鏈路口的數(shù)錯(cuò)是DDR形式的,不方便數(shù)據(jù)的緩存,本文采用QuartusII Megafunctions中的altddio模塊將上升沿?cái)?shù)據(jù)和下降沿?cái)?shù)據(jù)分開(kāi)。注意這個(gè)模塊的下降沿?cái)?shù)據(jù)輸出會(huì)滯后上升沿?cái)?shù)據(jù)1個(gè)時(shí)鐘周期,輸出時(shí)應(yīng)該用鏈路口時(shí)鐘信號(hào)(LxCLKIN)通過(guò)D觸發(fā)器來(lái)將數(shù)據(jù)對(duì)齊。該模塊的inclock一定要用鏈路口時(shí)鐘信號(hào)以保證數(shù)據(jù)的正確讀取,如圖2所示。又由于DSP內(nèi)部數(shù)據(jù)是32位的長(zhǎng)字,所以寫(xiě)入接收緩存前應(yīng)該用一組D觸發(fā)器將數(shù)據(jù)進(jìn)行32bit對(duì)齊,這里注意DSP鏈路口先傳輸32位數(shù)據(jù)中的低8位。
(2) 控制部分:由令牌轉(zhuǎn)換模塊和控制模塊組成,是整個(gè)設(shè)計(jì)的核心部分,完成對(duì)各部分的控制和與FPGA內(nèi)部進(jìn)行通信(通過(guò)CTL一組信號(hào))。TS101的鏈路口通信握手是靠?jī)筛鶗r(shí)鐘信號(hào)驗(yàn)證令牌指令完成,即當(dāng)發(fā)送端驅(qū)動(dòng)原本為高的LxCLKOUT信號(hào)為低電平,以此作為令牌請(qǐng)求向接收端發(fā)出。如果接收端準(zhǔn)備好接收,則接收端驅(qū)動(dòng)LxCLKIN為高;如果令牌發(fā)出6個(gè)時(shí)鐘周期后,LxCLKIN信號(hào)仍然為高,則肩動(dòng)數(shù)據(jù)傳輸(以上時(shí)鐘信號(hào)都以發(fā)送端視角分析)。本設(shè)計(jì)中,令牌轉(zhuǎn)換模塊負(fù)責(zé)驗(yàn)證令牌和發(fā)送令牌。這里要注意,由于用來(lái)驗(yàn)證令牌低電平個(gè)數(shù)的時(shí)鐘信號(hào)(PLL_32ns)是由FPGA時(shí)鐘信號(hào)(CLK)通過(guò)鎖相環(huán)倍頻得到,與DSP鏈路口時(shí)鐘異步,故驗(yàn)證令牌時(shí),當(dāng)計(jì)數(shù)器計(jì)到5個(gè)低電平時(shí)即可認(rèn)為已達(dá)成通信握手,否則可能會(huì)丟失數(shù)據(jù)。達(dá)成握手后通知控制模塊向接收或發(fā)送緩存輸出控制信號(hào),其中接收控制信號(hào)包括寫(xiě)緩存時(shí)鐘和寫(xiě)使能。發(fā)送控制信號(hào)包括讀緩存時(shí)鐘、讀使能和DSP中斷信號(hào)(DSP_IRQ),其中寫(xiě)緩存時(shí)鐘通過(guò)對(duì)鏈路口時(shí)鐘分頻得到,讀緩存時(shí)鐘由鎖相環(huán)倍頻FPGA工作時(shí)鐘得到。
?。?) 發(fā)送部分:與接收部分類似,也南編碼和緩存兩部分組成,相應(yīng)的設(shè)計(jì)基本相同,這里不作過(guò)多介紹。由于DSP鏈路口每次傳輸數(shù)據(jù)個(gè)數(shù)的最小單位是4個(gè)32位字,即8個(gè)鏈路時(shí)鐘周期,所以發(fā)送時(shí)鐘廊該每8個(gè)時(shí)鐘周期一組,以湊夠128bit,避免傳輸錯(cuò)誤,其中多余無(wú)效的數(shù)據(jù)DSP可以自行舍去。發(fā)送部分采用DSP外部中斷方式而不是鏈路口中斷方式通知DSP接收數(shù)據(jù)。
TS101的鏈路口通信協(xié)議要求鏈路口接收端在傳輸啟動(dòng)一個(gè)周期后,將其LxCLKOUT拉低,若可以繼續(xù)接收,在下一個(gè)周期再將其拉高,以此作為連接測(cè)試。實(shí)際運(yùn)行中發(fā)現(xiàn),當(dāng)FPGA接收數(shù)據(jù)時(shí),可將LxCLKOUT信號(hào)一直驅(qū)動(dòng)為高,不必做特殊的連接測(cè)試也能正確接收數(shù)據(jù)。另外,發(fā)送鏈路口數(shù)據(jù)時(shí),由于發(fā)送緩存中已經(jīng)對(duì)應(yīng)仔好了要發(fā)送的8bit數(shù)據(jù),故可以使用對(duì)FPGA時(shí)鐘信號(hào)(CLK)倍頻得到的PLL_16ns信號(hào)來(lái)讀發(fā)送緩存,讀出的數(shù)據(jù)即鏈路口發(fā)送數(shù)據(jù),再對(duì)PLL_16ns信號(hào)的下降沿分頻得到鏈路口的發(fā)送時(shí)鐘信號(hào)。
限于篇幅,本文只給出FPCA接收TS101數(shù)據(jù)的時(shí)序圖,如圖3所示。LxCLKIN、LxDAT[7..0]是DSP的鏈路口輸出時(shí)鐘和數(shù)據(jù),LxCLKOUT是FPGA的回饋準(zhǔn)備好信號(hào)。仿真中鏈路口數(shù)據(jù)采用1F-3E(十六進(jìn)制)的32個(gè)8bit數(shù)據(jù),即從2221201F到3E3D3C3B的8個(gè)32bit數(shù)據(jù);PLL_32ns信號(hào)是FPGA內(nèi)部鎖相環(huán)產(chǎn)生的與DSP鏈路口時(shí)鐘異步的32ns時(shí)鐘信號(hào),用來(lái)校驗(yàn)令牌指令;W_FIFO_EN信號(hào)足寫(xiě)緩存使能信號(hào),當(dāng)令牌驗(yàn)證后使能接收緩存;DSP_DAT信號(hào)是DSP通過(guò)鏈路門(mén)傳輸?shù)?2bit數(shù)據(jù),通過(guò)對(duì)鏈路口數(shù)據(jù)的編碼得到;W_BUF_CLK信號(hào)由鏈路口時(shí)鐘分頻處理得到,將上升沿對(duì)應(yīng)的32bit DSP數(shù)據(jù)寫(xiě)入接收緩存,完成接收過(guò)程。
2.3 基于FPGA的TS201鏈路口設(shè)計(jì)
圖4給出了FPGA與TS201進(jìn)行鏈路口通信的設(shè)計(jì)框圖。由于TS201的握手信號(hào)較多,所以相對(duì)TS101的鏈路口設(shè)計(jì)容易些。本設(shè)計(jì)FPGA時(shí)鐘50MHz,TS101核時(shí)鐘500MHz,鏈路口時(shí)鐘為DSP核時(shí)鐘的4分頻,采用4bit方式,單向?qū)嶋H數(shù)據(jù)傳輸速率為125MBps。
TS201的鏈路口數(shù)據(jù)和時(shí)鐘采LVDS信號(hào),具有速率高、功耗低、噪聲小的優(yōu)點(diǎn)。Cyclone系列芯片不僅支持LVDS信號(hào),還集成了LVDS轉(zhuǎn)換模塊,這給設(shè)計(jì)提供了很大方便。應(yīng)該注意的是,在硬件設(shè)計(jì)時(shí)LVDS信號(hào)兩極的PCB走線要匹配,并且注意匹配電阻網(wǎng)絡(luò)的接入。
TS201的鏈路口有1bit和4bit兩種傳輸方式,本文以4bit為例進(jìn)行設(shè)計(jì)。圖4給出的信號(hào)都是經(jīng)LVDS轉(zhuǎn)換后的信號(hào)。由于TS201的收發(fā)做成了兩個(gè)單獨(dú)的通道,F(xiàn)PGA的設(shè)計(jì)也應(yīng)該相應(yīng)地設(shè)計(jì)為兩個(gè)通道,真正做到全雙工通信,收發(fā)互不影響。接收與發(fā)送部分與TS101的設(shè)計(jì)基本相同,發(fā)送部分也采用外部中斷方式通知DSP接收鏈路口數(shù)據(jù)。TS201的通信握手信號(hào)有ACK和BCMP#信號(hào)。其中ACK信號(hào)用來(lái)通知接收準(zhǔn)備好,在實(shí)時(shí)信號(hào)處理中,一般不允許數(shù)據(jù)傳輸?shù)牡却蕦⑦@個(gè)信號(hào)置為準(zhǔn)備好。BCMP#信號(hào)用于通知數(shù)據(jù)塊傳輸?shù)慕Y(jié)束,當(dāng)能確定DMA傳輸數(shù)據(jù)個(gè)數(shù)時(shí),可以將此引腳懸空。
TS201鏈路口的收發(fā)機(jī)制非常相似,本文僅給出發(fā)送數(shù)據(jù)時(shí)序圖,如圖5所示。L1_IRQ是FPGA發(fā)給DSP的外部中斷,用來(lái)通知DSP收數(shù)據(jù);L1_ACKI是DSP的接收準(zhǔn)備好信號(hào);R_BUF_EN是讀發(fā)送緩存使能信號(hào);鏈路口時(shí)鐘L1_CLKOUT是以讀緩存時(shí)鐘R_CLK下降沿的二次分頻,對(duì)應(yīng)從緩存中讀出的4bit鏈路口數(shù)據(jù)L1_DA-To。注意這里讀緩存及時(shí)鐘分頻時(shí)會(huì)有納秒級(jí)的延遲。
3 DSP的相應(yīng)設(shè)置
TS101和TS201的鏈路口都配置了控制寄存器(LCTLX)和狀態(tài)奇存器(LSTATx)兩組寄存器。LCTLx用來(lái)控制鏈路口的傳輸,LSTATx用來(lái)通知鏈路口的工作狀態(tài)。TS101鏈路口時(shí)鐘頻率可以是核時(shí)鐘的8、4、3或2分頻,通過(guò)設(shè)置LCTLx中的SPD位米完成,本文設(shè)計(jì)將SPD位置000,即為核時(shí)鐘8分頻。由于TS201的接收發(fā)送通道獨(dú)立,所以其控制寄存器分為接收控制寄存器(LRCTLx)和發(fā)送控制寄存器(LTCTLx)。TS101鏈路口發(fā)送時(shí)鐘頻率可以與核時(shí)鐘相同或?yàn)槠?、2、1.5分頻,通過(guò)設(shè)置LTCTLx中SPD位來(lái)完成。本文設(shè)計(jì)將SPD位置100,即為核時(shí)鐘4分頻,并將LRCTLx/LTCTLx中(接TDSIZE位置1,設(shè)置成4bit傳輸方式。如果BCMP#信號(hào)懸空,注意一定要將LRCTLx巾RBCMPE位置0。
有兩種方法啟動(dòng)DSP的鏈路口DMA傳輸:利用鏈路中斷和利用DSP的四個(gè)外部中斷(IRQ0-IRQ3)。兩種中斷方式都需要在中斷服務(wù)程序中對(duì)DMA的TCB寄存器進(jìn)行配置來(lái)啟動(dòng)鏈路口的接收DMA通道。鑒于外部中斷的優(yōu)先級(jí)高于鏈路口中斷,可以避免數(shù)據(jù)丟失,本文設(shè)計(jì)的通信方式均以外部中斷方式通知DSP接收數(shù)據(jù)。在DMA的TCB寄存器配置過(guò)程中,為了保證程序不被其他中斷打斷,可以在中斷服務(wù)程序開(kāi)始時(shí)就把所有其他中斷屏蔽掉,存中斷服務(wù)程序返回之前再把屏蔽掉的中斷位還原。
本文對(duì)TigerSHARC系列的兩種典型DSP芯片的鏈路口進(jìn)行了分析和比較,并給出了FPGA與這兩種DSP芯片進(jìn)行鏈路口通倍的具體方法。在FPGA內(nèi)部實(shí)現(xiàn)了DSP鏈路口的設(shè)計(jì),同時(shí)給出了DSP進(jìn)行鏈路口通信的具體設(shè)置方法。由于實(shí)時(shí)處理中數(shù)據(jù)的重發(fā)會(huì)嚴(yán)重影響處理的實(shí)時(shí)性,故本文的鏈路口通信設(shè)計(jì)沒(méi)有對(duì)所傳輸?shù)臄?shù)據(jù)進(jìn)行校驗(yàn)。本文給出的基于FPGA路口設(shè)計(jì)具有很強(qiáng)的通用性,可以應(yīng)用于基于TS101/TS201的多種應(yīng)用系統(tǒng)中,提高系統(tǒng)內(nèi)部的通信能力,也可用于板間DSP的數(shù)據(jù)傳輸,提高系統(tǒng)外部的通信能力。
評(píng)論
查看更多