近幾年基于MPEC-2的DVB普通數字電視在美國、南美、亞洲、大洋洲和非洲通過(guò)衛星進(jìn)行廣播;贛PEG-2/DVB的多路節目復用器是數字電視傳輸系統的關(guān)鍵設備之一,因此,它的研發(fā)顯得尤為重要。目前,復用器的設計方案主要基于DSP(數字信號處理器)的實(shí)現技術(shù),這種設計方法在理論上也能實(shí)現對傳送流的復用,考慮到實(shí)現復用器諸多高速、復雜的邏輯功能,同時(shí),FPGA(現場(chǎng)可編程門(mén)陣列)理論上可以無(wú)限次地重新配置,這樣在一定程度上為系統的升級或局部功能的改進(jìn)留下了余地。所以,從今后專(zhuān)用芯片的設計和開(kāi)發(fā)的角度來(lái)講,基于FPGA的設計無(wú)疑是最佳的選擇。本文提出了一套基于FPGA的復用器輸入部分的設計方案。 1 復用器組成 整個(gè)傳送流的復用器分為復用預處理、輸入和復用3部分。預處理部分是對多路傳送流的PSI(節目特殊信息)提取并修改,重新生成新的PSI表的過(guò)程;輸入部分是給各路經(jīng)預處理的不同速率的傳送流提供緩存,并將半滿(mǎn)信號發(fā)送給后續的復用模塊;復用部分是將n路傳送流復合成一路傳送流的過(guò)程,控制對各路傳送流進(jìn)行選擇性發(fā)送,適時(shí)插入空包和其他業(yè)務(wù)信息。復用器的數據緩存包括輸入FIFO和輸出FIFO,它為n路傳送流提供緩存,便于復用器隨時(shí)提取某一路傳送包進(jìn)行處理。因此,復用器FIFO是否具有高速性和可靠性將直接影響復用器的性能。 2 FIFO設計方案 2.1 異步FIFO結構 首先,由于輸入通道和輸出通道的時(shí)鐘頻率不同,所以用來(lái)實(shí)現輸入接口的FIFO必須支持異步讀寫(xiě)功能,其結構如圖1所示。 其次,考慮到輸入通道和輸出通道的時(shí)鐘頻率相差很大,為了避免數據溢出,FIFO的大小設計也需要考慮。FIFO的大小一方面與輸入傳送流的碼率和路數有關(guān);另一方面,FPGA的處理能力也是影響緩沖器的一個(gè)因素。本設計中充分考慮了滿(mǎn)足產(chǎn)生半滿(mǎn)信號和節省系統資源的要求,FIFO的參考長(cháng)度設計為一幀傳送流長(cháng)度的2倍,即為376 B。n路傳送流以不相關(guān)的碼流速度寫(xiě)入FIFO中,由于時(shí)鐘之間周期和相位完全獨立,因而數據的丟失概率不為O,如何設計一個(gè)高可靠性、高速的異步FIFO電路便成為一個(gè)難點(diǎn)。 由圖1可以看出,FIFO的存儲介質(zhì)為一塊雙端口RAM,可以同時(shí)進(jìn)行讀寫(xiě)操作。在寫(xiě)時(shí)鐘域部分,由寫(xiě)地址產(chǎn)生邏輯產(chǎn)生寫(xiě)控制信號和寫(xiě)地址;讀時(shí)鐘部分由讀地址產(chǎn)生邏輯產(chǎn)生讀控制信號和讀地址。在空/滿(mǎn)/半滿(mǎn)標志產(chǎn)生部分,當FIFO里的數據超過(guò)188個(gè)字節時(shí),產(chǎn)生一個(gè)半滿(mǎn)信號,并將該信號送給復用控制模塊,由復用控制模塊產(chǎn)生一個(gè)讀使能,控制FIFO讀出數據。也就是說(shuō)寫(xiě)過(guò)程是連續的,而對于一個(gè)FIFO來(lái)說(shuō)讀過(guò)程是間斷的。 2.2 異步時(shí)鐘同步電路 設計的過(guò)程中,首先要同步異步信號,使觸發(fā)器不產(chǎn)生亞穩態(tài)。采取的方法是以讀時(shí)鐘為基準時(shí)鐘控制讀寫(xiě)數據,由讀時(shí)鐘觸發(fā),將寫(xiě)時(shí)鐘變?yōu)閷?xiě)使能來(lái)控制FIFO寫(xiě)入數據。如圖2所示的觸發(fā)器電路可以同步異步時(shí)鐘。 由圖2可以看出clk-r和clk-w分別是讀時(shí)鐘和寫(xiě)時(shí)鐘,兩者異步且頻率相差很大。通過(guò)兩級D觸發(fā)器對這兩個(gè)時(shí)鐘進(jìn)行同步,把寫(xiě)時(shí)鐘clk-w轉變?yōu)橐粋(gè)由讀時(shí)鐘clk-r上升沿觸發(fā)的寫(xiě)使能w-en,由w-en控制寫(xiě)入數據。 2.3 信號控制電路 同步了讀、寫(xiě)時(shí)鐘后,下一個(gè)問(wèn)題就是如何正確設計空/滿(mǎn)/半滿(mǎn)信號的控制電路。這些標志的產(chǎn)生是FIFO的核心部分,如何正確設計此部分的邏輯,直接影響到FIFO的性能。MPEG-2/DVB的傳送流復用的特殊性,決定著(zhù)空/滿(mǎn)/半滿(mǎn)標志產(chǎn)生的原則。FIFO的標志產(chǎn)生邏輯如圖3所示。 系統定義了寫(xiě)指針wp和讀指針rp,在FIFO寫(xiě)入或者讀出數據時(shí)開(kāi)始記數。通過(guò)比較wp與rp來(lái)產(chǎn)生標志信號。具體實(shí)現方法是:定義一個(gè)計數器(count)對存人FIFO的數據字節數計數,產(chǎn)生半滿(mǎn)信號hf-flag,當FIFO寫(xiě)入一個(gè)數據時(shí),計數器加"1",當從FIFO中讀取一個(gè)數據時(shí),計數器減"1",當計數器值大于187時(shí),該FIFO輸出一個(gè)半滿(mǎn)信號。另外,附加了一個(gè)并行的區間判斷邏輯來(lái)控制同步字節的寫(xiě)入。當同步字節syn到來(lái)時(shí),寫(xiě)指針wp開(kāi)始計數,FIFO開(kāi)始寫(xiě)入數據,這時(shí)需要同步判斷計數器的值,而這個(gè)值應為0或187,從而給wp賦初值,這保證了FTFO中寫(xiě)入的前4個(gè)字節即為傳送包的包頭。與此同時(shí),半滿(mǎn)計數器也在計數,當其值大于187時(shí),半滿(mǎn)信號HF跳變?yōu)?,表明FIFO接收到讀使能r-en時(shí),讀指針rp開(kāi)始計數,系統開(kāi)始從FIFO中依次讀取數據,讀取完1幀(188 B)數據后,讀使能關(guān)閉,系統不再讀取數據,此時(shí)hf-flag也變?yōu)?,FIFO的狀態(tài)又回到了初始狀態(tài)。 2.4 緩存功能模塊 圖4給出了FIFO的引腳定義:syn為傳送流同步字節;rst為復位信號;clk-r為讀時(shí)鐘;r-en為讀使能信號,當系統執行讀操作時(shí),該信號為"1",clk-w為寫(xiě)時(shí)鐘;datain為并行8位數據輸人;hf-flag為半滿(mǎn)信號,當FIFO中數據個(gè)數大于187時(shí),該引腳輸出一個(gè)高電平;emp-flag為空標志;full-flag為滿(mǎn)標志;dataout為并行8位數據輸出。 3 結束語(yǔ) 本文基于FPGA的復用器輸入部分設計方案,程序調試簡(jiǎn)單,通過(guò)實(shí)踐驗證,運行效果良好,達到了設計的要求,具有較高的實(shí)用價(jià)值。 |