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