《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 模擬設(shè)計(jì) > 設(shè)計(jì)應(yīng)用 > 一種基于PCD656的高速PCI總線接口的設(shè)計(jì)與實(shí)現(xiàn)
一種基于PCD656的高速PCI總線接口的設(shè)計(jì)與實(shí)現(xiàn)
摘要: 本文利用高效PCI芯片和FPGA設(shè)計(jì)了一款64位總線傳輸接口電路,傳輸速度達(dá)到212 MB·s-1,較以往總線傳輸速度有了較大地提高,滿足了目前高速數(shù)據(jù)傳輸系統(tǒng)的要求。
Abstract:
Key words :

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

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

  1 PCI總線接口架構(gòu)

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

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

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

  2 PCI9656性能概述

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

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

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

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

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

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

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

  (2)C模式。適合大多數(shù)處理器的通用模式,比如常用的FPGA,在本設(shè)計(jì)中采用此模式。

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

  3 總線設(shè)備驅(qū)動(dòng)開(kāi)發(fā)

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

  3.1 硬件訪問(wèn)

  X86處理器有兩種獨(dú)立的映射空間:I/O空間和內(nèi)存空間,I/O空間只能通過(guò)I/O指令來(lái)訪問(wèn),KIoRange類封裝了對(duì)I/O空間的操作命令。對(duì)于設(shè)計(jì)的PCI設(shè)備,可以通過(guò)實(shí)例化KIoRange類來(lái)對(duì)I/O空間進(jìn)行相應(yīng)的操作。

  對(duì)于PCI設(shè)備可以使用KMemoryRange類對(duì)內(nèi)存進(jìn)行相應(yīng)操作,具體操作與KIoRange類對(duì)I/O空間的操作相似。

  3.2 中斷處理

  驅(qū)動(dòng)程序使用KInterrupt類來(lái)實(shí)現(xiàn)對(duì)中斷操作的處理,其中包括中斷的初始化、將一個(gè)中斷服務(wù)例程連接到一個(gè)中斷和解除其連接等。

  中斷服務(wù)例程不是KInterrupt類的成員函數(shù),這是為了減少中斷延遲時(shí)間。中斷處理需要中斷服務(wù)例程和延遲過(guò)程調(diào)用例程,在中斷服務(wù)例程中,首先判斷該中斷是否是自己設(shè)備產(chǎn)生的,若不是,則返回False;若是,則請(qǐng)求一個(gè)延遲過(guò)程調(diào)用例程(DPC)。

  3.3 DMA傳輸

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

 ?。?)實(shí)例化三個(gè)類

  OnDmaReady例程中獲取傳輸?shù)奈锢韮?nèi)存的地址和字節(jié)數(shù),然后設(shè)置相應(yīng)的DMA寄存器值開(kāi)始DMA傳輸。DMA傳輸結(jié)束后,應(yīng)使m_CmxentTm-nsfer無(wú)效并刪除。具體流程如圖2所示。

DMA傳輸流程

圖2 DMA傳輸流程

  4 局部總線端設(shè)計(jì)

  本設(shè)計(jì)中,局部總線端采用了C模式。C模式下可配置3種數(shù)據(jù)傳輸方式:?jiǎn)沃芷诜绞剑⊿ingle Cycle Mode)、4字方式(Brust-4 Mode)和連續(xù)突發(fā)傳輸方式(Continuous Mode),在本設(shè)計(jì)中采用了連續(xù)突發(fā)方式,可以有效地提高輸出效率。

  PCI9656在局部總線為為主設(shè)備,始終占用局部總線,局部總線端的FPGA始終響應(yīng)PCI9656的操作。方案中使用PCI9656的DMA傳輸模式,在本地端不需要進(jìn)行地址譯碼,因此可以對(duì)PCI9656的控制信號(hào)進(jìn)行簡(jiǎn)化處理,PCI9656的局部端主要控制信號(hào)如下

  ADS#:一次總線訪問(wèn)開(kāi)始;

  Blast#:總線訪問(wèn)結(jié)束;

  LW/R#:讀寫控制信號(hào);

  Ready#:從設(shè)備準(zhǔn)備好信號(hào),有效時(shí)表示總線訪問(wèn)進(jìn)行中;

  LHOLD:PCI9656占用本地總線申請(qǐng)信號(hào);

  LHOLDA:占用本地總線應(yīng)答信號(hào);

  Wait#:主設(shè)備傳輸暫停信號(hào);

  EOT#:數(shù)據(jù)傳輸異常中止信號(hào),用于FIFO溢出或空時(shí)中斷數(shù)據(jù)傳輸;

  Lint#:用于引起CompaetPCI總線端的中斷信號(hào);

  LRST#:本地總線復(fù)位信號(hào);

  CCS#:配置寄存器選擇信號(hào)。

  在DMA傳輸過(guò)程中主要關(guān)心的信號(hào)可簡(jiǎn)化為:ADS#、Blast#、LW/R#、Ready#、LHOLD、LHOLDA,如圖3所示。

PCI局部總線控制時(shí)序

圖3 PCI局部總線控制時(shí)序

  圖3中,lclk為本地總線時(shí)鐘,當(dāng)PCI9656要發(fā)起一次DMA操作時(shí),先發(fā)送lhold信號(hào)申請(qǐng)本地總線,若本地總線空閑則FPGA發(fā)出lholda信號(hào)響應(yīng)PCI9656,然后PCI有效ads_n信號(hào)以示總線傳輸開(kāi)始,F(xiàn)PGA使ready_n有效以示總線傳輸正在進(jìn)行中,此時(shí)本地?cái)?shù)據(jù)通過(guò)局部數(shù)據(jù)線傳送到PCI總線,或著數(shù)據(jù)由PCI總線傳送到局部邏輯。一次傳輸結(jié)束時(shí)PCI使blast_n信號(hào)有效并使lhold信號(hào)無(wú)效,然后FPGA使lholda信號(hào)和ready_n信號(hào)無(wú)效,一次DMA傳輸完成。傳輸中若是DMA讀操作則lwr信號(hào)拉低,若為寫操作則拉高。

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

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

  5 結(jié)束語(yǔ)

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

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