隨著科技的進步,對DSP 的處理速度以及相互之間的通信速度要求越來越高。ADI 的TS201 是目前業(yè)界性能最高的DSP 處理器之一,具有極強的數(shù)據(jù)處理能力和豐富的硬件資源, 其主頻可高達600MHz ,總體性能可以達到3GFLOPS 或者12GOPS ,外部數(shù)據(jù)通信速度就成為發(fā)揮其性能的瓶頸。為了配合發(fā)揮其強大的處理能力,TS201 專門為高速通信設(shè)計了基于LVDS 技術(shù)的LinkPort 口。LVDS 是一種小振幅差分信號技術(shù),使用非常小的幅度信號(350mV) 通過一對差分PCB 走線來傳輸數(shù)據(jù),在兩條平行的差分信號上流經(jīng)的電流和電壓幅度相反,噪聲同時耦合到兩條線上,于是噪聲被抵消。LVDS差分信號技術(shù)降低了對噪聲的關(guān)注。TS201 使用LinkPort 進行高速通信,解決了TS201 之間的通信瓶頸問題,但無法和需要高速通信的實時系統(tǒng)之間實現(xiàn)連接。FPGA 具有接口靈活,硬件設(shè)計軟件化的功能,可以方便的實現(xiàn)各種數(shù)據(jù)接口和協(xié)議的對接。本文介紹了用FPGA 與DSP 的LinkPort 的對接原理和實際應(yīng)用,在實時系統(tǒng)和TS201 之間搭起了一條高速通道。
1 LinkPort 介紹
TS201 上有4 個LinkPort 口,每個LinkPort 口有24 根線,包含收發(fā)兩個模塊,每個模塊中包含了5對差分?jǐn)?shù)據(jù)線和兩個控制線,分別是LxDATO3 - 0P ,LxDATO3 - 0N , LxCLKOUTP , LxCLKOUTN , LxACKI ,LxBCMPO , LxDATI3 - 0P , LxDATI3 - 0N , LxCLKINP ,LxCLKINN , LxACKO , LxBCMPI。其中接收和發(fā)送數(shù)據(jù)的數(shù)據(jù)線以及時鐘線都是使用LVDS ,這樣有利于實現(xiàn)高速的數(shù)據(jù)傳輸,在應(yīng)用中,DSP 之間的Link2 Port 傳輸數(shù)據(jù)可高達每對線500MHz。
LinkPort 通信協(xié)議:LinkPort 口發(fā)送和接收數(shù)據(jù)的邏輯是很直接的,但是通過采用LVDS 技術(shù),可以運行在很高的速度上。TS201 處理器所使用的Link2 Port 協(xié)議的一個簡化說明如圖1 所示。
數(shù)據(jù)幀的開始是由LinkPort 時鐘的上升沿來指示的,在時鐘的上升沿和下降沿分別傳送數(shù)據(jù),時鐘結(jié)束,則數(shù)據(jù)傳送也停止。所以LinkPort 口上的時鐘是不連續(xù)的。TS201 的LinkPort 發(fā)送數(shù)據(jù)是以128bit 為基本單位的,所以一次發(fā)送數(shù)據(jù)至少需要16 個時鐘周期來完成。
2 在FPGA 中實現(xiàn)LinkPort 口
Xilinx 的Virtex - II 系列的FPGA 是一款高性能,資源豐富的產(chǎn)品,它支持和TS201 DSP 之間的LinkPort 互聯(lián)。由于LinkPort 口具有收發(fā)兩個模塊,所以在FPGA 中要實現(xiàn)和LinkPort 口的對接,需要在其內(nèi)部實現(xiàn)收發(fā)兩個模塊來分別和DSP 的LinkPort 口相對應(yīng)。
2. 1 FPGA 中的時鐘以及DCM
要在FPGA 中實現(xiàn)LinkPort 口的收發(fā)功能,就必須要進行復(fù)雜的時序控制,Virtex 系列的FPGA 中提供了功能強大的DCM(數(shù)字時鐘管理器) 模塊,它可以實現(xiàn)延遲鎖相環(huán),數(shù)字頻率合成器,數(shù)字移相器,數(shù)字?jǐn)U頻。在LinkPort 的實現(xiàn)中,至少要用到兩個DCM,其中一個DCM 作為延遲鎖相環(huán),另一個作為移相器。利用這兩個DCM 模塊,可以給LinkPort 的實現(xiàn)提供同頻率的,相位分別是0 度,90 度,180 度和270 度的時鐘供LinkPort 口實現(xiàn)的時候使用。
FPGA中實現(xiàn)LinkPort 涉及到多個時鐘: FPGA的外部輸入時鐘,F(xiàn)PGA 的LinkPort 口的發(fā)送時鐘,F(xiàn)PGA 的LinkPort 口的接收時鐘。對于這些不同的時鐘采取了不同的處理方法。FPGA 的外部輸入時鐘是由外部的時鐘輸入管腳經(jīng)過FPGA 的全局時鐘緩沖IBUFG模塊送到DSP 內(nèi)部的DCM 模塊供內(nèi)部系統(tǒng)使用。FPGA 的LinkPort 口的接收時鐘直接使用Xilinx 所提供的差分接收模塊ibufds_lvds_25_dt 直接轉(zhuǎn)換成內(nèi)部的單端時鐘信號使用。使用這個時鐘以及它的反向時鐘來鎖定LinkPort 口上的上升沿數(shù)據(jù)和下降沿數(shù)據(jù)。LinkPort 口的發(fā)送時鐘則是由Xilinx 的FDDRRSE 模塊來實現(xiàn)的。
2. 2 LinkPort 接收模塊的設(shè)計
接收模塊首先調(diào)用FPGA 內(nèi)部的差分信號轉(zhuǎn)單端的模塊ibufds_lvds_25_dt ,把外部傳輸線上的LinkPort 口差分信號轉(zhuǎn)換成內(nèi)部的處理信號。由于LinkPort 口在LinkPort 時鐘的上升沿和下降沿分別傳送4 位的數(shù)據(jù), 同時一次LinkPort 傳送最少是
128bit 的數(shù)據(jù),也就是一次LinkPort 傳送至少需要16個LinkPort 的時鐘周期。因此需要將接收的數(shù)據(jù)進行拼裝組合并保存。為了實現(xiàn)這個功能,利用雙端口RAM采用了兩級緩沖的機制,先用8 個16 位深度的1bit 小的數(shù)據(jù)緩沖模塊RAM16X1D 將數(shù)據(jù)從LinkPort 口接收下來,然后以8bit 為單位寫到FPGA內(nèi)部內(nèi)建的一個較大的非對稱雙口RAM 模RAM16_S9_S18 中。這個小的數(shù)據(jù)緩沖區(qū)利用一個狀態(tài)機控制它的地址變化,形成一個循環(huán)的數(shù)據(jù)緩沖區(qū)。使用以下語句實現(xiàn)了一個類似乒乓緩沖的小的數(shù)據(jù)緩沖區(qū):
數(shù)據(jù)接收的時候,開始接收的數(shù)據(jù)超過8 個的時候,就開始從RAM16X1D 的這個小的數(shù)據(jù)緩沖區(qū)中讀取數(shù)據(jù)。當(dāng)接收的數(shù)據(jù)收全之后,wr_addrp =“0000”,接收停止,而rd addr 此時處于高的緩沖區(qū),這個時候程序會自動的讀取剩下的8 組數(shù)據(jù),將其送到大的數(shù)據(jù)緩沖區(qū)RAM16_S9_S18 ,保證接收的數(shù)據(jù)全部正確地放到內(nèi)部的RAM 中去,此時rdaddr 也為“0000”,接收模塊停止工作。
發(fā)送模塊的關(guān)鍵是如何控制時鐘和數(shù)據(jù)的發(fā)生以及保證他們之間的相位關(guān)系,使得在時鐘的上升沿和下降沿都可以進行數(shù)據(jù)傳輸,同時數(shù)據(jù)是穩(wěn)定的。實現(xiàn)這個功能的關(guān)鍵是使用了FPGA 內(nèi)部的帶有兩個相位相差180 度的獨立時鐘的雙數(shù)據(jù)速率的D 觸發(fā)器(FDDRRSE) 。保證數(shù)據(jù)的穩(wěn)定性是靠前面所提到的DCM模塊所提供的不同相位的時鐘信號,LinkPort 模塊發(fā)送時鐘使用90 度和270 度相位的時鐘,要發(fā)送的數(shù)據(jù)使用的是0 度和180 度的時鐘。LinkPort 發(fā)送模塊的數(shù)據(jù)和相位之間90 度的相差可以保證LinkPort 的時鐘發(fā)送時的數(shù)據(jù)是穩(wěn)定的。
FDDRRSE 模塊有一個復(fù)位輸入R ,一個置位輸入S ,一個時鐘使能輸入CE ,兩組數(shù)據(jù)和時鐘對D0與C0 和D1 與C1 ,一個數(shù)據(jù)輸出Q。復(fù)位輸入R ,當(dāng)它為高的時候,重載所有的輸入,并在時鐘(C0 或者C1) 從低到高的過程中,將Q 的輸出置為低(復(fù)位的優(yōu)先級比置位的優(yōu)先級要高) 。當(dāng)S 的輸入是高而R 的輸入是低的時候,觸發(fā)器被置位,在時鐘(C0 或者C1) 從低到高的時候輸出高電平。當(dāng)R 和S 為低,CE 為高,C0 時鐘從低到高的時候D0 上的數(shù)據(jù)加載到D 觸發(fā)器中。當(dāng)R 和S 為低,CE 為高,C1 時鐘從低到高的時候D1 上的數(shù)據(jù)加載到D 觸發(fā)器中。調(diào)用FDDRRSE 產(chǎn)生LinkPort 口的發(fā)送時鐘時,
R和S 為低, CE 為高,D0 為時鐘產(chǎn)生控制信號CLOCKOE ,D1 為低,C0 為90 度相位的時鐘txclk90 ,C1 為270 度相位的時鐘txclk90not 。正常工作的時候,在txclk90 的上升沿將D0 的clockoe 的信號輸出到lxclkout ,在txclk90not 的上升沿將D1 的低電平輸出到lxclkout 。這樣當(dāng)clockoe 為低的時候, lxclkout就一直為低,需要傳輸數(shù)據(jù)的時候,將clockce 設(shè)置為高- 這樣就可以根據(jù)需要產(chǎn)生非連續(xù)的LinkPort時鐘。
當(dāng)雙口RAM 中存在要發(fā)送的數(shù)據(jù)的時候,LinkPort 的發(fā)送模塊先從雙端口RAM 中取一個16位的數(shù)據(jù),通過內(nèi)部的時鐘控制和時序調(diào)整,將這個16 位的數(shù)據(jù)串行化成LinkPort 上傳輸?shù)? 位一組的數(shù)據(jù),這些數(shù)據(jù)分批以txclk ,txclk180 的時鐘發(fā)送到LinkPort 口,同時以txclk90 ,txclk90not 的時鐘產(chǎn)生相應(yīng)的LinkPort 時鐘。在FPGA 的輸出到管腳之前,調(diào)用FPGA 內(nèi)部的obufds_lvds_25 模塊將內(nèi)部的單端信號轉(zhuǎn)換成差分信號。
3 工程應(yīng)用及性能指標(biāo)
采用LinkPort 通訊的技術(shù)在DSP 處理板上已經(jīng)得到了應(yīng)用,該板的結(jié)構(gòu)如圖2 所示。
在這個實時處理系統(tǒng)中,利用FPGA 提供的高速LinkPort 數(shù)據(jù)接口,實現(xiàn)了雷達測速系統(tǒng)和DSP處理器之間的無縫連接,很好地滿足了應(yīng)用的要求。
要求該板上的FPGA 和DSP 之間的LinkPort 口上的時鐘能夠達到200MHz。板上的時鐘同時提供給TS201 芯片和FPGA ,使用一個DSP 的LinkPort 口和FPGA 進行測試,由于FPGA 內(nèi)部的LinkPort 接收數(shù)據(jù)是以8 位為單位進行處理,發(fā)送數(shù)據(jù)是以16 位為一組進行處理的,把LinkPort 口的接收模塊稱為rx_8 模塊,發(fā)送模塊稱為tx_16 模塊。FPGA 內(nèi)部的數(shù)據(jù)流程如圖3 所示。
經(jīng)過實際驗證, 在LinkPort 口上的時鐘達到300MHz 及300MHz 以下的頻率時可以可靠收發(fā)數(shù)據(jù)。而LinkPort 口每個時鐘可以傳送1Byte 數(shù)據(jù),也就是說FPGA 和TS201 之間的LinkPort 的通信速度已經(jīng)達到雙向2. 4GbitPs。對于目前的應(yīng)用來說已經(jīng)足夠了。
FPGA 中的接收模塊和發(fā)送模塊是可以分別使用的,通過和FPGA 內(nèi)部不同模塊進行組合以及時序控制就可以應(yīng)用到實際系統(tǒng)中,在西部某雷達測速系統(tǒng)中已經(jīng)將方案進行了實際應(yīng)用,實際應(yīng)用中FPGA 的內(nèi)部框架及接口如圖4 所示。
4 結(jié)束語
本文介紹了TS201 的LinkPort 口的協(xié)議以及在Xilinx V2Pro20 FPGA 中實現(xiàn)該協(xié)議的原理, 并給出了該方案的具體指標(biāo)和典型應(yīng)用。因為FPGA 具有很強的靈活性,可以很方便地實現(xiàn)各種數(shù)據(jù)接口格式和協(xié)議的對接,根據(jù)實際系統(tǒng)的需要實現(xiàn)FPGA 與系統(tǒng)的對接,就可以利用FPGA 和DSP 之間的LinkPort 高速通道,實現(xiàn)DSP 和系統(tǒng)之間數(shù)據(jù)交換的無縫連接。
評論