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