加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 13.3  PCI接口芯片PCI9054與FPGA的接口設(shè)計(jì)
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

高速PCI信號(hào)采集卡設(shè)計(jì)與實(shí)現(xiàn)綜合實(shí)例之:PCI接口芯片PCI9054與FPGA的接口設(shè)計(jì)

2013/08/30
3
閱讀需 19 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

?

13.3??PCI接口芯片PCI9054與FPGA的接口設(shè)計(jì)

13.3.1??PCI9054的特性

PCI接口芯片猶如一個(gè)硬核一樣,完成了PCI局部總線端的總線交互,避免了用戶直接對(duì)PCI局部總線進(jìn)行復(fù)雜的操作。同時(shí)它為可編程邏輯器件提供了完備的本地總線接口,使用戶可以較為方便地實(shí)現(xiàn)總線交互的功能,節(jié)省了開(kāi)發(fā)的周期。

PCI9054是由美國(guó)PLX公司生產(chǎn)的先進(jìn)的PCI橋接芯片。它采用了先進(jìn)的PLX數(shù)據(jù)流水線結(jié)構(gòu)技術(shù),支持突發(fā)傳輸速率132MB/s。PCI9054具有如下一些特性。

·??兼容PCI?協(xié)議v2.2。

·??具有電源管理功能。

·??本地總線具有兩個(gè)獨(dú)立的DMA通道。

·??具有6個(gè)可編程FIFO用于無(wú)等待突發(fā)傳送。

·??支持3.3V、5V芯片和接口電平標(biāo)準(zhǔn)。

·??本地時(shí)鐘支持最高50MHz。

如圖13.7所示為PCI9054的內(nèi)部結(jié)構(gòu)圖。

圖13.7??PCI9054內(nèi)部結(jié)構(gòu)圖

13.3.2??PCI9054工作模式

PCI9054的本地總線時(shí)鐘可與PCI總線時(shí)鐘異步,本地總線有3種工作模式:M模式、C模式和J模式,可通過(guò)模式選擇控制引腳MODE[1:0]進(jìn)行控制,如表13.1所示。

表13.1 PCI9054工作模式

模????式

說(shuō)????明

M

32位地址/32位數(shù)據(jù),非復(fù)用方式,用于直接連接MPC850或MPC860

C

32位地址/32位數(shù)據(jù),非復(fù)用方式

J

32位地址/32位數(shù)據(jù),復(fù)用方式

本系統(tǒng)采用的是C模式(MODE[1:0]=?00)。事實(shí)上,C模式能夠滿足絕大多數(shù)的應(yīng)用需求,而且C模式的本地總線操作時(shí)序最簡(jiǎn)單,邏輯控制相對(duì)容易,其開(kāi)發(fā)難度相對(duì)較低,因此,如無(wú)特殊需求,建議采用C模式。

要實(shí)現(xiàn)PCI9054?C模式與FPGA的接口設(shè)計(jì),首先要明確PCI信號(hào)采集設(shè)備對(duì)于主機(jī)來(lái)說(shuō)是主控設(shè)備(MASTER)還是目標(biāo)設(shè)備(TARGET),還要明確是memory操作還是I/O操作。主控設(shè)備可以控制總線驅(qū)動(dòng)地址、數(shù)據(jù)及控制信號(hào);目標(biāo)設(shè)備不能啟動(dòng)總線操作,只能通過(guò)主控設(shè)備來(lái)發(fā)起并驅(qū)動(dòng)相應(yīng)的信號(hào)。

在本系統(tǒng)設(shè)計(jì)中,PCI本地總線端使用的是FPGA而不是上位機(jī),因此PCI9054對(duì)于PCI局部總線來(lái)講是目標(biāo)設(shè)備,由主機(jī)上其他設(shè)備作為主控設(shè)備進(jìn)行PCI總線的操作。對(duì)于PCI本地總線來(lái)講是PCI9054又是主控設(shè)備,通過(guò)PCI9054提供的本地接口啟動(dòng)本地端地址、數(shù)據(jù)及控制總線的操作。

?

首先作為PCI局部總線的目標(biāo)設(shè)備,PCI局部總線通過(guò)控制C/BE[3:0]#來(lái)發(fā)起不同的操作。如表13.2所示為作為目標(biāo)設(shè)備的PCI9054局部總線命令編碼表。

表13.2 PCI目標(biāo)設(shè)備命令編碼表

命?令?類(lèi)?型

C/BE[3:0]碼型

I/O讀

0010

I/O寫(xiě)

0011

存儲(chǔ)器

0110

存儲(chǔ)器寫(xiě)

0111

配置讀

1010

配置寫(xiě)

1011

存儲(chǔ)器重復(fù)讀

1100

PCI雙地址周期

1101

存儲(chǔ)器按行讀

1110

存儲(chǔ)器寫(xiě)無(wú)效

1111

在實(shí)際的操作中,用戶通過(guò)應(yīng)用程序對(duì)PCI設(shè)備進(jìn)行操作時(shí),PCI9054完成了將命令類(lèi)型從PCI局部總線向本地總線的傳遞,并且這個(gè)過(guò)程對(duì)于用戶來(lái)說(shuō)是不可見(jiàn)的。用戶只需要在本地總線端,即FPGA上實(shí)現(xiàn)對(duì)應(yīng)命令類(lèi)型的邏輯設(shè)計(jì)即可。因此,在FPGA內(nèi)部需要對(duì)所有的命令操作進(jìn)行相應(yīng)的設(shè)計(jì)。

在本系統(tǒng)的PCI操作中,包含了I/O讀、寫(xiě),存儲(chǔ)器讀、寫(xiě),配置讀、寫(xiě)等操作,其中的存儲(chǔ)器讀、寫(xiě)操作使用的是Scatter/Gather?DMA傳輸方式。在FPGA中通過(guò)判斷PCI9054傳遞的地址映射空間類(lèi)型和大小來(lái)區(qū)分主機(jī)需要進(jìn)行的操作類(lèi)型。

首先來(lái)認(rèn)識(shí)一下PCI設(shè)備的空間配置情況。

13.3.3??PCI設(shè)備空間配置

通常PCI設(shè)備一般有配置空間、存儲(chǔ)器空間和I/O空間3類(lèi)資源。配置空間是必須的,根據(jù)設(shè)計(jì)需要,后兩種資源可以只包含其中之一。

定義配置空間的目的在于為PCI設(shè)備提供一套適當(dāng)?shù)呐渲么胧怪疂M足現(xiàn)行的和可預(yù)見(jiàn)的系統(tǒng)配置機(jī)構(gòu)。配置空間是一個(gè)容量為256字節(jié)并具有特定記錄結(jié)構(gòu)或模型的地址空間。在實(shí)際的系統(tǒng)配置中,PCI9054的配置空間通過(guò)燒寫(xiě)在EEPROM中的內(nèi)容進(jìn)行配置。

PCI9054有Space?0和Space?1兩個(gè)地址空間,

兩個(gè)地址空間都可以配置成存儲(chǔ)器空間和I/O空間。存儲(chǔ)器空間和I/O空間的配置既有相同之處,也有很大的區(qū)別。其相同點(diǎn)為兩者都以字節(jié)為單位進(jìn)行空間配置。不同之處有以下幾點(diǎn)。

·??存儲(chǔ)器空間支持0~4GB的空間映射,I/O空間只支持0~256字節(jié)的空間映射。

·??存儲(chǔ)器空間支持8/16/32位總線位寬操作,I/O空間只支持32位總線位寬操作。

·??存儲(chǔ)器空間支持單一周期和突發(fā)模式讀寫(xiě)操作,I/O空間只支持單一周期讀寫(xiě)操作。

·??編寫(xiě)驅(qū)動(dòng)時(shí),存儲(chǔ)器空間用程序指針進(jìn)行訪問(wèn),I/O空間則用專(zhuān)用的函數(shù)進(jìn)行訪問(wèn)。

用戶應(yīng)根據(jù)實(shí)際的操作需求選擇合適的空間配置方式和參數(shù),以便獲得正確、高效的總線傳輸性能。例如進(jìn)行數(shù)據(jù)流的傳輸時(shí),最好使用存儲(chǔ)器空間,采用DMA讀寫(xiě)方式;進(jìn)行參數(shù)配置或寄存器值讀取時(shí),使用I/O空間,采用I/O讀寫(xiě)方式。

13.3.4??PCI9054與FPGA接口設(shè)計(jì)

如上所述,F(xiàn)PGA需要根據(jù)PCI9054傳遞的地址映射空間類(lèi)型和大小來(lái)區(qū)分主機(jī)需要進(jìn)行的操作類(lèi)型。因此主機(jī)必須與FPGA達(dá)成一個(gè)一致的操作類(lèi)型與地址映射空間協(xié)議,保證各個(gè)操作之間不會(huì)產(chǎn)生地址空間的重疊。

?

下面介紹一下進(jìn)行I/O操作及DMA操作時(shí),PCI9054與FPGA之間的接口設(shè)計(jì)。

1.I/O操作

如圖13.8所示為PCI9054進(jìn)行目標(biāo)設(shè)備I/O讀寫(xiě)時(shí)的結(jié)構(gòu)圖。其中,左圖為讀結(jié)構(gòu)圖,右圖為寫(xiě)結(jié)構(gòu)圖。每個(gè)圖中的左半部分為PCI9054與PCI局部總線的交互,右半部分為PCI9054與FPGA之間的交互。右半部分包含的控制線、地址線及數(shù)據(jù)線就是進(jìn)行I/O操作時(shí)需要在FPGA內(nèi)進(jìn)行的接口設(shè)計(jì)。

圖13.8??PCI9054目標(biāo)設(shè)備I/O讀寫(xiě)結(jié)構(gòu)圖

首先,PCI局部總線端的主機(jī)或其他設(shè)備作為主設(shè)備發(fā)起對(duì)PCI9054的I/O操作,此時(shí)PCI9054的局部總線端是目標(biāo)設(shè)備。同時(shí)PCI9054的本地總線端又作為主設(shè)備向FPGA發(fā)起I/O操作,F(xiàn)PGA作為目標(biāo)設(shè)備接受總線控制。

如圖13.9所示為PCI9054目標(biāo)設(shè)備Local總線存取過(guò)程圖??梢钥吹剑嫒∵^(guò)程主要是進(jìn)行地址的映射過(guò)程。首先進(jìn)行Local端和PCI端的寄存器配置,再通過(guò)PCI9054內(nèi)部的兩個(gè)目標(biāo)設(shè)備FIFO進(jìn)行存取,主機(jī)根據(jù)寄存器的值即可得到映射位置上的數(shù)據(jù)。

圖13.9??PCI9054目標(biāo)設(shè)備Local總線存取過(guò)程

?

如圖13.10所示為PCI9054目標(biāo)設(shè)備Local總線I/O典型波形圖。它描述了I/O操作時(shí)FPGA內(nèi)的時(shí)序,也是用戶需要進(jìn)行設(shè)計(jì)的時(shí)序。

該波形圖表述了下面幾個(gè)交互過(guò)程。

·??主設(shè)備(主機(jī)或其他設(shè)備)發(fā)起Local總線占用請(qǐng)求LHOLD信號(hào),F(xiàn)PGA應(yīng)答產(chǎn)生LHOLDA信號(hào)允許該請(qǐng)求。

·??主設(shè)備獲得允許后,發(fā)起操作起始信號(hào)ADS#,并提供Local總線讀寫(xiě)方向信號(hào)LW/R#以及地址信號(hào)LA[31:2]。

·??FPGA獲得起始信號(hào)后,發(fā)出總線準(zhǔn)備好信號(hào)READY#,并執(zhí)行相應(yīng)的操作。

·??主設(shè)備完成操作后,發(fā)起操作結(jié)束信號(hào)BLAST#,F(xiàn)PGA捕獲后,改變READY#的狀態(tài)。

·??主設(shè)備捕獲READY#狀態(tài)改變后,釋放Local總線占用信號(hào)LHOLD。

·??FPGA應(yīng)答總線釋放,結(jié)束操作。

圖13.10??PCI9054目標(biāo)設(shè)備Local總線I/O典型波形圖

?

下面是這個(gè)交互過(guò)程中對(duì)應(yīng)的Verilog代碼,其中分配的I/O空間大小為64字節(jié),通過(guò)對(duì)LA[4]譯碼實(shí)現(xiàn)操作類(lèi)型的區(qū)分。

always?@(posedge?LCLK)

?????LHOLDA?<=?LHOLD;????????????????????????? //總線請(qǐng)求及應(yīng)答

always?@(posedge?LCLK?or?negedge?RESET_)begin

?????if(!RESET_)??????????????????????????????? //PCI9054復(fù)位

?????????READY1_??<=?1'b1;

?????else?if(!ADS_?&?LWR_?&?BLAST_?&?LA[31:4]==28'h0000_001)

?????????READY1_?<=?1'b0;???????????????????? //起始狀態(tài),通過(guò)地址線判斷操作類(lèi)型

?????else?if(ADS_?&?LWR_?&?BLAST_?&?!READY1_)begin

??????????//TODO???????????????????????????????? //中間狀態(tài),可執(zhí)行相應(yīng)的操作

??????????READY1_?<=?1'b0;

??????????end

?????else?if(ADS_?&?LWR_?&?!BLAST_?&?!READY1_)begin

??????????//TODO??????????????????????????????? //結(jié)束狀態(tài),可執(zhí)行相應(yīng)的操作

??????????READY1_?<=?1'b1;

??????????end

?????else

??????????READY1_?<=?1'b1;?????????????????? //無(wú)操作狀態(tài)

?????end

2.DMA

如圖13.11所示為PCI9054進(jìn)行目標(biāo)設(shè)備DMA讀寫(xiě)時(shí)的結(jié)構(gòu)圖。其中,左圖為PCI-to-Local結(jié)構(gòu)圖,右圖為寫(xiě)結(jié)構(gòu)圖。每個(gè)圖中左右兩部分完成的交互功能同I/O操作一樣。

不同的是,進(jìn)行DMA操作時(shí),不管是與PCI局部總線還是PCI本地總線交互,PCI9054始終是主設(shè)備。主機(jī)或FPGA只需發(fā)出DMA開(kāi)始信號(hào)后,即可由PCI9054完成DMA的所有操作。可見(jiàn),DMA操作可以大幅度減輕主機(jī)端CPU的負(fù)擔(dān)。

PCI9054支持Block(塊)DMA和Scatter/Gather?DMA兩種傳輸模式,前者使用連續(xù)的內(nèi)存塊進(jìn)行地址映射,后者可以通過(guò)自動(dòng)添加的指針鏈,使用不連續(xù)的內(nèi)存塊實(shí)現(xiàn)大塊內(nèi)存的地址映射,可提高系統(tǒng)內(nèi)存的使用效率。

如圖13.12所示為Scatter/Gather?DMA模式存取過(guò)程圖??梢钥吹?,DMA存取過(guò)程同樣也是進(jìn)行地址的映射過(guò)程。在這種模式下增加的是描述指針寄存器,通過(guò)它實(shí)現(xiàn)零散內(nèi)存的連續(xù)化。

圖13.11??PCI9054目標(biāo)設(shè)備DMA讀寫(xiě)結(jié)構(gòu)圖

圖13.12??Scatter/Gather?DMA模式存取過(guò)程

?

如圖13.13所示為PCI9054目標(biāo)設(shè)備Local總線DMA典型波形圖。它描述了DMA操作時(shí)FPGA內(nèi)的時(shí)序,也是用戶需要進(jìn)行設(shè)計(jì)的時(shí)序。

圖13.13??PCI9054目標(biāo)設(shè)備Local總線DMA典型波形圖

該波形圖表述了下面幾個(gè)交互過(guò)程。

·??主設(shè)備(主機(jī)或其他設(shè)備)發(fā)起Local總線占用請(qǐng)求LHOLD信號(hào),F(xiàn)PGA應(yīng)答產(chǎn)生LHOLDA信號(hào)允許該請(qǐng)求。

·??主設(shè)備獲得允許后,發(fā)起操作起始信號(hào)ADS#,并提供Local總線讀寫(xiě)方向信號(hào)LW/R#以及地址信號(hào)LA[31:2]。

·??FPGA獲得起始信號(hào)后,發(fā)出總線準(zhǔn)備好信號(hào)READY#,并執(zhí)行相應(yīng)的操作;此時(shí)LA地址會(huì)根據(jù)LBE字節(jié)使能的設(shè)置每讀寫(xiě)一次(周期)遞增一次,如圖中LA地址所示。

·??主設(shè)備完成操作后,發(fā)起操作結(jié)束信號(hào)BLAST#,F(xiàn)PGA捕獲后,改變READY#狀態(tài)。

·??主設(shè)備捕獲READY#狀態(tài)改變后,釋放Local總線占用信號(hào)LHOLD。

·??FPGA應(yīng)答總線釋放,結(jié)束操作。

?

下面是這個(gè)交互過(guò)程中對(duì)應(yīng)的Verilog代碼,其中分配的DMA空間大小為1MB,通過(guò)對(duì)LA[20]譯碼實(shí)現(xiàn)操作類(lèi)型的區(qū)分。

always?@(posedge?LCLK)

?????LHOLDA?<=?LHOLD;??????????????????????? //總線請(qǐng)求及應(yīng)答

always?@(posedge?LCLK?or?negedge?RESET_)begin

?????if(!RESET_)????????????????????????????? //PCI9054復(fù)位

?????????READY2_?<=?1'b1;

?????else?if(!ADS_?&?LWR_?&?BLAST_?&?LA[31:20]==?12'h001)

?????????READY2_?<=?1'b0;??????????????????? //起始狀態(tài),通過(guò)地址線判斷操作類(lèi)型

?????else?if(ADS_?&?LWR_?&?BLAST_?&?!READY2_)begin

??????????//TODO???????????????????????????????//中間狀態(tài),可執(zhí)行相應(yīng)操作

??????????READY2_?<=?1'b0;??????????

??????????end

?????else?if(ADS_?&?LWR_?&?!BLAST_?&?!READY2_)begin

??????????//TODO?????????????????????????????? //結(jié)束狀態(tài),可執(zhí)行相應(yīng)操作

??????????READY2_?<=?1'b1;

??????????end

?????else

??????????READY2_?<=?1'b1;?????????????????? //無(wú)操作狀態(tài)

?????End

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

華清遠(yuǎn)見(jiàn)(www.farsight.com.cn)是國(guó)內(nèi)領(lǐng)先嵌入師培訓(xùn)機(jī)構(gòu),2004年注冊(cè)于中國(guó)北京海淀高科技園區(qū),除北京總部外,上海、深圳、成都、南京、武漢、西安、廣州均有直營(yíng)分公司。華清遠(yuǎn)見(jiàn)除提供嵌入式相關(guān)的長(zhǎng)期就業(yè)培訓(xùn)、短期高端培訓(xùn)、師資培訓(xùn)及企業(yè)員工內(nèi)訓(xùn)等業(yè)務(wù)外,其下屬研發(fā)中心還負(fù)責(zé)嵌入式、Android及物聯(lián)網(wǎng)方向的教學(xué)實(shí)驗(yàn)平臺(tái)的研發(fā)及培訓(xùn)教材的出版,截止目前為止已公開(kāi)出版70余本嵌入式/移動(dòng)開(kāi)發(fā)/物聯(lián)網(wǎng)相關(guān)圖書(shū)。企業(yè)理念:專(zhuān)業(yè)始于專(zhuān)注 卓識(shí)源于遠(yuǎn)見(jiàn)。企業(yè)價(jià)值觀:做良心教育、做專(zhuān)業(yè)教育,更要做受人尊敬的職業(yè)教育。