一種基于PCI IP核的碼流接收卡的設計
隨著數字化廣播電視技術的迅速發(fā)展和基于MPEG-2標準的圖像壓縮和復用技術的完善,利用PC對大容量信息的處理變得日益重要,如基于PC的軟復用器的實現,使得通過PC接收DVB(數字視頻廣播)碼流已逐漸成為一項不可替代的多媒體數據接收技術。因此,設計基于PC平臺的DVB 碼流接收卡是數字廣播電視發(fā)展的需要。
系統(tǒng)硬件模塊設計
系統(tǒng)的硬件電路設計要求:能將傳輸速率為270 Mbps的串行DVB—ASI碼流實時、無損地通過PCI接口傳輸到PC,以供PC上的應用程序做進一步處理。在操作和使用上要方便,在設計上要求結構緊湊、接口簡單、性能可靠、易于升級。系統(tǒng)硬件框圖如圖1所示。
圖1 系統(tǒng)硬件框圖
從圖中可以看出,由于使用了FPGA及PCI IP核,使整個硬件電路顯得特別簡潔。它主要由DVB碼流輸入模塊和核心控制模塊組成。串行DVB傳輸流經同軸電纜進入DVB碼流輸入模塊,轉換為8位并行輸出。核心控制模塊對并行數據進行緩存,并采用DMA方式傳輸給PCI總線,完成本地總線和PCI總線的可靠通信。
DVB碼流輸入模塊
本文選用ASI接口。ASI信號由同軸電纜經BNC接頭輸入,經過互感(用PE65508芯片)轉換為PECL(正向發(fā)射極耦合邏輯)差分電平信號,再經過耦合電路,到達CY7B933的差分線輸入端。 CY7B933是Cypress公司的一種用于點對點高速串行數據通信的接收芯片,它完成碼流輸入模塊的核心功能。它有三種工作模式,這里選用它的解碼模式對輸入信號進行8B/10B解碼和串并轉換。最后輸出經過字節(jié)對齊的8位并行TLL信號,輸出的信號包括 MPEG-2傳輸流和作為同步字使用的逗號字符(在8B/10B傳輸碼規(guī)則中定義為 K28.5專用字符),其輸出速率恒定為27MBps。
核心控制模塊
核心控制模塊由FPGA控制電路和異步FIFO組成。主要完成對輸入ASI信號的緩存和對PCI總線信號的控制的功能。其中最主要的部分是FPGA控制電路。基于整個系統(tǒng)的性能的考慮,選擇Altera公司的EP1C12。這款芯片有12060個邏輯單元,52個RAM塊等資源,完全可以支持本設計的要求。
FPGA控制電路內部框圖如圖2所示,它是本設計的核心部分,對輸入的ASI信號保留有效的DVB傳輸流,發(fā)送到FIFO輸入端進行緩存。并將FIFO緩存后輸出的數據用DMA傳輸方式通過PCI總線實現對PC內存的存取,同時利用FIFO的標志信號控制DMA傳輸過程。下面對FPGA控制電路的各模塊進行介紹。
圖2 FPGA控制電路內部框圖
PCI_MT32功能模塊
要使用PCI_MT32功能模塊就要了解其配置寄存器,配置寄存器中的基址寄存器最為重要,PCI_MT32共提供了6個基址寄存器,可以映射6個存儲器或I/O 空間。在操作系統(tǒng)啟動前后,基址寄存器分別起到兩個作用。在操作系統(tǒng)啟動前,基址寄存器存放定義的空間長度。以使加電軟件以確定在系統(tǒng)中有多少存儲器以及系統(tǒng)中的 I/O 控制器要求多少地址空間,然后才可以把 I/O 控制器映射到合理的地址空間并引導系統(tǒng)。在操作系統(tǒng)啟動后,基址寄存器又要起到存放基地址的作用,通過對要存取的基址寄存器用配置寫操作寫入基地址,再通過基地址加偏移量就可以訪問想要存取的空間。
主控邏輯模塊
當PCI_MT32作為PCI總線主設備進行主模式操作時,主控邏輯模塊對PCI_MT32本地側信號進行控制以執(zhí)行PCI主模式寫事務,將FIFO的數據傳送給從設備。同時還為DMA引擎提供PCI總線所處的狀態(tài),如總線是否處于數據階段,是否有從設備終止等。
模塊的主要設計思路:當PCI總線仲裁器允許PCI_MT32成為總線主設備時,PCI_MT32功能模塊在本地側輸出lm_adr_ackn信號,表明地址階段開始,此時主控邏輯模塊應在l_adi線提供PCI地址,并在l_cbeni線提供PCI命令。在接下來的數據階段,如果本地側數據已準備好,就使lm_rdyn(本地側主設備準備好)信號有效,并在l_adi線提供數據,在l_cbeni線提供字節(jié)使能。如果從設備被選中且準備好,數據傳輸就開始了。最后,通過通知PCI總線當前周期是本地側最后的數據階段,在完成這次數據傳輸后就進入總線空閑狀態(tài),PCI_MT32不再是總線主設備,一次數據傳輸也就結束了。
從控邏輯模塊
DMA引擎模塊
DMA引擎模塊由DMA寄存器、DMA狀態(tài)機等模塊構成,當PCI_MT32作為PCI總線主設備進行主模式寫操作時,它與主控邏輯模塊共同將FIFO緩存輸出的數據通過DMA操作發(fā)送到PCI_MT32本地信號側。 其中,DMA寄存器的地址直接映射到PCI的地址空間,其基地址由PCI_MT32中的配置寄存器Bar0決定。主機通過訪問這些寄存器來控制DMA操作。寄存器包括控制狀態(tài)寄存器、PCI地址寄存器和中斷狀態(tài)寄存器。DMA狀態(tài)機模塊流程如圖3所示。
圖3 DMA狀態(tài)機流程圖
以下對DMA狀態(tài)機進行簡要描述:狀態(tài)機無數據傳輸時默認停留在空閑狀態(tài)。當PC寫控制狀態(tài)寄存器中的啟動位,就啟動狀態(tài)機,進入裝載寄存器狀態(tài)。自動裝載PCI地址寄存器后進入等待請求狀態(tài)。如果FIFO中的數據已經半滿,進入請求狀態(tài)申請占用PCI總線,接著進入等待允許狀態(tài),等待PCI設備獲得總線的控制權。當PCI設備成為總線主設備,就進入準備狀態(tài)。判斷PCI總線的地址階段結束將要進入數據階段,則進入傳輸狀態(tài),進行數據傳輸。此時,如果從設備提出終止,則返回寄存器有效狀態(tài),根據情況重新申請總線的控制權;如果本次DMA數據傳輸結束或出現PCI異常中斷、PCI系統(tǒng)錯誤、PCI奇偶校驗錯誤、FIFO滿等錯誤時,則分別進入結束狀態(tài)或錯誤狀態(tài),寫中斷狀態(tài)寄存器的相應位,同時發(fā)出中斷信號。PC收到中斷后,讀中斷狀態(tài)寄存器確定中斷類型,以進行下一步操作。最后返回空閑狀態(tài),并清除中斷。
圖4 PCI DMA傳輸仿真波形圖
FIFO邏輯控制模塊
FIFO邏輯控制模塊根據CY7B933輸出的狀態(tài)信號,刪除同步字K28.5,只將有效的數據讀入,并將數據送入異步FIFO緩存。當FIFO空、半滿、滿時,對相應寄存器進行操作或通知DMA引擎模塊,以防止數據的溢出或空讀。
設計結果
在Quartus-II中進行了vhdl源程序仿真。圖4是用DMA方式進行PCI傳輸結果的仿真波形圖。其中ASI_D為模擬輸入的8位ASI碼流,在對相應的DMA寄存器進行操作后,啟動DMA引擎,圖中①處PCI_MT32通過拉低reqn信號發(fā)出總線占用請求信號,②處PCI總線仲裁器通過拉低gntn信號允許PCI_MT32成為主設備。③處進入地址階段,PCI_MT32在ad線上提供地址,在cben線上提供總線命令。在接下來的多個數據階段(圖中④處),PCI_MT32在ad線和cben線上分別提供ASI_D輸入的數據和字節(jié)使能,由于輸入ASI信號是8位,而ad線為32位,因此利用ad信號的低8位來傳輸數據,可見,輸出數據與ASI_D輸入的數據相同。由于DMA傳輸長度的關系,本圖最后通過模擬從設備斷開(圖中⑤處),終止了這次傳輸。由于DMA傳輸沒有結束,在終止后,DMA狀態(tài)機根據判斷狀態(tài),還會自動繼續(xù)傳輸。從圖中可以看出,framen、irdyn、trdyn、devseln等接口控制信號完全符合PCI時序的要求。實現了將ASI信號通過PCI總線與PC進行實時數據傳輸的目的。圖中32位ad信號的高位沒有得到
結語
本系統(tǒng)采用FPGA加PCI IP核的模式實現對高速、大容量DVB傳輸流的實時傳輸,實現了系統(tǒng)設計的目標。選擇PCI總線可以保證在足夠的帶寬下進行數據傳輸。FPGA的應用易于在線升級電路,擴充平臺的功能。IP核的使用使硬件電路更為簡潔、可靠。經過驗證,本文設計的系統(tǒng)可以很好地實現DVB-ASI信號的接收功能,同時,也可以作為其它DVB-ASI應用的基礎平臺,有著良好的應用前景。
評論