ADSP TS201鏈路口通信的FPGA實現(xiàn)
O 引 言
隨著電子技術(shù)的飛速發(fā)展,在實際應(yīng)用中數(shù)據(jù)高速傳輸有著越來越高的要求,鏈路口為數(shù)據(jù)傳送提供了高速、獨立的通信機制,得到廣泛應(yīng)用。AD公司生產(chǎn)的TS201 DSP就具備這種端口。為了使不具備此接口的器件同樣也能通過鏈路口與TS201進(jìn)行高速通信,引入FPGA進(jìn)行設(shè)計。
FPGA器件因其集成度高、功能強大、現(xiàn)場可編程等優(yōu)點被廣泛應(yīng)用于各種場合。通過在FPGA上參照鏈路口通信協(xié)議編寫VHDL程序,完成數(shù)據(jù)傳送方式的轉(zhuǎn)換,實現(xiàn)此接口與其他設(shè)備通信,以滿足系統(tǒng)的高速通信要求。
本文設(shè)計了一種基于Xilinx公司Virtex4系列的FPGA的128位并行數(shù)據(jù)與ADSP TS201的鏈路口通信方式。
l ADSP TS20l鏈路口協(xié)議
ADSP TS201有4個鏈路口均采用LVDS(Low
Voltage Differential Signaling)電路,每個鏈路口都是由4位雙向差分?jǐn)?shù)據(jù)線和另外3個控制信號構(gòu)成。接收控制信號包括:Lxclkinp/n,Lxacko,Lxbcmpi;發(fā)送控制信號包括:Lxclkoutp/n,Lxacki和Lxbcmpo。其中,Lxclkoutp/n和Lxclkinp/n用于描述輸出或輸入信號的時鐘,Lxacko和Lxacki則表示接收端發(fā)出的信號和發(fā)送端接收的信號表明是否可以繼續(xù)發(fā)送,Lxbcmpi和Lxbcmpo說明塊傳輸已經(jīng)完成。鏈路口每個方向(Rx或Tx)均可通過1位或4位數(shù)據(jù)總線通信,發(fā)送端發(fā)送數(shù)據(jù)到外部設(shè)備,接收通端從外部設(shè)備獲取數(shù)據(jù)。這里主要討論4位數(shù)據(jù)總線通信模式的具體實現(xiàn)。
在鏈路口通訊協(xié)議的時序上采用一些通用規(guī)則,具體規(guī)則如下:
①第一個數(shù)據(jù)(1位或4位)必須在鏈路口時鐘(Lxclkoutp)的第一個上升沿發(fā)送。
②后一個數(shù)據(jù)(1位或4位)必須在鏈路口時鐘(Lxclkoutp)最后一個下降沿發(fā)送。
③當(dāng)鏈路口停止收發(fā)后Lxclkoutp被置為低。
④每次至少傳送4個字(128位)。傳送需要用16個名車略口周期,如圖1所示。
當(dāng)Lxacki被置為高,即接收緩沖是空的,發(fā)送通道被初始化,發(fā)送端可以繼續(xù)發(fā)送數(shù)據(jù)。如圖2所示,第一個數(shù)據(jù)在第一個Lxclkoutp上升沿有效,最后一個數(shù)據(jù)在最后一個鏈路口時鐘下降沿之前發(fā)送。當(dāng)鏈路口停止時Lxclkoutp被置為低。
圖3表示當(dāng)Lxacki被置為低時,說明接收端沒有準(zhǔn)備好接收更多數(shù)據(jù)的情況。此時若仍有數(shù)據(jù)傳送,則會造成數(shù)據(jù)的丟失。
當(dāng)發(fā)送數(shù)據(jù)長度可變時發(fā)送方用Lxbcmpo信號通告接收數(shù)據(jù)塊傳輸已完成。Lxbcmpo與接收端的Lxbcmpi輸入信號連接,當(dāng)接收端識別該信息,就通知DMA通道數(shù)據(jù)塊傳送完畢。
Lxbcmpo信號通過在塊的最后4個字傳輸?shù)牡谝粋€Lxclkout上升沿變低,指示塊傳輸完成。而在同一4個字的最后一個Lxclkout下降沿置位。若LTCTLx寄存器中的TBCMPE位被清除或當(dāng)鏈路口傳輸由處理器核執(zhí)行,Lxbcmpo無效。
[!--empirenews.page--]
2 模塊建立與優(yōu)化
ADSP TS201的鏈路口采用的是獨立的發(fā)送和接收通道,因此對應(yīng)的FPGA也需要采用不同的接收電路和發(fā)送電路。
無論是接收還是發(fā)送均由兩部分組成:接收/發(fā)送緩沖和接收/發(fā)送模塊。接收模塊主要是用于接口和數(shù)據(jù)的拆包處理,發(fā)送模塊是用于數(shù)據(jù)接收和打包處理。接收/發(fā)送緩沖則是用來分別配合接收/發(fā)送模塊進(jìn)行數(shù)據(jù)緩沖,并實現(xiàn)數(shù)據(jù)傳輸功能。
2.1 接收電路
接收模塊:接收到由鏈路口4位數(shù)據(jù)總線送出的數(shù)據(jù)差分信號Lxdatap/n和控制差分信號Lxclk p/n以后不能直接拆包處理,需要將原來的差分信號轉(zhuǎn)換成完整信號、Lxdata和Lxclk,才可進(jìn)入雙倍數(shù)據(jù)速率器(DDR)寄存,此寄存器由時鐘信號clkin(與Lxclk同頻率)控制。由于是4位數(shù)據(jù)總線同時串行傳送數(shù)據(jù),其具體的數(shù)據(jù)排序如圖4所示。
可見,每一路傳送的數(shù)據(jù)均不是連續(xù)的,且都按模4余數(shù)分配。為了方便數(shù)據(jù)并行送出,需要將數(shù)據(jù)進(jìn)行拆包整理。每個clkin周期收到8位數(shù)據(jù),將此按位號由大到小的順序整理,并放入mid(7:O)中。其間增加一級觸發(fā)器作為緩沖。
接收緩沖:此部分主要由狀態(tài)機和FIFO構(gòu)成,其中狀態(tài)機主要控制FIFO寫命令的產(chǎn)生,由鏈路口時鐘Lxclk和時鐘信號clkin共同產(chǎn)生,即當(dāng)Lxclk產(chǎn)生第一個上升沿時計數(shù)器開始計數(shù)從O~15,每次計數(shù)就會將相應(yīng)的FIFO寫許可we d置為有效。將128位數(shù)據(jù)每8位為一組,分別送入16個8位F1FO中,由外部的FIFO_oe讀信號和sysclk時鐘信號控制128位數(shù)據(jù)并行讀出。即將FIFO_oe信號同時接到16個FIFO上,當(dāng)FIFO_oe有效時,從16個FIFO中同時讀出數(shù)據(jù)。并根據(jù)FIFO存儲狀態(tài)發(fā)送Lxacko信號和fuiIflag信號,若FIF0不滿則將Lxacko信號置為1(高有效)允許發(fā)送端繼續(xù)通過鏈路口發(fā)送數(shù)據(jù);否則Lxacko置為O。
其中,F(xiàn)IFO 8由Core generator直接生成,是異步8位先進(jìn)先出存儲器。下面涉及的FIFO 16,F(xiàn)IFO 32均這樣生成。接收(Rx)流程圖如圖5所示。
綜合后此電路的主時鐘Clkin頻率最快可達(dá)到368 MHz。由于一個FIFO 8就占用了一個18 Kb的嵌入式FIFO資源,而16個FIFO就占據(jù)了16個塊的資源,這不僅造成了資源的浪費,還增加了布局布線所需要的時間。因此,為了優(yōu)化結(jié)構(gòu),增加一級寄存器,擴展數(shù)據(jù)的位數(shù),使得數(shù)據(jù)在未進(jìn)入FIFO前就已得到處理,由原來的8位數(shù)據(jù)mid連成16位數(shù)據(jù)Data,再送入16位的FIFO 16中。優(yōu)化后,F(xiàn)IFO 16的使用率由原來的22%減少到11%,大大減少了線上延遲。綜合此電路的主時鐘clkin頻率最高可實現(xiàn)500 MHz。具體結(jié)構(gòu)如圖6所示。
2.2 發(fā)送電路[!--empirenews.page--]
發(fā)送模塊:當(dāng)外部接收到128位并行數(shù)據(jù)Datain(127:0)及FIFO寫控制信號Datan_we后,將數(shù)據(jù)按以下規(guī)則重新組合排序:
數(shù)據(jù)整理后,同時送入4個32位FIFO 32中,寫時鐘為sysclk。當(dāng)FIFO 32不為空且Lxacki信號為高電平時,接收端允許傳送數(shù)據(jù)。數(shù)據(jù)由FIFO 32中讀出,分別放入4個32位寄存器中,準(zhǔn)備發(fā)送。
發(fā)送緩沖:此部分由狀態(tài)機和雙數(shù)據(jù)率(DDR)寄存器組成。當(dāng)發(fā)送條件成立,數(shù)據(jù)放入寄存器后,由state信號控制寄存器,每個Txclk周期從4個寄存器中各讀出2位數(shù)據(jù)Data_tx(7:O)共8位,為了滿足鏈路口通信協(xié)議,發(fā)送出的數(shù)據(jù)應(yīng)如圖4所示。因此,將Data_tx兩兩分組(0和4,1和5,2和6,3和7),4對數(shù)據(jù)分別由4個雙數(shù)據(jù)率(DDR)寄存器經(jīng)差分轉(zhuǎn)換送出,根據(jù)協(xié)議同時送出相應(yīng)的時鐘控制信號Lxclk p/n(與Tkclk相同頻率)。按照協(xié)議,Lxclk的第一個上升沿必須在第一位數(shù)據(jù)傳送中建立,因此,這里引入時鐘信號Txclk90(Txclk相移90°),用來控制Lxelk p/n信號。數(shù)據(jù)傳送結(jié)束前的最后一個時鐘周期內(nèi)將Lxbcompo信號置低(低有效)。發(fā)送(Tx)流程如圖7所示。結(jié)構(gòu)如圖8所示。
綜合后此電路的主時鐘Txclk頻率最快可達(dá)到280 MHz。分析后發(fā)現(xiàn)此結(jié)構(gòu)制約速度的瓶頸為高頻計數(shù)器,此計數(shù)器產(chǎn)生控制信號。因此,為了提高速度優(yōu)化結(jié)構(gòu)。將此計數(shù)器改為原時鐘的二分頻信號clkd2控制計數(shù)。此時每當(dāng)clkd2上升沿從FIFO 32讀出32位數(shù)據(jù)放入寄存器,該寄存器同樣由clkd2控制,時鐘的上升沿來到時讀出4位數(shù)據(jù),組成連續(xù)的16位數(shù)據(jù),這些數(shù)據(jù)經(jīng)過子模塊fast的處理,按照鏈路口協(xié)議要求輸出數(shù)據(jù)dataout。綜合后此電路的主時鐘Txclk頻率最快可達(dá)到400 MHz。
子模塊fast的結(jié)構(gòu)如圖9所示。
[!--empirenews.page--]
子模塊fast控制模塊是由clk,clknot,clkd2和clkd2not四個時鐘組合生成,產(chǎn)生muxO和muxl兩個控制信號。當(dāng)mux0=0時Datainn(3:O)輸出到DataO,反之,當(dāng)muxO=1時Datainn(11:8)輸出到Data0;同樣,當(dāng)muxl=0時Datainn(7:4)輸出到Datal,反之,當(dāng)muxl=0時,Datainn(15:12)輸出到Datal。
為了提高速度,保證高頻率下程序的穩(wěn)定性,使用rloc命令,通過對。fast模塊各個觸發(fā)器屬性描述及對底層基本邏輯單元的相對位置進(jìn)行約束,使得同一組數(shù)據(jù)的觸發(fā)器放置相對集中,從而減少了由于時鐘信號在布局布線中產(chǎn)生延遲使得數(shù)據(jù)建立時間不足而引起的不定態(tài)。
3 實現(xiàn)與仿真
ModelSim是一個獨立的仿真工具,在Xilinx公司的ISE集成開發(fā)環(huán)境中給ModelSim仿真軟件預(yù)留了接口,通過這個接口可以從ISE集成工具中直接啟動ModelSim工具進(jìn)行仿真。由于廠家的推廣,ModelSim得到了廣泛的應(yīng)用。
仿真也可分為功能仿真和時序仿真等3大類型。由于特殊底層元件的使用,需要一些器件庫模型的支持。而綜合后門級功能仿真以及實現(xiàn)后時序仿真都需要廠家器件庫的支持。
因此,在使用ModelSim 6.2進(jìn)行功能級仿真和布局布線后仿真時,應(yīng)根據(jù)需要提前對Xilinx的UN ISIM,XmnxCoreLib,SIMPRIM,SmartModel庫進(jìn)行編譯。其中,UNISIM庫包含了Xilinx公司全部的標(biāo)準(zhǔn)元件;XilinxCoreLib則包含了使用Xilinx CoreGenerator工具生成的IP的仿真模型;SIMPRIM庫用來做時序仿真或者門及功能仿真;SmartModel庫用來模擬復(fù)雜的FPGA設(shè)計。
首先按如下步驟完成對XX的編譯:
(1)將ModelSim根目錄下的modelsim.ini文件的屬性設(shè)置為存檔;
(2)在ModelSim的命令窗口中輸入命令:“compxlib—s mti_se-arch all—l vhdl—w—lib all”;
(3)將ModelSim.ini文件的屬性重新設(shè)置為只讀。
環(huán)境建立好以后,首先對程序進(jìn)行功能級仿真,驗證功能是否達(dá)到要求;功能仿真正確后再進(jìn)行布局布線后仿真,根據(jù)布局布線仿真的情況再對程序進(jìn)行分析,調(diào)整或者修改原先的設(shè)計,以滿足設(shè)計要求。
發(fā)送:此波形顯示將128位數(shù)據(jù)Data0轉(zhuǎn)換成鏈路口的傳送協(xié)議送出,如圖10所示。
接收:此波形表示有TS201鏈路口接收到一組數(shù)據(jù),當(dāng)FIFO_oe(即FIFO讀信號)為高時將數(shù)據(jù)并行送出,如圖11所示。
結(jié) 語
本文介紹了一種利用VHDL語言在FPGA上實現(xiàn)鏈路口通信的方法,實現(xiàn)FPGA與ADSP TS201之間的高速鏈路口通信。設(shè)計最終能達(dá)到的接收鏈路時鐘頻率為500 MHz,發(fā)送鏈路時鐘頻率為400 MHz,充分發(fā)揮了鏈路口通信的速度優(yōu)勢。也使得ADSPTS201通過具有此功能的FPGA與其他并行接口器件或設(shè)備進(jìn)行高速通信成為可能。