- 相關(guān)推薦
PCI總線協(xié)議的FPGA實(shí)現(xiàn)及驅(qū)動(dòng)設(shè)計(jì)
摘要:采用FPGA技術(shù),在ALTERA公司的FLEX6000系列芯片上實(shí)現(xiàn)了從設(shè)備模式PCI總線的簡(jiǎn)化協(xié)議,并給出了Windows9x系統(tǒng)下的虛擬設(shè)備驅(qū)動(dòng)程序,提供了與應(yīng)用程序的接口。實(shí)現(xiàn)結(jié)果表明:該設(shè)備結(jié)構(gòu)靈活,功能可靠,有利于與其它模塊實(shí)現(xiàn)單片集成應(yīng)用。本系統(tǒng)已應(yīng)用在數(shù)據(jù)采集和處理、圖像處理等方面。目前,許多公司都提出了新型的計(jì)算機(jī)高速總線,如Arapahoe總線標(biāo)準(zhǔn)和HyperTransport技術(shù),但各協(xié)議互不兼容,沒(méi)有形成統(tǒng)一標(biāo)準(zhǔn)。作為傳統(tǒng)的通用局部總線,PCI總線仍然占據(jù)著主流個(gè)人電腦市場(chǎng),具有頑強(qiáng)的生命力。
現(xiàn)在市面上存在著各種PCI接口芯片,如AMCC公司的S5933,PLX的9080系列等。專用芯片可以實(shí)現(xiàn)完整的PCI主設(shè)備與從設(shè)備模式的接口功能,將復(fù)雜的PCI總線接口轉(zhuǎn)化相對(duì)簡(jiǎn)單的用戶接口,但系統(tǒng)結(jié)構(gòu)受接口芯片的限制,不能靈活地設(shè)計(jì)目標(biāo)系統(tǒng),且成本較高。本文使用符合PCI電氣特性的FPGA芯片進(jìn)行簡(jiǎn)化的PCI接口邏輯設(shè)計(jì),實(shí)現(xiàn)了33MHz、32位數(shù)據(jù)寬度的PCI從設(shè)備模塊的接口功能,節(jié)約了系統(tǒng)的邏輯資源,且可以將其它用戶邏輯集成在同一塊芯片,降低了成本,增加了設(shè)計(jì)的靈活性。另外,還給出了Windows9x系統(tǒng)下的設(shè)備驅(qū)動(dòng)程序,可以與應(yīng)用程序接口,形成一個(gè)完整的系統(tǒng)。目前,本系統(tǒng)已經(jīng)被印染企業(yè)應(yīng)用在數(shù)據(jù)采集和處理等方面。
1 系統(tǒng)構(gòu)成與功能描述
系統(tǒng)的總體框圖如圖1所示。
由圖1可見(jiàn),系統(tǒng)的硬件平臺(tái)為一塊PCI卡。此卡的結(jié)構(gòu)十分簡(jiǎn)潔,主要由FPGA芯片、RAM芯片和輸出接口三部分組成。其中,F(xiàn)PGA芯片集成了PCI接口模塊和數(shù)據(jù)處理模塊。PCI接口模塊實(shí)現(xiàn)了33MHz工作時(shí)鐘、32位總線寬度的接口功能,支持I/O空間、內(nèi)存空間及配置空間的讀寫(xiě)和PCI中斷功能。由于簡(jiǎn)化的PCI接口占用的邏輯資源較少,可在同一塊芯片中集成其他用戶邏輯。作為一個(gè)應(yīng)用實(shí)例,本文加入了一個(gè)數(shù)據(jù)處理模塊,對(duì)PCI接口傳送來(lái)的數(shù)據(jù)進(jìn)行處理,通過(guò)片外的輸出接口輸出到下位機(jī)。RAM芯片為數(shù)據(jù)處理提供緩存功能。
2 從設(shè)備模式下的簡(jiǎn)化PCI協(xié)議的實(shí)現(xiàn)
為了實(shí)現(xiàn)PCI接口的基本功能,必須完成以下幾個(gè)模塊:
(1)PCI配置空間設(shè)置。PCI協(xié)議支持三種地址空間:I/O空間、內(nèi)存空間和配置空間。配置空間提供了支持PCI設(shè)備自動(dòng)配置的機(jī)制,是必需的。
(2)PCI從設(shè)備狀態(tài)機(jī)。PCI總線狀態(tài)機(jī)是具有PCI總線的計(jì)算機(jī)系統(tǒng)狀態(tài)流,是由一個(gè)已知狀態(tài)到另一個(gè)狀態(tài)的條件、時(shí)序的描述。這是PCI接口設(shè)計(jì)中最基本也是最重要的部分。
(3)地址譯碼和命令譯碼。地址譯碼用來(lái)確定PCI設(shè)備是否應(yīng)當(dāng)響應(yīng)當(dāng)前總線的操作;命令譯碼則用來(lái)指示PCI設(shè)備根據(jù)不同的總線命令作出相應(yīng)的動(dòng)作。
本文采用ALTERA公司的Max PlusII軟件平臺(tái),硬件描述語(yǔ)言使用ALTERA HDL語(yǔ)言,也可以方便地轉(zhuǎn)換民VHDL或VerilogHDL語(yǔ)言。在此之前,先引入PCI總線信號(hào)的定義。
2.1 總線信號(hào)定義
根據(jù)PCI總線協(xié)議2.2版,從設(shè)備模式下PCI接口至少包含47根引腳。圖2給出了按功能劃分的引腳分布,左邊是必需引腳。右邊是可選引腳。為簡(jiǎn)化起見(jiàn),本文采用了如下引腳,其他引腳均不使能或置為高阻態(tài)。
(1)由系統(tǒng)提供的33MHz的同步時(shí)鐘信號(hào)CLK和復(fù)位信號(hào)RST#(#表示低電平有效);
(2)關(guān)于數(shù)據(jù)傳輸?shù)暮诵男盘?hào):32位地址/數(shù)據(jù)復(fù)用線AD[31:0]、總線命令/字節(jié)使能復(fù)用線C/BE[3:0]#和偶校驗(yàn)信號(hào)PAR;
(3)接口控制信號(hào)FRAME#、TRDY#、IRDY#、STOP#、DEVSEL#和IDSEL。其中,F(xiàn)RAME#為數(shù)據(jù)傳輸起止信號(hào),TRDY#為主設(shè)備準(zhǔn)備好信號(hào),IRDY#為從設(shè)備準(zhǔn)備好信號(hào),STOP#為從設(shè)備停止請(qǐng)求信號(hào),DEVSEL#為設(shè)備選擇信號(hào),IDSEL為配置空間讀寫(xiě)時(shí)的片選信號(hào);
(4)中斷引腳INTA#。
為簡(jiǎn)化PCI協(xié)議,本文只實(shí)現(xiàn)了最重要的總線命令,表1給出了所支持的總線命令對(duì)應(yīng)的C/BE[3:0]#編碼值。
表1 支持的總線命令
0011
0110
0111
1010
1011I/O讀
I/O寫(xiě)
存儲(chǔ)器讀
存儲(chǔ)器寫(xiě)
配置空間讀
配置空間寫(xiě)
2.2 配置空間設(shè)置
配置空間大小為256字節(jié),前64字節(jié)必需,記錄了PCI設(shè)備的基本住處,比較重要的有:
(1)VendorID、DeviceID和Class Code域:分別表示設(shè)備的生產(chǎn)廠商、設(shè)備編號(hào)和類型;
(2)Command和Status域:分別給出了對(duì)PCI設(shè)備的控制命令和當(dāng)前狀態(tài);
(3)Base Adress Register域:指示此PCI設(shè)備按I/O方式還是內(nèi)存方式進(jìn)行讀寫(xiě)以及需要的地址空間大小;
(4)Interrupt Line和Interrupt Pin域:分別指明了設(shè)備使用的斷號(hào)和中斷引腳。
在對(duì)配置空間的訪問(wèn)中,用AD[7:2]尋址一個(gè)雙字DWORD。在本設(shè)計(jì)中,配置空間設(shè)置如表2所示。
2.3 簡(jiǎn)化的從設(shè)備狀態(tài)機(jī)
在PCI協(xié)議中,標(biāo)準(zhǔn)的從設(shè)備狀態(tài)機(jī)包含五種狀態(tài),而且各狀態(tài)的跳轉(zhuǎn)條件比較復(fù)雜。本文在不違反PCI協(xié)議的前提下,簡(jiǎn)化了從設(shè)備的狀態(tài)機(jī),如圖3所示。
圖3中,狀態(tài)轉(zhuǎn)移條件信號(hào)a、b、c定義如下:a代表配置空間訪問(wèn)條件,b代表I/O空間或內(nèi)存空間訪問(wèn)條件,c代表總線傳輸開(kāi)始條件。這三個(gè)條件的實(shí)現(xiàn)由后面的命令譯碼模塊給出。
表2 配置空間設(shè)置(均為十六進(jìn)制)
【PCI總線協(xié)議的FPGA實(shí)現(xiàn)及驅(qū)動(dòng)設(shè)計(jì)】相關(guān)文章:
基于PCI總線的CAN卡的設(shè)計(jì)與實(shí)現(xiàn)03-18
MPC8272總線與DSP HPI總線接口的FPGA實(shí)現(xiàn)03-07
基于PCI總線的雙DSP系統(tǒng)及WDM驅(qū)動(dòng)程序設(shè)計(jì)03-19
談DSP HPI總線與MPC8272總線接口的FPGA實(shí)現(xiàn)03-08
基于FPGA的TS over lP的設(shè)計(jì)與實(shí)現(xiàn)03-21
基于PCI總線的雷達(dá)視頻采集方案03-19