- 相關推薦
基于FPGA的TS over lP的設計與實現(xiàn)
摘要:隨著互聯(lián)網(wǎng)的發(fā)展,數(shù)字電視信號的網(wǎng)絡傳輸?shù)玫搅嗽絹碓蕉嗟年P注,本文設計與實現(xiàn)了一種基于FPCJA和MCU(R8051XC2)的TS over lP系統(tǒng),并對傳統(tǒng)的TS over lP系統(tǒng)進行了改進。此系統(tǒng)通過從標準TS流接口接收TS流,將其以乒乓操作的方式存放在兩個雙口RAM中,再通過一定方法封裝lP包發(fā)送至網(wǎng)絡,實現(xiàn)了TS流和網(wǎng)絡lP數(shù)據(jù)包的相互轉換。通過向系統(tǒng)推送TS流數(shù)據(jù)并使用抓包軟件對經(jīng)過系統(tǒng)的數(shù)據(jù)進行分析統(tǒng)計的方法證明,得出以下結論,此系統(tǒng)在相同情況與有限的硬件條件下,相比傳統(tǒng)的使用FIFO作為緩沖器的系統(tǒng),系統(tǒng)運行效率有了明顯的提高。
關鍵詞:FPCJA;TS over lP;雙端口RAM;異步時鐘域通信
引言
隨著互聯(lián)網(wǎng)的發(fā)展,人類進入了網(wǎng)絡化、數(shù)字化的時代。在三網(wǎng)融合的政策背景下,數(shù)字電視信號的網(wǎng)絡傳輸?shù)玫搅嗽絹碓蕉嗟年P注。與此同時,先進的嵌入式技術也對數(shù)字媒體的發(fā)展起到了推動的作用。TS流是根據(jù)ITU-T Rec.H.222.OIISO/IEC13818-2和ISO/IEC 13818-3協(xié)議而定義的一種數(shù)據(jù)流,主要用來傳輸數(shù)字電視的視頻節(jié)目、音頻節(jié)目和一些用戶信息,它是以包的方式存在,一個TS包一般為188或204字節(jié),其廣泛用于電視信號的傳輸中。當前的廣播電視傳輸主要是TS流在現(xiàn)有的有線電視網(wǎng)絡中進行傳輸。而本文的TS overIP技術是將TS流數(shù)據(jù)包轉換成IP數(shù)據(jù)包,并能夠在網(wǎng)絡中進行傳輸。使只有網(wǎng)絡接口的終端設備可以接收到電視信號。
目前實現(xiàn)該技術的主要方法是通過MCU IP核在FPGA中模擬出一個控制器來控制其余的子模塊實現(xiàn)。本文設計的系統(tǒng)使用FPGA芯片和MCU芯片,兩個芯片之間通過EMIF接口進行通信,并使用兩個雙口RAM,以及DMA的方式來實現(xiàn)系統(tǒng)。
一、系統(tǒng)概述及流程
1.1 系統(tǒng)概述
本系統(tǒng)實現(xiàn)了將從TS傳輸設備中接收到的TS流數(shù)據(jù)轉換為IP數(shù)據(jù)包,并使其能在網(wǎng)絡中傳輸。本系統(tǒng)基于FPGA實現(xiàn),由一個MCU進行控制,可以通過設置初始時的IP和MAC地址將數(shù)據(jù)發(fā)送到不同的目的主機。
目前類似的系統(tǒng)大都使用現(xiàn)成的FIFO來對TS數(shù)據(jù)進行暫時的存儲并通過現(xiàn)成的TCP/IP協(xié)議代碼來封裝IP包。在使用傳統(tǒng)的方法時,當FPGA性能不夠時會導致丟包的現(xiàn)象出現(xiàn)。而FPGA與MCU在通過FIFO進行通信交換數(shù)據(jù)與MCU的處理速度過低與數(shù)據(jù)的多次交換是導致這一現(xiàn)象的主要原因。所以為了提高系統(tǒng)的運行效率,使系統(tǒng)能夠在數(shù)據(jù)量非常大的情況下或者FPGA性能不是很好的情況下仍能夠正常運行,本系統(tǒng)采用了兩個雙口RAM通過乒乓操作來完成TS數(shù)據(jù)的暫時存儲,并通過程序在RAM中寫入數(shù)據(jù)來實現(xiàn)IP包的封裝,封裝完成后通過DMA的方式將數(shù)據(jù)傳輸?shù)組AC模塊中進行發(fā)送的設計,避免了FPGA與MCU進行數(shù)據(jù)交換與運行復雜的TCP/IP封裝程序的過程,從而提高系統(tǒng)的運行效率。
本系統(tǒng)使用了FPGA+MCU進行實現(xiàn),由于兩塊芯片的時鐘頻率不同,則系統(tǒng)涉及到了跨時鐘域通信問題以及數(shù)據(jù)的亞穩(wěn)態(tài)問題,所以本系統(tǒng)使用了應答機制以及同步電路來避免異步時鐘域通信帶來的問題。
1.2 系統(tǒng)流程
如圖1所示,系統(tǒng)流程由3個部分組成。首先,在程序啟動后,由MCU來對整個系統(tǒng)進行初始化配置,為之后系統(tǒng)的運行做好準備。接著MCU通知FPGA初始化完成,開始接收TS數(shù)據(jù),并將這些數(shù)據(jù)儲存在RAM中,當接收7個TS包以后,程序會檢測是否由于傳輸數(shù)據(jù)過快出現(xiàn)數(shù)據(jù)溢出。完成溢出檢測后,系統(tǒng)會對RAM中的IP包頭信息進行更新,信息更新完成之后的IP包會以DMA的方式傳輸?shù)組AC中并最后由MAC模塊發(fā)送到網(wǎng)絡之中。
二、系統(tǒng)模塊概述
2.1 系統(tǒng)總體結構
該系統(tǒng)主要由TS接收模塊、IP包封裝模塊、IPCHK模塊、DMA模塊、EMIF接口等模塊組成。通過這些模塊我們實現(xiàn)了TS流的接收、網(wǎng)絡傳輸協(xié)議以及系統(tǒng)內(nèi)各模塊通信等功能。系統(tǒng)結構圖如圖2所示。
其中,TS接收模塊、MAC模塊以及接口模塊由FPGA實現(xiàn)。IP包封裝模塊、片選模塊、IPCHK模塊以及DMA控制模塊在MCU中實現(xiàn)。
2.2 TS流接收的實現(xiàn)
系統(tǒng)中設計的TS接收模塊可以直接與TS流的編碼器相連接,其基本結構如圖3所示。
本模塊的時鐘來自于編碼器,接收符合時序的SPI形式的TS流數(shù)據(jù)。接收模塊接收數(shù)據(jù)后將數(shù)據(jù)存儲到RAM之中。如圖3所示,本模塊使用了兩個RAM進行存儲與分裝IP包,并使用乒乓操作對兩個RAM進行控制,在雙RAM乒乓操作的模式下,系統(tǒng)可以在處理前一批數(shù)據(jù)的同時繼續(xù)接收數(shù)據(jù),從而提高系統(tǒng)的運行速度,防止數(shù)據(jù)溢出。同時由于本設計使用UDP協(xié)議發(fā)送TS包,每個TS數(shù)據(jù)包的長度為188字節(jié),而IP包的最大長度為1500字節(jié),RAM 0―41的空間用來存放IP包頭數(shù)據(jù),所以TS數(shù)據(jù)從第43個地址開始存放,直到接收到7個TS包即到地址1357后切換另一個RAM。在一個RAM存滿之后,接收模塊會通過標志位通知MCU進行接下來的工作。
2.3 網(wǎng)絡協(xié)議的實現(xiàn)
2.3.1 IP包封裝模塊
IP包封裝模塊即網(wǎng)絡協(xié)議的實現(xiàn)模塊是在開機時運行,主要負責對MAC模塊進行初始化配置與設置初始的IP地址和MAC地址。由于為了節(jié)省FPGA與MCU數(shù)據(jù)交換以及運行TCP/IP程序的開銷,本系統(tǒng)將IP包的封裝是由MCU直接對RAM寫入數(shù)據(jù)來完成的,根據(jù)TCP/IP協(xié)議的規(guī)定,IP包封裝模塊將已經(jīng)設置好的IP包頭數(shù)據(jù)分別寫入兩個RAM地址的O~41之中,將其作為IP包的包頭信息。完成IP包的包頭信息寫入之后,本模塊通過置位標志位通知TS接收模塊開始工作。
2.3.2 IPCHK模塊
IPCHK模塊實現(xiàn)了IP包頭的更新功能,本模塊是在MCU接到RAM滿的信號后進行調用。為了省去運行復雜的TCP/IP程序所用的時間,需要手動完成對IP包包頭更新以及校驗和的計算。首先IPCHK模塊會對IPID進行刷新,之后對IPID更新后的IP包的校驗和進行重新計算,并在計算完成之后將新的IPID檢驗和寫入RAM的12、13、18、19號地址之中,最后通知系統(tǒng)準備調用DMA模塊。
2.3.3 MAC模塊
本系統(tǒng)中,MAC模塊通過MCU接口模塊與MCU芯片進行通信,并由MCU進行初始化,初始化完成后對PHY芯片進行配置,將接收到的含有TS數(shù)據(jù)的IP包發(fā)送給PHY芯片,進而傳輸?shù)骄W(wǎng)絡中。由于基于FPGA的MAC IP core已經(jīng)非常成熟,這里不再贅述。
2.4 系統(tǒng)各模塊間的通信
2.4.1 DMA控制模塊
本系統(tǒng)中PHY芯片與FPGA的數(shù)據(jù)交換是用過DMA來實現(xiàn)的,DMA模塊是在IPCHK完成后進行調用。此時.DMA模塊根據(jù)FPGA返回的RAM片選控制信息,以DMA的方式將RAM中的數(shù)據(jù)傳輸?shù)組AC中。DMA模塊使得MCU可以從數(shù)據(jù)搬用的工作中解脫出來,從而提高了程序運行的效率,防止了數(shù)據(jù)的溢出。
2.4.2 FPGA與MCU通信的實現(xiàn)
此模塊實現(xiàn)FPGA與MCU之間的通信,在本設計中主要采用的是EMIF接口的方式,與此同時我們還使用了MCU的通用I/O口,采用了以EMIF接口為主、通用I/O口為輔的混合通信方式,使FPGA與MCU之間的通信更加地靈活,邏輯框圖如圖4所示。
在本系統(tǒng)中R8051XC2提供了EMIF接口來訪問外部的數(shù)據(jù)或程序存儲器,該接口具有23bit的數(shù)據(jù)總線“memaddr”,可以訪問最大16MB的存儲空間:8bit的輸出數(shù)據(jù)總線“memdatao”和8bit的輸入數(shù)據(jù)總線“memdatai”,讀寫控制信號“memwr”和“memrd”,以及一個響應信號“memack"。
R8051XC2為EMIF接口提供了基于三個輸入信號的等待狀態(tài),三種信號分別為:“mempsack"主要用于外部程序存儲器:“memack主要用于外部數(shù)據(jù)存儲器:“sfrack”主要用于外部特殊功能寄存器。這些管腳的狀態(tài)在傳輸指令或數(shù)據(jù)時被采樣,例如,在使用“memrd”和“memwr”對外部的數(shù)據(jù)存儲器進行讀寫操作時,處理器會對“memack”進行采樣來確認外部存儲器是否已經(jīng)完成操作。還提供了一個全局等待信號“waitstate”,表示插入一個等待狀態(tài),無論是由什么原因引起的。
控制內(nèi)部產(chǎn)生的程序或外部數(shù)據(jù)存儲器的等待狀態(tài)長度的寄存器是“ckcon”,它的值作為初始值裝入內(nèi)部等待狀態(tài)的計數(shù)器中。當有一個外部數(shù)據(jù)存儲器的訪問初始化時,ckcon[2:0]的值被裝入內(nèi)部等待狀態(tài)計數(shù)器,這個計數(shù)器會強制將waitstate信號置1,使處理器中的寄存器和觸發(fā)器進入等待狀態(tài),直到計數(shù)器的值減少到O。
本文設計的系統(tǒng)在兩個不同的層次中包含兩個時鐘域,需要使用兩個PLL模塊來實現(xiàn),其中一個在FPGA的頂層模塊中為MAC模塊和MCU接口模塊提供100MHz與80MHz的時鐘,并通過lo cked接口產(chǎn)生低有效的復位信號。另一個PLL模塊為FPGA提供運行時所需的時鐘信號。
2.4.3 異步時鐘域通信的實現(xiàn)
在本文介紹的系統(tǒng)中,存在著兩個時鐘域,其中TS模塊工作在標準中要求的27MHz的時鐘域中,處理器和MAC模塊工作在100MHz的時鐘域中,其中TS模塊需要和處理器之間進行數(shù)據(jù)傳輸。在傳輸中需要進行異步時鐘域處理的主要包括兩種信號:一種是控制信號,另一種是數(shù)據(jù)信號。在異步時鐘域的通信中需要解決兩個問題:一是信號的同步,二是盡量減少亞穩(wěn)態(tài)的影響。
對于第一個問題,在本文中使用部分握手協(xié)議來進行信號的同步。部分握手協(xié)議的過程中,兩個通信的時鐘域不需要完全了解對方的狀態(tài),可以按順序發(fā)送或撤銷各自的握手信號。由于雙方不需要等待對方的回應,就可以撤銷自己的信號并繼續(xù)執(zhí)行協(xié)議,因此相對于完全握手協(xié)議,部分握手協(xié)議的穩(wěn)定性稍差,當然可以使用更少的時間完成一次握手傳輸。根據(jù)使用的信號不同,部分握手協(xié)議又可以分為兩種。第一種為使用電平和脈沖的同步握手信號。第二種為使用脈沖的同步握手信號。在此本文使用脈沖的同步握手信號,其過程如圖6所示。
在這種握手機制中采用脈沖同步器接收通信雙方的握手信號,如果時鐘域A的時鐘頻率比時鐘域B的時鐘頻率快兩倍時,可以采用邊沿同步器來收握手信號。從圖6中可以看出,這種握手機制中,時鐘域A需要2個時鐘周期,時鐘域B需要3個時鐘周期,所耗費的時鐘周期最少。
握手機制的優(yōu)點是可以在時鐘頻率相差較大的時鐘域之間進行通信,可以進行多位傳輸。缺點是需要額外的多個時鐘周期完成握手的流程,降低了系統(tǒng)的效率。
對于亞穩(wěn)態(tài)的減少,使用常用的同步電路的方法來處理,同步電路的原理是降低出現(xiàn)亞穩(wěn)態(tài)的概率,由圖6中可分析出,第一個時鐘域的信號到達第二個時鐘域的第一個觸發(fā)器時,很可能無法滿足建立和保持時間,從而導致在觸發(fā)器的輸出端出現(xiàn)亞穩(wěn)態(tài),當這種狀態(tài)持續(xù)不到一個周期時,可以通過增加一級觸發(fā)器來消除該亞穩(wěn)態(tài),這樣第二個觸發(fā)器的輸出信號就可以滿足同步信號的要求、可以達到異步電路同步化的效果。
三、系統(tǒng)狀態(tài)機及各狀態(tài)說明
下面主要對執(zhí)行TS over IP操作時系統(tǒng)的狀態(tài)轉換情況進行說明。系統(tǒng)狀態(tài)轉換圖如7所示。
信號說明:
wdatal,wdata2:RAM1和RAM2的可寫數(shù)據(jù)信號。
wchkl,wchk2:RAM1和RAM2的可寫包頭信息信號。
rdatal,rdata2:RAM1和RAM2的可讀信號。
狀態(tài)圖說明,除開始和結束狀態(tài)外,本系統(tǒng)共包含六個狀態(tài):
1)初始化狀態(tài):
a) 配置本機的MAC地址,IP地址以及要發(fā)送的目標的IP地
b) 完成硬件初始化
c) 置wdatal=l,wdata2=O,wchkl=O,wchk2=O,rdatal=O,rdata2=0
d)跳轉到Sl 1
2) Sl_l:
a)若此時wdatal=l,rdatal=l,則說明數(shù)據(jù)溢出,跳轉到溢出狀態(tài)
b) 向RAM1中寫入TS流數(shù)據(jù)
c) 數(shù)據(jù)量達到1316個字節(jié)后,置wdatal=0.wchkl=l
d) 同時處理器讀取RAM2中的數(shù)據(jù),讀取結束時置rdata2=0
e) 跳轉到狀態(tài)Sl_2
3) S1_2:
a) 將修改后的包頭信息寫入RAM1中
b)寫入完成后置wchkl=0,wdata2=1.rdatal=l
c) 通知處理器可讀取RAM1中的數(shù)據(jù)
d)跳轉到S2_1
4) S2_1:
a)若此時wdata2=1,rdata2=1,則說明數(shù)據(jù)溢出,跳轉到溢出狀態(tài)
b) 向RAM2中寫入TS流數(shù)據(jù)
c) 數(shù)據(jù)量達到1316個字節(jié)后,置wdata2=0,wchk2=1
d) 同時處理器讀取RAM1中的數(shù)據(jù),讀取結束時置rdatal=0
e)跳轉到狀態(tài)S2_2
5) S2_2:
a)將修改后的包頭信息寫入RAM2中
b)寫入完成后置wchk2=0,rdata2=1, wdatal=l
c) 通知處理器可讀取RAM2中的數(shù)據(jù)
d)跳轉到Sl_1
6)溢出狀態(tài):
a)在Sl_1或S2_1狀態(tài)時,當CPU沒有完成數(shù)據(jù)的讀取,卻要求再次寫入時,則視為數(shù)據(jù)溢出
b)通知CPU數(shù)據(jù)溢出,并停止系統(tǒng)的運行
c)跳轉到結束狀態(tài)4結論
本文闡述了一種基于FPGA和MCU芯片的TS over IP系統(tǒng)的設計方法,說明了系統(tǒng)各個部分的功能和實現(xiàn),詳細敘述了系統(tǒng)工作流程。同時還相較以往的系統(tǒng)進行了改進,通過使用雙RAM進行乒乓操作存儲并轉換數(shù)據(jù),并通過DMA的方式進行RAM與MAC模塊數(shù)據(jù)交換等方法提高了系統(tǒng)運行效率。本系統(tǒng)在FPGA查找表(LUT)資源為6144,MCU頻率為100MHz的條件下,完成了視屏TS數(shù)據(jù)的傳輸,網(wǎng)絡傳輸速率達到30Mbit/S。
同時本文還在相同的硬件條件下,對使用FIFO作為緩沖器的系統(tǒng)和本系統(tǒng)在處理不同傳輸率的TS流時的系統(tǒng)性能做了對比,其中對比的主要參數(shù)是在不同數(shù)據(jù)傳輸速率下丟包率的多少,丟包率計算方法如下:
丟包率=(發(fā)包數(shù) 收包數(shù))/發(fā)包數(shù)
對比結果如表1所示。從表1中可以看出,在相同的硬件條件下,改進后的本系統(tǒng)的性能與運行效率有了明顯的提高,達到了實驗目的。
【基于FPGA的TS over lP的設計與實現(xiàn)】相關文章:
基于FPGA的TS201 linkport數(shù)據(jù)通信設計與實現(xiàn)03-30
基于FPGA的指紋特征點集匹配的設計與實現(xiàn)03-07
基于TS201的通信偵察接收機的設計與實現(xiàn)03-07
基于EDA技術的FPGA設計03-18
基于FPGA的直接數(shù)字頻率合成器的設計和實現(xiàn)03-19