《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于PCD656的高速PCI總線接口的設計與實現(xiàn)
基于PCD656的高速PCI總線接口的設計與實現(xiàn)
維庫
摘要: 利用PCI9656和FPGA實現(xiàn)了一種高速PCI總線接口,較全面地論述了總線驅動開發(fā)和局部時序設計的過程,。這種設計提高了總線傳輸速度,,為高速數據采集系統(tǒng)的實現(xiàn)創(chuàng)造了條件。
關鍵詞: FPGA PCI總線 PCD656
Abstract:
Key words :

  現(xiàn)代雷達信號處理具有數據量大,、實時性高等特點,,而總線傳輸的效率決定了系統(tǒng)的性能,目前普遍使用標準化的PCI總線技術,,以便升級更新,。為加快產品開發(fā)和降低設計難度,一般有兩種解決方法:采用通用的PCI芯片或IP核,。目前常用的PCI芯片如PCD054,、PCD052等雖然性能穩(wěn)定、使用方便,,但它們只適用33 MHz,、32位總線接口,受時序設計和應用程序效率等影響,,總線傳輸速度約穩(wěn)定在70 MB·s-1,;使用IP核雖可以兼容66 Hz、64位總線且節(jié)省板卡面積,,但其價格昂貴不利于高校及中小企業(yè)推廣使用,。而PCI9656適用于66 MHz、64位的PCI總線,,因此逐漸成為總線開發(fā)的主流元器件,,使得總線傳輸速度達到了150 MB·s-1甚至更高。

  本文利用高效PCI芯片和FPGA設計了一款64位總線傳輸接口電路,,傳輸速度達到212 MB·s-1,,較以往總線傳輸速度有了較大地提高,滿足了目前高速數據傳輸系統(tǒng)的要求,。

  1 PCI總線接口架構

  本系統(tǒng)主要由PCI9656和FPGA構成,,系統(tǒng)框圖如圖1所示。當主機發(fā)起讀寫操作時PCI9656需要響應其操作,并將相應命令發(fā)送到FPGA進行處理,,F(xiàn)PGA進行處理后將數據和命令通過PCI9656回傳給主機,。PCI9656與主機之間的通信需要相應的設備驅動程序支持,而FPGA響應主機命令則需要配置相應的局部時序,。因此,,本設計主要的工作為設備驅動程序的開發(fā)和FPGA局部時序的設計。

總體傳輸系統(tǒng)框圖

圖1 總體傳輸系統(tǒng)框圖

  2 PCI9656性能概述

  PCI9656是PLX公司推出的一款兼容32位和64位PCI總線標準的橋接芯片,,采用PLX數據流水線結構(Data Pipe Architecture),,內部配有DMA控制器、可編程主模式傳輸及從模式傳輸,;內部有PCI優(yōu)先判決器,,可以支持外部7個外部主控器;可由本地中斷信號LINTi和LINTo生成一個PCI中斷信號INTA,;本地時鐘獨立于PCI時鐘工作,;支持位寬為8位、16位和32位的66,,MHz本地總線,。PCI9656寄存器與PCI9054寄存器兼容,可容易地進行基于32位PCI總線與基于64位PCI總線的軟件移植,。

  PCI 9656具有6條獨立的數據通道,,分別支持Direct Master、Direct Slave以及DMA功能模式下的數據傳輸,。

 ?。?)Direct Master模式。用于局部總線到PCI(CompactPCI)的數據傳輸,,主控設備在局部總線端,。16 QWord(128 Byte)和32 QWords(256Byte)的FIFO各應用于數據的讀、寫通道,。

 ?。?)Direct Slave模式。用于PCI(CompactPCI)到局部總線的數據傳輸,,主控設備在PCI端,。16QWords(128 Byte)和32 QWords(256 Byte)的FIFO各應用于數據的讀、寫通道,。

  (3)DMA模式,。DMA傳輸時PCI9656同時是PCI和局部總線的主控設備,,PCI 9656有兩條DMA通道(Channel 0、Channel 1),,每條通道都由一DMA控制器和32 QWords(256 Byte)雙向FIFO組成,。其DMA方式有常規(guī)的塊模式(Block Mode),、集散模式(Scatter/Gather Mode)和命令模式(Demand Mode)。

  在局部總線端,,根據不同的處理器PCI9656有3種工作模式,。

  (1)M模式,。支持Motorola 32 bit的處理器,,提供了可與MPC850/860 PowerQUICC直接相連的接口。

 ?。?)C模式,。適合大多數處理器的通用模式,比如常用的FPGA,,在本設計中采用此模式,。

  (3)J模式,。與C模式類似,,但其地址線與數據線復用。

 

  3 總線設備驅動開發(fā)

  在Windows環(huán)境下開發(fā)PCI設備驅動程序主要有兩種模型,,即WinDriver和WDM,。本設計使用了WDM驅動模型。開發(fā)PCI設備驅動程序WDM需要處理:硬件訪問,、中斷處理和DMA傳輸3方面問題,。

  3.1 硬件訪問

  X86處理器有兩種獨立的映射空間:I/O空間和內存空間,I/O空間只能通過I/O指令來訪問,,KIoRange類封裝了對I/O空間的操作命令,。對于設計的PCI設備,可以通過實例化KIoRange類來對I/O空間進行相應的操作,。

  對于PCI設備可以使用KMemoryRange類對內存進行相應操作,,具體操作與KIoRange類對I/O空間的操作相似。

  3.2 中斷處理

  驅動程序使用KInterrupt類來實現(xiàn)對中斷操作的處理,,其中包括中斷的初始化,、將一個中斷服務例程連接到一個中斷和解除其連接等。

  中斷服務例程不是KInterrupt類的成員函數,,這是為了減少中斷延遲時間,。中斷處理需要中斷服務例程和延遲過程調用例程,在中斷服務例程中,,首先判斷該中斷是否是自己設備產生的,,若不是,則返回False;若是,,則請求一個延遲過程調用例程(DPC),。

  3.3 DMA傳輸

  PCI9656使用DMA方式進行數據傳輸。實現(xiàn)DMA傳輸需要3個類:KDmaAdapter,,KDmaTransfer和KCommonDmaBuffer,。其中,KDmaAdapter類用于建立一個DMA適配器,,它說明了DMA通道的特性,,如總線寬度,單次傳輸最大個數等,,需要注意的是本設備使用的是64位總線寬度,,因此需要特別指出;KDmaTransfer類用于DMA傳輸控制,,如傳輸開始,、傳輸字節(jié)數等;KCommonDmaBuffer類用于申請系統(tǒng)提供的公共緩沖區(qū),。具體DMA傳輸設置如下

 ?。?)實例化三個類


 


  OnDmaReady例程中獲取傳輸的物理內存的地址和字節(jié)數,然后設置相應的DMA寄存器值開始DMA傳輸,。DMA傳輸結束后,,應使m_CmxentTm-nsfer無效并刪除。具體流程如圖2所示,。

 DMA傳輸流程

圖2 DMA傳輸流程

  4 局部總線端設計

  本設計中,,局部總線端采用了C模式。C模式下可配置3種數據傳輸方式:單周期方式(Single Cycle Mode),、4字方式(Brust-4 Mode)和連續(xù)突發(fā)傳輸方式(Continuous Mode),,在本設計中采用了連續(xù)突發(fā)方式,可以有效地提高輸出效率,。

  PCI9656在局部總線為為主設備,,始終占用局部總線,局部總線端的FPGA始終響應PCI9656的操作,。方案中使用PCI9656的DMA傳輸模式,,在本地端不需要進行地址譯碼,因此可以對PCI9656的控制信號進行簡化處理,,PCI9656的局部端主要控制信號如下

  ADS#:一次總線訪問開始,;

  Blast#:總線訪問結束;

  LW/R#:讀寫控制信號,;

  Ready#:從設備準備好信號,,有效時表示總線訪問進行中,;

  LHOLD:PCI9656占用本地總線申請信號,;

  LHOLDA:占用本地總線應答信號,;

  Wait#:主設備傳輸暫停信號;

  EOT#:數據傳輸異常中止信號,,用于FIFO溢出或空時中斷數據傳輸,;

  Lint#:用于引起CompaetPCI總線端的中斷信號;

  LRST#:本地總線復位信號,;

  CCS#:配置寄存器選擇信號,。

  在DMA傳輸過程中主要關心的信號可簡化為:ADS#、Blast#,、LW/R#,、Ready#、LHOLD,、LHOLDA,,如圖3所示。

PCI局部總線控制時序

圖3 PCI局部總線控制時序

  圖3中,,lclk為本地總線時鐘,,當PCI9656要發(fā)起一次DMA操作時,先發(fā)送lhold信號申請本地總線,,若本地總線空閑則FPGA發(fā)出lholda信號響應PCI9656,,然后PCI有效ads_n信號以示總線傳輸開始,F(xiàn)PGA使ready_n有效以示總線傳輸正在進行中,,此時本地數據通過局部數據線傳送到PCI總線,,或著數據由PCI總線傳送到局部邏輯。一次傳輸結束時PCI使blast_n信號有效并使lhold信號無效,,然后FPGA使lholda信號和ready_n信號無效,,一次DMA傳輸完成。傳輸中若是DMA讀操作則lwr信號拉低,,若為寫操作則拉高,。

  本地總線位寬為32位,因此本地總線理論速度為264MB·s-1,,由于應用程序的效率問題和傳輸中一些無效狀態(tài)的存在,,目前PCI總線平均速率達到212 MB·s-1,可以滿足目前高速數據采集,、傳輸對總線傳輸速度的要求,。

  PCI9656本地總線時序設計中需要注意blast_n信號有效說明為突發(fā)傳輸最后一個時鐘周期,此時ready_n信號仍然為有效,,否則會造成總線等待,;在正常讀寫訪問中CCS#信號應置高,,否則總線訪問將指向配置空間而非內存或I/O空間。

  5 結束語

  利用PCI9656和FPGA實現(xiàn)了一種高速PCI總線接口,,較全面地論述了總線驅動開發(fā)和局部時序設計的過程,。這種設計提高了總線傳輸速度,為高速數據采集系統(tǒng)的實現(xiàn)創(chuàng)造了條件,。

 

此內容為AET網站原創(chuàng),,未經授權禁止轉載。