PCI總線接口設(shè)計(jì)及專用接口芯片的應(yīng)用
1 引言
隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展和普及,數(shù)據(jù)采集系統(tǒng)迅速得到了廣泛的應(yīng)用。數(shù)據(jù)采集系統(tǒng)性能的好壞主要取決于它的精度和速度。在保證精度的條件下,應(yīng)用盡可能高的采樣速度,以滿足對(duì)信號(hào)的實(shí)時(shí)采集和實(shí)時(shí)處理;而要實(shí)現(xiàn)高速數(shù)據(jù)采集,不僅需要高性能的adc等設(shè)備,而且需要高速的數(shù)據(jù)傳輸。目前isa總線己經(jīng)逐 漸退出了歷史舞臺(tái),開發(fā)基于pci總線的數(shù)據(jù)采集卡己經(jīng)是勢(shì)在必行。
2 pci總線接口概述
pci總線的信號(hào)線包括32根地址數(shù)據(jù)復(fù)用線、仲裁、接口控制線、總線命令字節(jié)允許復(fù)用線和系統(tǒng)復(fù)位等。在進(jìn)行基本的數(shù)據(jù)傳輸操作時(shí),數(shù)據(jù)線先出現(xiàn)地址, 同時(shí)總線命令出現(xiàn)在c/be〔3:0〕上,設(shè)備根據(jù)這些命令判斷所要進(jìn)行的操作,在接下來的數(shù)據(jù)節(jié)拍中傳輸數(shù)據(jù),如果傳送或接收方?jīng)]有準(zhǔn)備好,那么就插入等待周期。pci總線的其它操作還有設(shè)備選擇、配置周期和中斷應(yīng)答等。
pci總線協(xié)議復(fù)雜,需要在外部設(shè)備和pci總線之間增加一個(gè)接口電路。接口電路實(shí)現(xiàn)比較困難,目前實(shí)現(xiàn)pci接口的方法主要有:利用cpld或fpga 可編程邏輯器件和利用專門的pci接口芯片等多種方法實(shí)現(xiàn)。pci接口芯片具有設(shè)計(jì)簡(jiǎn)單、功能強(qiáng)大、可靠性好等特點(diǎn),從而大大減少了開發(fā)人員的工作量。在 實(shí)際工作中我們綜合各方面的因素,在本文選擇了pci9054。
3 pci9054芯片
3.1 pci總線通用接口芯片簡(jiǎn)介
pci9054是plx公司生產(chǎn)的pci總線通用接口芯片,采用先進(jìn)的plx數(shù)據(jù)管道結(jié)構(gòu)技術(shù),符合pciv2.1和v2.2規(guī)范;提供了兩個(gè)獨(dú)立的可編 程dma控制器;每個(gè)通道均支持塊和分散/集中的dma方式;在pci總線端支持32位/33mh;本地端(local bus)可以編程實(shí)現(xiàn)8,16,32位的數(shù)據(jù)寬度;傳輸速率最高可達(dá)132mb/s;本地總線端時(shí)鐘最高可達(dá)50mhz支持復(fù)用/非復(fù)用的32位地址數(shù) 據(jù)。pci9054的內(nèi)部結(jié)構(gòu)框圖如圖1所示。
圖1 pci9054內(nèi)部結(jié)構(gòu)框圖
由圖1可知,pci9054提供了pci、eeprom、local總線三個(gè)接口。pci9054作為一種橋接芯片在pci總線和local總線之間提供 傳遞消息,既可以作為兩個(gè)總線的主控設(shè)備去控制總線,也可以作為兩個(gè)總線的目標(biāo)設(shè)備去響應(yīng)總線。
pci9054有6個(gè)零等待可編程fifo存儲(chǔ)器(fifos)。它們分別完成pci發(fā)起讀、寫操作,pci目標(biāo)讀、寫操作和dma讀、寫操作。由于 fifo存儲(chǔ)器的存在,數(shù)據(jù)可以大量突發(fā)傳輸而不丟失。這樣不僅滿足實(shí)時(shí)性要求,同時(shí)可以根據(jù)用戶的需要采用與pci時(shí)鐘異步的本地頻率。串形 eeprom(serial eeprom)是用來在開機(jī)時(shí)初始化配置內(nèi)部寄存器的。內(nèi)部寄存器(internal regi- sters)標(biāo)識(shí)地址映射關(guān)系以及pci端和本地端工作狀態(tài)。fifo和內(nèi)部寄存器在計(jì)算機(jī)主機(jī)或者本地端都是統(tǒng)一編址的,用戶可以從兩端通過編程訪問它 們的每一個(gè)字節(jié)。
3.2 數(shù)據(jù)傳輸模式
pci9054的數(shù)據(jù)傳輸模式靈活多樣,包括直接主模式(pci master)、直接從模式(pci target)、dma模式。
數(shù)據(jù)傳輸模式的選擇主要是要根據(jù)硬件設(shè)計(jì)者對(duì)硬件設(shè)計(jì)的需求而定的。當(dāng)硬件設(shè)計(jì)者選擇由pci發(fā)起控制的時(shí)候,則pci9054應(yīng)該為pci的工作目標(biāo), 這時(shí)應(yīng)選擇pci 9054的工作方式為pci從模式。當(dāng)硬件設(shè)計(jì)者選擇本地端發(fā)起控制的時(shí)候,pci9054成為主控設(shè)備,而pci則成為pci9054的工作目標(biāo),這種 情況下應(yīng)選擇pci9054的工作方式為pci主模式。在數(shù)據(jù)進(jìn)行dma傳輸時(shí),pci9054對(duì)pci端和local端都是主控設(shè)備,本身具有dma控 制器完全可以脫離pc機(jī)進(jìn)行dma控制,此時(shí)pci9054工作在dma傳輸模式。
3.3 本地總線工作方式
pci9054本地總線可工作在m,c,j三種模式。
m模式是專為motorola公司的mcu設(shè)計(jì)的工作模式。c模式下9054芯片通過片內(nèi)邏輯控制將pci的地址線和數(shù)據(jù)線分開,很方便地為本地工作時(shí)序 提供各種工作方式,一般較廣泛應(yīng)用于系統(tǒng)設(shè)計(jì)中。j模式是一種沒有l(wèi)ocal master的工作模式,它的好處是地址數(shù)據(jù)線沒有分開,嚴(yán)格仿效pci總線的時(shí)序。pci9054的工作方式可利用模式選擇引腳加以選擇,對(duì)于 176pin-pqfp封裝的9054芯片模式選擇引腳為pin156(mode1)和pin 157(modeo)。只要將這兩個(gè)腳接地便可選擇了c模式;兩個(gè)腳都接 則選擇了m模式;pin156接地,pin157接則選擇了j模式。
4 利用pci9054進(jìn)行pci接口電路的設(shè)計(jì)
4.1 接口電路的硬件結(jié)構(gòu)圖如圖2所示:
圖2 硬件結(jié)構(gòu)圖
4.2 pci9054與pci bus接口
硬件接口電路的第一部分是9054與pci插槽間的連接信號(hào)線。這些信號(hào)包括地址數(shù)據(jù)復(fù)用信號(hào)ad[31:0],總線命令信號(hào) c/be[3:0]和pci 協(xié)議控制信號(hào)par,frame#,irdy#,trdy#,stop#,idsel,devsel#等。電路連接中將彼此對(duì)應(yīng)的信號(hào)線連接在一起即可。在pci總線信號(hào)中,除了rst#,inta#~intd#之外,其它所有信號(hào)都在時(shí)鐘上升沿被采樣。每個(gè)信號(hào)都有相對(duì)于時(shí)鐘前沿的建立和保持時(shí)間。在此期間,不允許有信號(hào)跳動(dòng)。該時(shí)間一過,信號(hào)的變化就無關(guān)緊要了。這種建立和保持時(shí)間對(duì)于不同的信號(hào)其情形是不同的。對(duì)于ad[31:0]、par和 idsel來說,只有在一定的時(shí)鐘邊沿上才有上述時(shí)間的要求。對(duì)于 lock#,irdy#,trdy#,frame#,devsel#,stop#,req#, gnt#,serr#和perr#這些信號(hào)在每個(gè)時(shí)鐘前沿都有建立和保持時(shí)間。對(duì)于c/be[3:0]#在傳輸總線命令時(shí),要在frame#第一次建立時(shí) 對(duì)應(yīng)的時(shí)鐘邊沿上遵守建立和保持時(shí)間的關(guān)系。若傳輸字節(jié)使能信號(hào)時(shí),要在完成一個(gè)地址期或數(shù)據(jù)期之后的每一個(gè)時(shí)鐘邊沿保證相應(yīng)的建立和保持時(shí)間。
4.3 pci9054與eeprom接口
各種接口芯片都需要外接串行eeprom芯片來加載配置數(shù)據(jù)。對(duì)于串行eeprom芯片,需要根據(jù)接口芯片數(shù)據(jù)手冊(cè)中給出的生產(chǎn)廠家及型號(hào)選擇,這里選擇 microchip technology公司的 93lc46b。pci9054提供4個(gè)管腳與串行eeprom相連接,它們分別是eedi,eedo,eesk, eecs,對(duì)應(yīng)于93lc46b的di, d0, sk, cs這4個(gè)管腳,這4對(duì)管腳直接相連就可以。另外93lc46b的vcc管腳需要接+5v電源,gnd接地。因?yàn)樾枰獙?duì)串行eeprom進(jìn)行寫操作,串行 eeprom應(yīng)處于可編程而且非保護(hù)狀態(tài),所以pe接高電平而pre接低電平。93lc46的技術(shù)手冊(cè)規(guī)定兩個(gè)管腳上拉和下拉的電阻應(yīng)為10k左右。[!--empirenews.page--]
4.4 pci9054與local bus接口
硬件電路第三部分是pci 9054與local端連接。plx9054芯片local端用到的部分引腳信號(hào)描述如下。
lhold:申請(qǐng)使用本地總線,輸出信號(hào);lholda:對(duì)lhold應(yīng)答,輸入信號(hào);ads:新的總線訪問有效地址的開始,在總線訪問 first clock設(shè)置時(shí),輸出信號(hào): blast:表示為總線訪問的last transfer,輸出信號(hào); lw/r:高電平表示讀操作,低電平表示寫操作,輸出信號(hào)。la:地址線。ld:數(shù)據(jù)線。ready:表示總線上讀數(shù)據(jù)有效或?qū)憯?shù)據(jù)完成,用以連接 plx9054等待狀態(tài)產(chǎn)生器,輸入信號(hào)。
4.5 寄存器配置
設(shè)計(jì)好接口電路后,硬件設(shè)計(jì)工作還只完成了一半。由于pci 9054是通用pci接口功能芯片,它的功能還不一定能夠滿足用戶的需求,所以還要進(jìn)行功能寄存器設(shè)置以使接口電路具有特定的功能。寄存器的配置包括 eeprom初始化、local功能寄存器和pci配置寄存器的配置。
(1) eeprom初始化
在計(jì)算機(jī)的加電自檢期間,pci總線的rst#信號(hào)復(fù)位,plx9054內(nèi)部寄存器的默認(rèn)值作為回應(yīng)。plx9054輸出本地lreset#信號(hào)并檢測(cè)串 行eeprom。如果串行eeprom中的前33個(gè)比特不全為1,那么plx9054確定串行eeprom非空,用戶可通過向9054的寄存器cntrl 的29位寫1來加載eeprom的內(nèi)容到plx9054的內(nèi)部寄存器;配置的信息(設(shè)備識(shí)別號(hào)、供應(yīng)商代碼號(hào)、local總線三個(gè)空間的大小以及三個(gè)空間的基址等)事先要利用編程器寫入配置存儲(chǔ)器中,也可以在p1xsdk中的plxmon下對(duì)eeprom進(jìn)行配置。
(2) pci配置寄存器的配置
配置pci配置寄存器比較簡(jiǎn)單。主要是填寫生產(chǎn)商id號(hào)、器件id號(hào)、類碼子系統(tǒng)id號(hào)和子系統(tǒng)生產(chǎn)商id號(hào)。對(duì)于pci 9054,其生廠商id號(hào)為10b5,器件id號(hào)為9054,子系統(tǒng)號(hào)為9054,子系統(tǒng)id號(hào)為10b5,類碼號(hào)為0680,表示其為橋設(shè)備中的其它橋 設(shè)備類。
(3) 本地配置寄存器的配置
對(duì)于本地配置寄存器的配置就是對(duì)本地地址空間及其本地總線屬性的配置。這些配置要根據(jù)實(shí)際開發(fā)的硬件板卡的硬件資源進(jìn)行配置。設(shè)備人員配置寄存器的任務(wù)就是要把某一段本地地址映射為pci地址,也就是當(dāng)主機(jī)cpu要訪問本地地址空間時(shí),要知道其對(duì)應(yīng)的pci總線地址。
4.6 驅(qū)動(dòng)程序的開發(fā)
設(shè)備驅(qū)動(dòng)程序提供鏈接到pci板卡的軟件接口,文件擴(kuò)展名為.sys的動(dòng)態(tài)鏈接庫(kù)。在windows98和windows2000中,設(shè)備驅(qū)動(dòng)程序必須根 據(jù)windows驅(qū)動(dòng)程序模型(wdm)設(shè)計(jì)。設(shè)備驅(qū)動(dòng)程序的關(guān)鍵是如何完成硬件操作,基本功能是完成設(shè)備的初始化、對(duì)端口的讀寫操作、中斷的設(shè)置和響應(yīng) 及中斷的調(diào)用,以及對(duì)內(nèi)存的直接讀寫。本設(shè)計(jì)應(yīng)用基于vc++的driverworks軟件,只要在它的向?qū)С绦?driverwizard)指引下,根據(jù)硬件的具體情況設(shè)置必要參數(shù)就可以很方便地完成驅(qū)動(dòng)程序的框架,最后根據(jù)具體的要求添加新的類對(duì)象和所需代碼即可。
5 結(jié)束語(yǔ)
隨著數(shù)字技術(shù)的發(fā)展,要求的數(shù)據(jù)傳輸速率將會(huì)越來越高。pci9054以其強(qiáng)大的功能,簡(jiǎn)單的用戶接口,為pci總線接口的開發(fā)提供了一種簡(jiǎn)潔的方法,設(shè)計(jì)者只要設(shè)計(jì)本地總線接口控制電路,即可實(shí)現(xiàn)與pci總線的高速數(shù)據(jù)傳輸。