基于FPGA的TS over IP的設計與實(shí)現
摘要:隨著(zhù)互聯(lián)網(wǎng)的發(fā)展, 數字電視信號的網(wǎng)絡(luò )傳輸得到了越來(lái)越多的關(guān)注,本文設計與實(shí)現了一種基于FPGA和MCU(R8051XC2)的TS over IP系統,并對傳統的TS over IP系統進(jìn)行了改進(jìn)。此系統通過(guò)從標準TS流接口接收TS流,將其以乒乓操作的方式存放在兩個(gè)雙口RAM中,再通過(guò)一定方法封裝IP包發(fā)送至網(wǎng)絡(luò ),實(shí)現了TS流和網(wǎng)絡(luò )IP數據包的相互轉換。通過(guò)向系統推送TS流數據并使用抓包軟件對經(jīng)過(guò)系統的數據進(jìn)行分析統計的方法證明,得出以下結論,此系統在相同情況與有限的硬件條件下,相比傳統的使用FIFO作為緩沖器的系統,系統運行效率有了明顯的提高。
本文引用地址:http://dyxdggzs.com/article/279225.htm引言
隨著(zhù)互聯(lián)網(wǎng)的發(fā)展,人類(lèi)進(jìn)入了網(wǎng)絡(luò )化、數字化的時(shí)代。在三網(wǎng)融合的政策背景下,數字電視信號的網(wǎng)絡(luò )傳輸得到了越來(lái)越多的關(guān)注。與此同時(shí),先進(jìn)的嵌入式技術(shù)也對數字媒體的發(fā)展起到了推動(dòng)的作用。TS流是根據ITU-T Rec.H.222.0|ISO/IEC 13818-2 和ISO/IEC 13818-3協(xié)議而定義的一種數據流,主要用來(lái)傳輸數字電視的視頻節目、音頻節目和一些用戶(hù)信息,它是以包的方式存在,一個(gè)TS包一般為188或204字節,其廣泛用于電視信號的傳輸中。當前的廣播電視傳輸主要是TS流在現有的有線(xiàn)電視網(wǎng)絡(luò )中進(jìn)行傳輸。而本文的TS over IP技術(shù)是將TS流數據包轉換成IP數據包,并能夠在網(wǎng)絡(luò )中進(jìn)行傳輸。使只有網(wǎng)絡(luò )接口的終端設備可以接收到電視信號[1]。
目前實(shí)現該技術(shù)的主要方法是通過(guò)MCU IP核在FPGA中模擬出一個(gè)控制器來(lái)控制其余的子模塊實(shí)現[2]。本文設計的系統使用FPGA芯片和MCU芯片,兩個(gè)芯片之間通過(guò)EMIF接口進(jìn)行通信,并使用兩個(gè)雙口RAM,以及DMA的方式來(lái)實(shí)現系統。
1 系統概述及流程
1.1 系統概述
本系統實(shí)現了將從TS傳輸設備中接收到的TS流數據轉換為IP數據包,并使其能在網(wǎng)絡(luò )中傳輸。本系統基于FPGA實(shí)現,由一個(gè)MCU進(jìn)行控制,可以通過(guò)設置初始時(shí)的IP和MAC地址將數據發(fā)送到不同的目的主機。
目前類(lèi)似的系統大都使用現成的FIFO來(lái)對TS數據進(jìn)行暫時(shí)的存儲并通過(guò)現成的TCP/IP協(xié)議代碼來(lái)封裝IP包。在使用傳統的方法時(shí),當FPGA性能不夠時(shí)會(huì )導致丟包的現象出現。而FPGA與MCU在通過(guò)FIFO進(jìn)行通信交換數據與MCU的處理速度過(guò)低與數據的多次交換是導致這一現象的主要原因。所以為了提高系統的運行效率,使系統能夠在數據量非常大的情況下或者FPGA性能不是很好的情況下仍能夠正常運行,本系統采用了兩個(gè)雙口RAM通過(guò)乒乓操作來(lái)完成TS數據的暫時(shí)存儲,并通過(guò)程序在RAM中寫(xiě)入數據來(lái)實(shí)現IP包的封裝,封裝完成后通過(guò)DMA的方式將數據傳輸到MAC模塊中進(jìn)行發(fā)送的設計,避免了FPGA與MCU進(jìn)行數據交換與運行復雜的TCP/IP封裝程序的過(guò)程,從而提高系統的運行效率。
本系統使用了FPGA+MCU進(jìn)行實(shí)現,由于兩塊芯片的時(shí)鐘頻率不同,則系統涉及到了跨時(shí)鐘域通信問(wèn)題以及數據的亞穩態(tài)問(wèn)題,所以本系統使用了應答機制以及同步電路來(lái)避免異步時(shí)鐘域通信帶來(lái)的問(wèn)題。
1.2 系統流程
如圖1所示,系統流程由3個(gè)部分組成。首先,在程序啟動(dòng)后,由MCU來(lái)對整個(gè)系統進(jìn)行初始化配置,為之后系統的運行做好準備。接著(zhù)MCU通知FPGA初始化完成,開(kāi)始接收TS數據,并將這些數據儲存在RAM中,當接收7個(gè)TS包以后,程序會(huì )檢測是否由于傳輸數據過(guò)快出現數據溢出。完成溢出檢測后,系統會(huì )對RAM中的IP包頭信息進(jìn)行更新,信息更新完成之后的IP包會(huì )以DMA的方式傳輸到MAC中并最后由MAC模塊發(fā)送到網(wǎng)絡(luò )之中。
2 系統模塊概述
2.1 系統總體結構
該系統主要由TS接收模塊、IP包封裝模塊、IPCHK模塊、DMA模塊、EMIF接口等模塊組成。通過(guò)這些模塊我們實(shí)現了TS流的接收、網(wǎng)絡(luò )傳輸協(xié)議以及系統內各模塊通信等功能。系統結構圖如圖2所示。
其中,TS接收模塊、MAC模塊以及接口模塊由FPGA實(shí)現。IP包封裝模塊、片選模塊、IPCHK模塊以及DMA控制模塊在MCU中實(shí)現。
2.2 TS流接收的實(shí)現
系統中設計的TS接收模塊可以直接與TS流的編碼器相連接,其基本結構如圖3所示。
本模塊的時(shí)鐘來(lái)自于編碼器,接收符合時(shí)序的SPI形式的TS流數據。接收模塊接收數據后將數據存儲到RAM之中。如圖3所示,本模塊使用了兩個(gè)RAM進(jìn)行存儲與分裝IP包,并使用乒乓操作對兩個(gè)RAM進(jìn)行控制,在雙RAM乒乓操作的模式下,系統可以在處理前一批數據的同時(shí)繼續接收數據,從而提高系統的運行速度,防止數據溢出[8]。同時(shí)由于本設計使用UDP協(xié)議發(fā)送TS包,每個(gè)TS數據包的長(cháng)度為188字節,而IP包的最大長(cháng)度為1500字節,RAM 0~41的空間用來(lái)存放IP包頭數據,所以TS數據從第43個(gè)地址開(kāi)始存放,直到接收到7個(gè)TS包即到地址1357后切換另一個(gè)RAM。在一個(gè)RAM存滿(mǎn)之后,接收模塊會(huì )通過(guò)標志位通知MCU進(jìn)行接下來(lái)的工作。
2.3 網(wǎng)絡(luò )協(xié)議的實(shí)現
2.3.1 IP包封裝模塊
IP包封裝模塊即網(wǎng)絡(luò )協(xié)議的實(shí)現模塊是在開(kāi)機時(shí)運行,主要負責對MAC模塊進(jìn)行初始化配置與設置初始的IP地址和MAC地址。由于為了節省FPGA與MCU數據交換以及運行TCP/IP程序的開(kāi)銷(xiāo),本系統將IP包的封裝是由MCU直接對RAM寫(xiě)入數據來(lái)完成的,根據TCP/IP協(xié)議的規定,IP包封裝模塊將已經(jīng)設置好的IP包頭數據分別寫(xiě)入兩個(gè)RAM地址的0~41之中,將其作為IP包的包頭信息。完成IP包的包頭信息寫(xiě)入之后,本模塊通過(guò)置位標志位通知TS接收模塊開(kāi)始工作。
2.3.2 IPCHK模塊
IPCHK模塊實(shí)現了IP包頭的更新功能,本模塊是在MCU接到RAM滿(mǎn)的信號后進(jìn)行調用。為了省去運行復雜的TCP/IP程序所用的時(shí)間,需要手動(dòng)完成對IP包包頭更新以及校驗和的計算。首先IPCHK模塊會(huì )對IPID進(jìn)行刷新,之后對IPID更新后的IP包的校驗和進(jìn)行重新計算,并在計算完成之后將新的IPID檢驗和寫(xiě)入RAM的12、13、18、19號地址 之中,最后通知系統準備調用DMA模塊。
2.3.3 MAC模塊
本系統中,MAC模塊通過(guò)MCU接口模塊與MCU芯片進(jìn)行通信,并由MCU進(jìn)行初始化,初始化完成后對PHY芯片進(jìn)行配置,將接收到的含有TS數據的IP包發(fā)送給PHY芯片,進(jìn)而傳輸到網(wǎng)絡(luò )中。由于基于FPGA的MAC IP core已經(jīng)非常成熟,這里不再贅述。
2.4 系統各模塊間的通信
2.4.1 DMA控制模塊
本系統中PHY芯片與FPGA的數據交換是用過(guò)DMA來(lái)實(shí)現的,DMA模塊是在IPCHK完成后進(jìn)行調用。此時(shí),DMA模塊根據FPGA返回的RAM片選控制信息,以DMA的方式將RAM中的數據傳輸到MAC中。DMA模塊使得MCU可以從數據搬用的工作中解脫出來(lái),從而提高了程序運行的效率,防止了數據的溢出。
tcp/ip相關(guān)文章:tcp/ip是什么
評論