新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PCI接口IP核的DVB碼流接收系統設計

        PCI接口IP核的DVB碼流接收系統設計

        作者: 時間:2011-07-12 來源:網絡 收藏
        主控邏輯模塊

        本文引用地址:http://www.104case.com/article/150478.htm

          當_MT32作為總線主設備進行主模式操作時,主控邏輯模塊對_MT32本地側信號進行控制以執行PCI主模式寫事務,將FIFO的數據傳送給從設備。同時還為DMA引擎提供PCI總線所處的狀態,如總線是否處于數據階段,是否有從設備終止等。

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

          從控邏輯模塊

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

          

          圖3 DMA狀態機流程圖

          DMA引擎模塊

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

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

          

          圖4 PCI DMA傳輸仿真波形圖

          FIFO邏輯控制模塊

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

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

          結果

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

          結語

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


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 黄浦区| 许昌市| 冷水江市| 固镇县| 孝感市| 蒙山县| 岳阳县| 林州市| 图们市| 抚州市| 鹤岗市| 高雄县| 洛宁县| 屯门区| 拜泉县| 平武县| 湘西| 义乌市| 双牌县| 周至县| 巩义市| 香港 | 丰城市| 庆元县| 兴义市| 香河县| 黑河市| 招远市| 神农架林区| 府谷县| 蒙自县| 乃东县| 涿鹿县| 古交市| 健康| 张家川| 淳化县| 龙山县| 郧西县| 绥芬河市| 灵台县|