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