《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 一種基于PCI IP核的碼流接收卡的設(shè)計
一種基于PCI IP核的碼流接收卡的設(shè)計
摘要: 本系統(tǒng)采用FPGA加PCI IP核的模式實現(xiàn)對高速,、大容量DVB傳輸流的實時傳輸,實現(xiàn)了系統(tǒng)設(shè)計的目標,。選擇PCI總線可以保證在足夠的帶寬下進行數(shù)據(jù)傳輸,。FPGA的應(yīng)用易于在線升級電路,,擴充平臺的功能。IP核的使用使硬件電路更為簡潔,、可靠,。經(jīng)過驗證,本文設(shè)計的系統(tǒng)可以很好地實現(xiàn)DVB-ASI信號的接收功能,,同時,,也可以作為其它DVB-ASI應(yīng)用的基礎(chǔ)平臺,有著良好的應(yīng)用前景,。
關(guān)鍵詞: FPGA PCI IP核 異步串行接口 DVB
Abstract:
Key words :

摘 要:本文介紹了一種基于Altera公司的PCI接口IP核DVB碼流接收系統(tǒng)的硬件設(shè)計方案及設(shè)計要點的分析,。該設(shè)計采用Altera公司的新一代FPGA芯片EP1C12和PCI IP核以及高速串行數(shù)據(jù)通信接收芯片,實現(xiàn)DVB-ASI信號的接收,。
關(guān)鍵詞:DVB,;異步串行接口;PCI,;IP核

前言
       隨著數(shù)字化廣播電視技術(shù)的迅速發(fā)展和基于MPEG-2標準的圖像壓縮和復(fù)用技術(shù)的完善,,利用PC對大容量信息的處理變得日益重要,,如基于PC的軟復(fù)用器的實現(xiàn),使得通過PC接收DVB(數(shù)字視頻廣播)碼流已逐漸成為一項不可替代的多媒體數(shù)據(jù)接收技術(shù),。因此,,設(shè)計基于PC平臺的DVB 碼流接收卡是數(shù)字廣播電視發(fā)展的需要。
由于DVB-ASI信號的平均傳輸速率為270 Mbps,,而DVB傳輸流又要求保證接收的實時性,,因此本文選擇了PCI總線。33MHz,、32位的PCI總線的數(shù)據(jù)傳輸速率最高可達133MBps, 完全可以滿足高速實時傳輸?shù)男枨?。選擇了Altera公司的PCI編譯器軟件包來實現(xiàn)PCI接口控制電路,。該軟件包為PCI接口提供了一個完整的解決辦法,,包含了PCI控制電路的所有功能。用戶可以通過修改參數(shù)生成所需的IP核模塊,,以設(shè)計自己的外部設(shè)備接口邏輯,。本文選擇了其生成的PCI_MT32功能模塊。

系統(tǒng)硬件模塊設(shè)計
        系統(tǒng)的硬件電路設(shè)計要求:能將傳輸速率為270 Mbps的串行DVB—ASI碼流實時,、無損地通過PCI接口傳輸?shù)絇C,,以供PC上的應(yīng)用程序做進一步處理。在操作和使用上要方便,,在設(shè)計上要求結(jié)構(gòu)緊湊,、接口簡單、性能可靠,、易于升級,。系統(tǒng)硬件框圖如圖1所示。

        從圖中可以看出,,由于使用了FPGA及PCI IP核,,使整個硬件電路顯得特別簡潔。它主要由DVB碼流輸入模塊和核心控制模塊組成,。串行DVB傳輸流經(jīng)同軸電纜進入DVB碼流輸入模塊,,轉(zhuǎn)換為8位并行輸出。核心控制模塊對并行數(shù)據(jù)進行緩存,,并采用DMA方式傳輸給PCI總線,,完成本地總線和PCI總線的可靠通信。

DVB碼流輸入模塊
        本文選用ASI接口,。ASI信號由同軸電纜經(jīng)BNC接頭輸入,,經(jīng)過互感(用PE65508芯片)轉(zhuǎn)換為PECL(正向發(fā)射極耦合邏輯)差分電平信號,再經(jīng)過耦合電路,,到達CY7B933的差分線輸入端,。 CY7B933是Cypress公司的一種用于點對點高速串行數(shù)據(jù)通信的接收芯片,,它完成碼流輸入模塊的核心功能。它有三種工作模式,,這里選用它的解碼模式對輸入信號進行8B/10B解碼和串并轉(zhuǎn)換,。最后輸出經(jīng)過字節(jié)對齊的8位并行TLL信號,輸出的信號包括 MPEG-2傳輸流和作為同步字使用的逗號字符(在8B/10B傳輸碼規(guī)則中定義為 K28.5專用字符),,其輸出速率恒定為27MBps,。


圖1 系統(tǒng)硬件框圖

核心控制模塊
        核心控制模塊由FPGA控制電路和異步FIFO組成。主要完成對輸入ASI信號的緩存和對PCI總線信號的控制的功能,。其中最主要的部分是FPGA控制電路,。基于整個系統(tǒng)的性能的考慮,,選擇Altera公司的EP1C12,。這款芯片有12060個邏輯單元,52個RAM塊等資源,,完全可以支持本設(shè)計的要求,。

         FPGA控制電路內(nèi)部框圖如圖2所示,它是本設(shè)計的核心部分,,對輸入的ASI信號保留有效的DVB傳輸流,,發(fā)送到FIFO輸入端進行緩存。并將FIFO緩存后輸出的數(shù)據(jù)用DMA傳輸方式通過PCI總線實現(xiàn)對PC內(nèi)存的存取,,同時利用FIFO的標志信號控制DMA傳輸過程,。下面對FPGA控制電路的各模塊進行介紹。

PCI_MT32功能模塊
        本文在選擇PCI接口芯片時,,選擇了Altera公司的PCI 編譯器軟件包,,它可以參數(shù)化地生成用于PCI接口的IP核----MegaCore。這個可編譯和綜合的MegaCore有以下4種宏功能模塊:PCI_MT64,、PCI_MT32,、PCI_T64和PCI_T32。它們都可以完成總線協(xié)議的轉(zhuǎn)換,,將復(fù)雜的,、電氣和時序要求高的PCI總線邏輯轉(zhuǎn)換為易于操作的本地接口邏輯,遵循PCI總線協(xié)議2.2版,,經(jīng)過嚴格的工業(yè)級驗證并支持多款優(yōu)化FPGA,。其中,PCI_MT32是支持33/66MHz工作頻率,、32位PCI總線,、支持主/從模式的PCI IP功能模塊??紤]到市場的需求,,通常的PC主板都支持32位PCI,,且在主模式下DMA控制器才能工作,因此選擇了PCI_MT32,。 本地信號都以l (local)開頭,,其中以lt_開頭的是從控信號,以lm_開頭的是主控信號,。

        要使用PCI_MT32功能模塊就要了解其配置寄存器,,配置寄存器中的基址寄存器最為重要,PCI_MT32共提供了6個基址寄存器,,可以映射6個存儲器或I/O 空間,。在操作系統(tǒng)啟動前后,基址寄存器分別起到兩個作用,。在操作系統(tǒng)啟動前,,基址寄存器存放定義的空間長度。以使加電軟件以確定在系統(tǒng)中有多少存儲器以及系統(tǒng)中的 I/O 控制器要求多少地址空間,,然后才可以把 I/O 控制器映射到合理的地址空間并引導(dǎo)系統(tǒng),。在操作系統(tǒng)啟動后,,基址寄存器又要起到存放基地址的作用,,通過對要存取的基址寄存器用配置寫操作寫入基地址,再通過基地址加偏移量就可以訪問想要存取的空間,。


圖2 FPGA控制電路內(nèi)部框圖

主控邏輯模塊
        當(dāng)PCI_MT32作為PCI總線主設(shè)備進行主模式操作時,,主控邏輯模塊對PCI_MT32本地側(cè)信號進行控制以執(zhí)行PCI主模式寫事務(wù),將FIFO的數(shù)據(jù)傳送給從設(shè)備,。同時還為DMA引擎提供PCI總線所處的狀態(tài),,如總線是否處于數(shù)據(jù)階段,是否有從設(shè)備終止等,。

        模塊的主要設(shè)計思路:當(dāng)PCI總線仲裁器允許PCI_MT32成為總線主設(shè)備時,,PCI_MT32功能模塊在本地側(cè)輸出lm_adr_ackn信號,表明地址階段開始,,此時主控邏輯模塊應(yīng)在l_adi線提供PCI地址,,并在l_cbeni線提供PCI命令。在接下來的數(shù)據(jù)階段,,如果本地側(cè)數(shù)據(jù)已準備好,,就使lm_rdyn(本地側(cè)主設(shè)備準備好)信號有效,并在l_adi線提供數(shù)據(jù),,在l_cbeni線提供字節(jié)使能,。如果從設(shè)備被選中且準備好,數(shù)據(jù)傳輸就開始了,。最后,,通過通知PCI總線當(dāng)前周期是本地側(cè)最后的數(shù)據(jù)階段,,在完成這次數(shù)據(jù)傳輸后就進入總線空閑狀態(tài),PCI_MT32不再是總線主設(shè)備,,一次數(shù)據(jù)傳輸也就結(jié)束了,。

從控邏輯模塊
       當(dāng)PCI_MT32作為PCI總線從設(shè)備進行目標事務(wù)操作時,從控邏輯模塊對PCI_MT32本地側(cè)信號進行控制,。PC通過讀本地側(cè)相應(yīng)寄存器,,了解當(dāng)前狀態(tài),通過對相應(yīng)DMA寄存器的寫操作,,來啟動DMA引擎,。由于對寄存器的讀寫只用到目標單周期事務(wù),且大部分信號由主機控制,,從控邏輯相對簡單,。主要是保證在要存取的目標地址命中,且frame信號有效時,,trdyn(從設(shè)備準備好)信號有效,。


圖3 DMA狀態(tài)機流程圖


DMA引擎模塊
       DMA引擎模塊由DMA寄存器、DMA狀態(tài)機等模塊構(gòu)成,,當(dāng)PCI_MT32作為PCI總線主設(shè)備進行主模式寫操作時,,它與主控邏輯模塊共同將FIFO緩存輸出的數(shù)據(jù)通過DMA操作發(fā)送到PCI_MT32本地信號側(cè)。 其中,,DMA寄存器的地址直接映射到PCI的地址空間,,其基地址由PCI_MT32中的配置寄存器Bar0決定。主機通過訪問這些寄存器來控制DMA操作,。寄存器包括控制狀態(tài)寄存器,、PCI地址寄存器和中斷狀態(tài)寄存器。DMA狀態(tài)機模塊流程如圖3所示,。

       以下對DMA狀態(tài)機進行簡要描述:狀態(tài)機無數(shù)據(jù)傳輸時默認停留在空閑狀態(tài),。當(dāng)PC寫控制狀態(tài)寄存器中的啟動位,就啟動狀態(tài)機,,進入裝載寄存器狀態(tài),。自動裝載PCI地址寄存器后進入等待請求狀態(tài)。如果FIFO中的數(shù)據(jù)已經(jīng)半滿,,進入請求狀態(tài)申請占用PCI總線,,接著進入等待允許狀態(tài),等待PCI設(shè)備獲得總線的控制權(quán),。當(dāng)PCI設(shè)備成為總線主設(shè)備,,就進入準備狀態(tài)。判斷PCI總線的地址階段結(jié)束將要進入數(shù)據(jù)階段,則進入傳輸狀態(tài),,進行數(shù)據(jù)傳輸,。此時,如果從設(shè)備提出終止,,則返回寄存器有效狀態(tài),,根據(jù)情況重新申請總線的控制權(quán);如果本次DMA數(shù)據(jù)傳輸結(jié)束或出現(xiàn)PCI異常中斷,、PCI系統(tǒng)錯誤,、PCI奇偶校驗錯誤、FIFO滿等錯誤時,,則分別進入結(jié)束狀態(tài)或錯誤狀態(tài),,寫中斷狀態(tài)寄存器的相應(yīng)位,同時發(fā)出中斷信號,。PC收到中斷后,,讀中斷狀態(tài)寄存器確定中斷類型,以進行下一步操作,。最后返回空閑狀態(tài),,并清除中斷。


圖4 PCI DMA傳輸仿真波形圖


FIFO邏輯控制模塊 
        FIFO邏輯控制模塊根據(jù)CY7B933輸出的狀態(tài)信號,,刪除同步字K28.5,,只將有效的數(shù)據(jù)讀入,并將數(shù)據(jù)送入異步FIFO緩存,。當(dāng)FIFO空,、半滿、滿時,,對相應(yīng)寄存器進行操作或通知DMA引擎模塊,以防止數(shù)據(jù)的溢出或空讀,。

        異步FIFO在核心控制模塊中,,主要起到兩個作用。一是數(shù)據(jù)緩存,,在系統(tǒng)進行DMA操作,,將數(shù)據(jù)從ASI接口寫入PC內(nèi)存時,DVB-ASI數(shù)據(jù)仍在源源不斷地輸入系統(tǒng),,F(xiàn)IFO可以將這些數(shù)據(jù)緩存,,以防止數(shù)據(jù)丟失。二是時鐘隔離作用,,輸入的ASI信號時鐘是27MHz,,而PCI時鐘達到33MHz,這就要求對兩個頻率不同的時鐘進行同步,,異步FIFO的數(shù)據(jù)輸入和輸出分別使用不同的時鐘,,從而實現(xiàn)時鐘的隔離和無縫拼接,。由于本設(shè)計對FIFO容量的要求較大,因此不采用Megafunction技術(shù)構(gòu)造,,而使用專門的高速FIFO芯片,。

設(shè)計結(jié)果
         在Quartus-II中進行了vhdl源程序仿真。圖4是用DMA方式進行PCI傳輸結(jié)果的仿真波形圖,。其中ASI_D為模擬輸入的8位ASI碼流,,在對相應(yīng)的DMA寄存器進行操作后,啟動DMA引擎,,圖中①處PCI_MT32通過拉低reqn信號發(fā)出總線占用請求信號,,②處PCI總線仲裁器通過拉低gntn信號允許PCI_MT32成為主設(shè)備。③處進入地址階段,,PCI_MT32在ad線上提供地址,,在cben線上提供總線命令。在接下來的多個數(shù)據(jù)階段(圖中④處),,PCI_MT32在ad線和cben線上分別提供ASI_D輸入的數(shù)據(jù)和字節(jié)使能,,由于輸入ASI信號是8位,而ad線為32位,,因此利用ad信號的低8位來傳輸數(shù)據(jù),,可見,輸出數(shù)據(jù)與ASI_D輸入的數(shù)據(jù)相同。由于DMA傳輸長度的關(guān)系,,本圖最后通過模擬從設(shè)備斷開(圖中⑤處),,終止了這次傳輸。由于DMA傳輸沒有結(jié)束,,在終止后,,DMA狀態(tài)機根據(jù)判斷狀態(tài),還會自動繼續(xù)傳輸,。從圖中可以看出,,framen、irdyn,、trdyn,、devseln等接口控制信號完全符合PCI時序的要求。實現(xiàn)了將ASI信號通過PCI總線與PC進行實時數(shù)據(jù)傳輸?shù)哪康?。圖中32位ad信號的高位沒有得到充分利用,,如果需要,可以很方便地利用它們將電路升級為兩路或4路的多路DVB-ASI碼流接收卡,。如果使用支持64位PCI總線的PCI_MT64功能模塊,,則最多可以實現(xiàn)8路ASI信號的接收。

結(jié)語
        本系統(tǒng)采用FPGA加PCI IP核的模式實現(xiàn)對高速、大容量DVB傳輸流的實時傳輸,,實現(xiàn)了系統(tǒng)設(shè)計的目標,。選擇PCI總線可以保證在足夠的帶寬下進行數(shù)據(jù)傳輸。FPGA的應(yīng)用易于在線升級電路,,擴充平臺的功能,。IP核的使用使硬件電路更為簡潔、可靠,。經(jīng)過驗證,,本文設(shè)計的系統(tǒng)可以很好地實現(xiàn)DVB-ASI信號的接收功能,同時,,也可以作為其它DVB-ASI應(yīng)用的基礎(chǔ)平臺,,有著良好的應(yīng)用前景。

參考文獻:
1 Altera Corporation. PCI Compiler User Guide. October 2005
2 李貴山,,戚德虎. PCI局部總線開發(fā)者指南[M].西安:西安電子科技大學(xué)出版社,,1997
3 紀獻永,黃皆雨等. DVB-ASI信號接收與發(fā)送系統(tǒng)的研究. 北京:電視技術(shù),,2004(11): 87-88

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。