MPEG-2編碼復用器中的FPGA邏輯設計
MPEG-2編碼復用器主要由DSP(數(shù)字信號處理器)和FPGA兩大部分組成。其中,DSP作為整個系統(tǒng)的主控單元,而FPGA則完成相應的輔助邏輯功能。用FPGA實現(xiàn)的編碼復用器,具有設計,升級都非常方便,快速的特點,提高了工作效率。
FPGA芯片簡介
編碼復用器中所使用的FPGA芯片是美國Altera公司生產(chǎn)的FLEX10K50V。 Flex10K系列是Altera公司在FLEX8000系列基礎上發(fā)展起來的一種新型器件。它的結(jié)構(gòu)的主要特點除了主要的邏輯陣列塊(LAB)之外,首次采用了嵌入陣列塊(EAB)。 FLEX10K50V的主要特性指標為:
●邏輯門數(shù)目為50,000門;
●最大I/O引腳數(shù)為274個;
●提供-1,-2,-3,-4四種速度級別;
●觸發(fā)器數(shù)目為3,184個;
●LE(Logic Element,邏輯單元)數(shù)目為2,880個;
●總的RAM為20,480bits。
MAX+ PLUS II開發(fā)工具
MAX+ PLUS II是開發(fā)Altera公司FPGA產(chǎn)品(包括MAX系列和FLEX系列)的軟件工具包。利用MAX+ PLUS II提供的設計環(huán)境和設計工具,可以靈活高效地完成各種數(shù)字電路設計。在MAX+ PLUS II的設計環(huán)境下, FPGA的整個設計流程如圖1所示:
1. MAX+ PLUS II的設計輸入可以有三種方式,即圖形輸入,文本輸入和波形輸入。此外,符號編輯器用于編輯用戶自己的模塊符號。需要說明的是: 在本系統(tǒng)中,我們使用AHDL(Altera,HDL) 語言作為文本輸入方式。
2. 設計實現(xiàn)即在FPGA器件內(nèi)物理地實現(xiàn)所需地邏輯.這個過程由MAX+ PLUS II中的核心部分編譯器完成。它依據(jù)設計輸入文件自動生成用于器件編程、波形仿真、延時分析等所需的數(shù)據(jù)文件。
3. 設計仿真是由仿真器和時延分析器利用編譯器產(chǎn)生的數(shù)據(jù)文件,自動完成邏輯功能仿真和延時特性仿真。通過仿真,發(fā)現(xiàn)設計中的錯誤與不足,對設計輸入進行修改和完善,最終達到設計要求。
4. 在仿真結(jié)果正確以后,就可以進行器件編程,即通過編程器(Programmer)將設計文件下載到FPGA芯片中,在實際芯片中進行實際信號的時序驗證,就芯片的實際運行性能進行系統(tǒng)測試。
復用器中的FPGA邏輯設計
在MPEG-2編碼復用器中,FPGA所實現(xiàn)的邏輯功能主要是:
(1)系統(tǒng)上電后,完成對其他器件(如DSP、、FIFO)的復位;
(2)響應系統(tǒng)主控單元DSP的指令,從相應的輸入FIFO中讀取TS流數(shù)據(jù),做并串變換后傳輸至DSP的串行輸入口;
(3)由于復用器必須對進入該系統(tǒng)的數(shù)據(jù)傳送流(TS流)中的程 序參考時鐘域(PCR域)中的數(shù)值進行補償計數(shù).因此,FPGA還需要完成:
a.在復用器的數(shù)據(jù)傳送流輸入端檢測PCR域并紀錄PCR域初值;
b.在復用器的數(shù)據(jù)傳送流輸出端檢測PCR域并將經(jīng)過補償計數(shù)后的PCR的新值 裝載進PCR域;
(4)其他一些邏輯。
1、輸入輸出FIFO的復位模塊
輸入輸出FIFO復位模塊較為簡單.它由文本輸入方式實現(xiàn),內(nèi)部主要由計數(shù)器和D觸發(fā)器組成。它對電路的控制主要包括:整個系統(tǒng)上電后,主控單元DSP通過I/O端口向FPGA發(fā)出FIFO復位的指令, FPGA通過地址譯碼,產(chǎn)生RSFIFO信號.RSFIFO作為計數(shù)器內(nèi)部的清0端信號,CLK38(全局時鐘信號)作為計數(shù)器的時鐘信號,并引導計數(shù)器開始計數(shù)。計數(shù)器計數(shù)到一定數(shù)值時,再連通D觸發(fā)器先后產(chǎn)生RESET(輸入輸出FIFO復位信號)以及FO_ENA(輸出FIFO讀允許信號),完成了FIFO復位模塊的邏輯時序.
2、并/串轉(zhuǎn)換模塊
圖3是并串模塊的上層圖。其I/O引腳情況見表1:
表1 并/串轉(zhuǎn)換模塊I/O引管腳說明
管腳名稱 | 管腳功能 |
CLK38 | 并串模塊工作時鐘 |
HF | 輸入FIFO半滿信號 |
Q[8...0] | TS流并行數(shù)據(jù)信號 |
P——CLK | TS流串行數(shù)據(jù)包同步信號 |
S——DATA | TS流串行數(shù)據(jù)信號 |
S——CLK | TS流串行數(shù)據(jù)時鐘信號 |
FIFO——R——CLK | 輸入FIFO讀時鐘信號 |
CLK——CONTROL | 輸入FIFO讀時鐘控制信號 |
由于MAX+PLUSII的老式宏函數(shù)中只提供了作4、5、8位和16位并串變換的移位寄存器 ,而此處系統(tǒng)完成的是9位并串變換(8位數(shù)據(jù)位加1位包同步位),因此必須自己編寫tdf文件,而不能直接調(diào)用宏函數(shù)。具體的功能實現(xiàn)為:
選擇使用9個D觸發(fā)器,將它們相互連通組成9位的移位寄存器。一旦產(chǎn)生輸入FIFO的半滿信號(HF),模塊開始工作,將輸入FIFO中的9位并行數(shù)據(jù)讀入移位寄存器中,在CLK38的工作時鐘控制下,將9位數(shù)據(jù)順序串行移出產(chǎn)生S_DATA(TS流串行數(shù)據(jù))。并且,在模塊中還設置了一個4位計數(shù)器A。計數(shù)器A同樣在CLK38的工作時鐘控制下,整體模塊開始工作時開始同步計數(shù)。每計數(shù)到9時計數(shù)器清0,并輸出一個高電平信號。而在其他計數(shù)值時,該信號輸出為低電平。那么,產(chǎn)生的這個信號就是TS流的串行數(shù)據(jù)包同步信號(P_CLK)。而TS流串行數(shù)據(jù)的時鐘信號(S_CLK),很顯然就是CLK38。
此外,將CLK38時鐘進行8分頻作為輸入FIFO的讀時鐘信號(FIFO_R_CLK)。而輸入FIFO讀時鐘的控制信號(CLK_CONTROL),則由模塊中設置的另外一個計數(shù)器B來產(chǎn)生,確保輸入FIFO一次半滿后,F(xiàn)PGA只從其中讀取該FIFO最大容量之一半的數(shù)據(jù)。例如:在本系統(tǒng)中,輸入FIFO的最大容量為512個字節(jié)。那么,設置的計數(shù)器B就必須是一個9位計數(shù)器。計數(shù)器的計數(shù)時鐘為FIFO_R_CLK,從輸入FIFO半滿,F(xiàn)PGA啟動讀數(shù)時開始計數(shù)。每計數(shù)到256(輸入FIFO容量的一半)時計數(shù)器清0,并將輸入FIFO讀時鐘的控制信號(CLK_CONTROL)置為低電平,從而禁止再產(chǎn)生輸入FIFO讀時鐘信號。
3、PCR補償計數(shù)模塊
根據(jù)MPEGII標準,TS流中的PCR域共有42位有效碼字,由兩部分組成:一部分以系統(tǒng)參考時鐘的1/300(90KHZ)為單位,稱為program_clock_reference_base,33字段;另一部分稱為program_clock_reference_extension, 以系統(tǒng)參考時鐘(27MHz)為單位的9位字段。
因此,整個PCR補償計數(shù)模塊分為兩大部分:一部分是9位字段(E0~E8)的PCR域補償計數(shù)模塊,由一個8位計數(shù)器(調(diào)用宏函數(shù)8COUNT)和一個4位計數(shù)器(調(diào)用宏函數(shù)74161)組成。其中,8COUNT的計數(shù)時鐘為27MHz時鐘(由硬件電路中的27MHz晶振提供);而74161的計數(shù)時鐘則為8COUNT提供的最高位進位時鐘(由8COUNT中的最高位E7取反后得到);另一部分為33位字段(Q32~Q0)的PCR域補償計數(shù)模塊,由4個8位計數(shù)器(調(diào)用宏函數(shù)8COUNT)和一個4位計數(shù)器(調(diào)用宏函數(shù)74161)組成。其中,74161的計數(shù)時鐘為27MHz時鐘300分頻后得到的90KHZ時鐘,它只對33位字段中的最低位Q0進行補償計數(shù)。第一個8COUNT的計數(shù)時鐘為74161的Q0位的進位時鐘(由Q0取反后得到);而其他3個8COUNT的計數(shù)時鐘則分別為前一個8COUNT的進位時鐘(即分別由Q8,Q16,Q24取反后得到)。
4、復用系統(tǒng)FPGA邏輯設計中一些技巧
在該系統(tǒng)FPGA邏輯設計過程中,由于系統(tǒng)結(jié)構(gòu)比較復雜,整個FPGA邏輯設計也比較大,所以在作邏輯設計時,一般應有一個整體的考慮。具體作設計時,應該采用層次化的結(jié)構(gòu)設計。另外,還必須結(jié)合整個系統(tǒng)的特點,有意識的對FPGA中邏輯設計進行優(yōu)化和精簡。例如:檢測TS數(shù)據(jù)流的包同步字0X47,由于該同步頭字節(jié)并不是唯一的,中間可能有碼字也恰為其值。因此,一般情況下,F(xiàn)PGA搜索同步碼字的邏輯如下:首先找到第一個0X47,然后進行計數(shù),計到187字節(jié)后,再檢測是否為0X47,如果是,輸出包同步信號;接著每隔187檢測一次,如是0X47,則繼續(xù)輸出包同步信號,如不是,則從事開始搜索0X47。
而在該系統(tǒng)的設計中,并沒有采用這種方法,而是利用了I/O FIFO的9比特特性,F(xiàn)PGA直接搜索9位包同步字節(jié)0X147。另外,在PCR域補償計數(shù)的模塊中,也存在一個PCR域確認的問題。PCR域的長度為6個字節(jié)48位碼字(42位有效碼字加6位保留位),在FPGA已經(jīng)裝載PCR域的初值后,完全可以將PCR域中的6個字節(jié)改為預先設定好的協(xié)議碼字(當然,它們必須對于碼流而言是唯一的)。這樣,在TS碼流輸出端進行將補償計數(shù)后的PCR數(shù)值重新裝載進PCR域的工作時,F(xiàn)PGA不僅能夠很方便的識別出PCR域的具體位置,而且還可以從這些協(xié)議碼字中讀出較多的復用信息。
簡潔而有效的FPGA邏輯設計,可以使系統(tǒng)運行的穩(wěn)定性得到很大的改善。
評論