基于FPGA與DSP的高速通信接口設計與實(shí)現
(2) 控制部分:由令牌轉換模塊和控制模塊組成,是整個(gè)設計的核心部分,完成對各部分的控制和與FPGA內部進(jìn)行通信(通過(guò)CTL一組信號)。TS101的鏈路口通信握手是靠?jì)筛鶗r(shí)鐘信號驗證令牌指令完成,即當發(fā)送端驅動(dòng)原本為高的LxCLKOUT信號為低電平,以此作為令牌請求向接收端發(fā)出。如果接收端準備好接收,則接收端驅動(dòng)LxCLKIN為高;如果令牌發(fā)出6個(gè)時(shí)鐘周期后,LxCLKIN信號仍然為高,則肩動(dòng)數據傳輸(以上時(shí)鐘信號都以發(fā)送端視角分析)。本設計中,令牌轉換模塊負責驗證令牌和發(fā)送令牌。這里要注意,由于用來(lái)驗證令牌低電平個(gè)數的時(shí)鐘信號(PLL_32ns)是由FPGA時(shí)鐘信號(CLK)通過(guò)鎖相環(huán)倍頻得到,與DSP鏈路口時(shí)鐘異步,故驗證令牌時(shí),當計數器計到5個(gè)低電平時(shí)即可認為已達成通信握手,否則可能會(huì )丟失數據。達成握手后通知控制模塊向接收或發(fā)送緩存輸出控制信號,其中接收控制信號包括寫(xiě)緩存時(shí)鐘和寫(xiě)使能。發(fā)送控制信號包括讀緩存時(shí)鐘、讀使能和DSP中斷信號(DSP_IRQ),其中寫(xiě)緩存時(shí)鐘通過(guò)對鏈路口時(shí)鐘分頻得到,讀緩存時(shí)鐘由鎖相環(huán)倍頻FPGA工作時(shí)鐘得到。
(3) 發(fā)送部分:與接收部分類(lèi)似,也南編碼和緩存兩部分組成,相應的設計基本相同,這里不作過(guò)多介紹。由于DSP鏈路口每次傳輸數據個(gè)數的最小單位是4個(gè)32位字,即8個(gè)鏈路時(shí)鐘周期,所以發(fā)送時(shí)鐘廊該每8個(gè)時(shí)鐘周期一組,以湊夠128bit,避免傳輸錯誤,其中多余無(wú)效的數據DSP可以自行舍去。發(fā)送部分采用DSP外部中斷方式而不是鏈路口中斷方式通知DSP接收數據。
TS101的鏈路口通信協(xié)議要求鏈路口接收端在傳輸啟動(dòng)一個(gè)周期后,將其LxCLKOUT拉低,若可以繼續接收,在下一個(gè)周期再將其拉高,以此作為連接測試。實(shí)際運行中發(fā)現,當FPGA接收數據時(shí),可將LxCLKOUT信號一直驅動(dòng)為高,不必做特殊的連接測試也能正確接收數據。另外,發(fā)送鏈路口數據時(shí),由于發(fā)送緩存中已經(jīng)對應仔好了要發(fā)送的8bit數據,故可以使用對FPGA時(shí)鐘信號(CLK)倍頻得到的PLL_16ns信號來(lái)讀發(fā)送緩存,讀出的數據即鏈路口發(fā)送數據,再對PLL_16ns信號的下降沿分頻得到鏈路口的發(fā)送時(shí)鐘信號。
限于篇幅,本文只給出FPCA接收TS101數據的時(shí)序圖,如圖3所示。LxCLKIN、LxDAT[7..0]是DSP的鏈路口輸出時(shí)鐘和數據,LxCLKOUT是FPGA的回饋準備好信號。仿真中鏈路口數據采用1F~3E(十六進(jìn)制)的32個(gè)8bit數據,即從2221201F到3E3D3C3B的8個(gè)32bit數據;PLL_32ns信號是FPGA內部鎖相環(huán)產(chǎn)生的與DSP鏈路口時(shí)鐘異步的32ns時(shí)鐘信號,用來(lái)校驗令牌指令;W_FIFO_EN信號足寫(xiě)緩存使能信號,當令牌驗證后使能接收緩存;DSP_DAT信號是DSP通過(guò)鏈路門(mén)傳輸的32bit數據,通過(guò)對鏈路口數據的編碼得到;W_BUF_CLK信號由鏈路口時(shí)鐘分頻處理得到,將上升沿對應的32bit DSP數據寫(xiě)入接收緩存,完成接收過(guò)程。
2.3 基于FPGA的TS201鏈路口設計
圖4給出了FPGA與TS201進(jìn)行鏈路口通信的設計框圖。由于TS201的握手信號較多,所以相對TS101的鏈路口設計容易些。本設計FPGA時(shí)鐘50MHz,TS101核時(shí)鐘500MHz,鏈路口時(shí)鐘為DSP核時(shí)鐘的4分頻,采用4bit方式,單向實(shí)際數據傳輸速率為125MBps。
TS201的鏈路口數據和時(shí)鐘采LVDS信號,具有速率高、功耗低、噪聲小的優(yōu)點(diǎn)。Cyclone系列芯片不僅支持LVDS信號,還集成了LVDS轉換模塊,這給設計提供了很大方便。應該注意的是,在硬件設計時(shí)LVDS信號兩極的PCB走線(xiàn)要匹配,并且注意匹配電阻網(wǎng)絡(luò )的接入。
TS201的鏈路口有1bit和4bit兩種傳輸方式,本文以4bit為例進(jìn)行設計。圖4給出的信號都是經(jīng)LVDS轉換后的信號。由于TS201的收發(fā)做成了兩個(gè)單獨的通道,FPGA的設計也應該相應地設計為兩個(gè)通道,真正做到全雙工通信,收發(fā)互不影響。接收與發(fā)送部分與TS101的設計基本相同,發(fā)送部分也采用外部中斷方式通知DSP接收鏈路口數據。TS201的通信握手信號有ACK和BCMP#信號。其中ACK信號用來(lái)通知接收準備好,在實(shí)時(shí)信號處理中,一般不允許數據傳輸的等待,故將這個(gè)信號置為準備好。BCMP#信號用于通知數據塊傳輸的結束,當能確定DMA傳輸數據個(gè)數時(shí),可以將此引腳懸空。
TS201鏈路口的收發(fā)機制非常相似,本文僅給出發(fā)送數據時(shí)序圖,如圖5所示。L1_IRQ是FPGA發(fā)給DSP的外部中斷,用來(lái)通知DSP收數據;L1_ACKI是DSP的接收準備好信號;R_BUF_EN是讀發(fā)送緩存使能信號;鏈路口時(shí)鐘L1_CLKOUT是以讀緩存時(shí)鐘R_CLK下降沿的二次分頻,對應從緩存中讀出的4bit鏈路口數據L1_DA-To。注意這里讀緩存及時(shí)鐘分頻時(shí)會(huì )有納秒級的延遲。
3 DSP的相應設置
TS101和TS201的鏈路口都配置了控制寄存器(LCTLX)和狀態(tài)奇存器(LSTATx)兩組寄存器。LCTLx用來(lái)控制鏈路口的傳輸,LSTATx用來(lái)通知鏈路口的工作狀態(tài)。TS101鏈路口時(shí)鐘頻率可以是核時(shí)鐘的8、4、3或2分頻,通過(guò)設置LCTLx中的SPD位米完成,本文設計將SPD位置000,即為核時(shí)鐘8分頻。由于TS201的接收發(fā)送通道獨立,所以其控制寄存器分為接收控制寄存器(LRCTLx)和發(fā)送控制寄存器(LTCTLx)。TS101鏈路口發(fā)送時(shí)鐘頻率可以與核時(shí)鐘相同或為其4、2、1.5分頻,通過(guò)設置LTCTLx中SPD位來(lái)完成。本文設計將SPD位置100,即為核時(shí)鐘4分頻,并將LRCTLx/LTCTLx中(接TDSIZE位置1,設置成4bit傳輸方式。如果BCMP#信號懸空,注意一定要將LRCTLx巾RBCMPE位置0。
有兩種方法啟動(dòng)DSP的鏈路口DMA傳輸:利用鏈路中斷和利用DSP的四個(gè)外部中斷(IRQ0~IRQ3)。兩種中斷方式都需要在中斷服務(wù)程序中對DMA的TCB寄存器進(jìn)行配置來(lái)啟動(dòng)鏈路口的接收DMA通道。鑒于外部中斷的優(yōu)先級高于鏈路口中斷,可以避免數據丟失,本文設計的通信方式均以外部中斷方式通知DSP接收數據。在DMA的TCB寄存器配置過(guò)程中,為了保證程序不被其他中斷打斷,可以在中斷服務(wù)程序開(kāi)始時(shí)就把所有其他中斷屏蔽掉,存中斷服務(wù)程序返回之前再把屏蔽掉的中斷位還原。
本文對TigerSHARC系列的兩種典型DSP芯片的鏈路口進(jìn)行了分析和比較,并給出了FPGA與這兩種DSP芯片進(jìn)行鏈路口通倍的具體方法。在FPGA內部實(shí)現了DSP鏈路口的設計,同時(shí)給出了DSP進(jìn)行鏈路口通信的具體設置方法。由于實(shí)時(shí)處理中數據的重發(fā)會(huì )嚴重影響處理的實(shí)時(shí)性,故本文的鏈路口通信設計沒(méi)有對所傳輸的數據進(jìn)行校驗。本文給出的基于FPGA路口設計具有很強的通用性,可以應用于基于TS101/TS201的多種應用系統中,提高系統內部的通信能力;也可用于板間DSP的數據傳輸,提高系統外部的通信能力。
評論