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