1 引言
PCI,外設(shè)組件互連標(biāo)準(zhǔn)(Peripheral Component Interconnection)是一種由Intel公司1991年推出的用于定義局部總線的標(biāo)準(zhǔn),自規(guī)范推出,得到網(wǎng)絡(luò)通信,數(shù)據(jù)采集處理,工業(yè)控制等多行業(yè)的廣泛應(yīng)用,并出現(xiàn)PCI-E。CPCI,PXI等多個(gè)擴(kuò)展改良版本。PCI總線支持其即插即用,中斷共享,高速數(shù)據(jù)傳輸?shù)裙δ?,有著廣闊的市場(chǎng)前景。
本文介紹了目前使用美國PLX公司生產(chǎn)的協(xié)議轉(zhuǎn)換芯片PCI9054,用verilog?HDL在FPGA中產(chǎn)生相應(yīng)的控制信號(hào).完成對(duì)數(shù)據(jù)的快速讀寫,從而實(shí)現(xiàn)了與PCI總線的高速數(shù)據(jù)通訊。本系統(tǒng)可擴(kuò)展,適用于其他PCI設(shè)備系統(tǒng),具有實(shí)用價(jià)值。
2 系統(tǒng)實(shí)現(xiàn)
本系統(tǒng)主要由PCI9054與FPGA構(gòu)成,系統(tǒng)結(jié)構(gòu)圖以及信號(hào)連接如圖1所示。可以根據(jù)實(shí)際需要,利用FPGA的可編程性,實(shí)現(xiàn)預(yù)定功能,如與單片機(jī),DSP等處理器的不同速率間接高速通信等。協(xié)議轉(zhuǎn)換芯片PCI9054作用就是為本地處理器和主機(jī)之間架起一座通信的橋梁。
圖1 系統(tǒng)總體結(jié)構(gòu)
1) PCI9054硬件實(shí)現(xiàn)
PCI9054是美國PCI公司生產(chǎn)的先進(jìn)的PCI總線接口芯片,它滿足PCI V2.2協(xié)議,支持32位33MHz時(shí)鐘PCI總線,特別適用于PCI總線外設(shè)產(chǎn)品的開發(fā)。PCI9054局部總線有三種工作模式:M模式、C模式和J模式,可方便地與多種微處理器連接。PCI9054的工作方式可利用模式選擇引腳(MODEO,MODE 1)加以選擇。
2) PCI9054硬件連接電路(如圖2所示):
圖2 PCI9054硬件連接電路圖
3) PCI9054與PCI插槽信號(hào)連接
PCI9054與PCI插槽間的連接信號(hào)線,這些信號(hào)線包括地址數(shù)據(jù)復(fù)用信號(hào)AD[31:0],總線命令信號(hào)C/BE[3:0]和PCI協(xié)議控制信號(hào)PAR,F(xiàn)RAME#,IRDY#,TRDY#,STOP#,IDSEL,DEVSEL#等,電路連接中將彼此對(duì)應(yīng)的信號(hào)線連接在一起即可。在PCI總線信號(hào)中.除了RST#。INTA#-INTD#之外,其他所有的信號(hào)都在始終上升沿被采樣。每個(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í)間的要求。對(duì)于LOCK#,IRDY#,TRDY#.FRAME#,DEVSEL#,STOP#,ⅢeQ#,GNT#,SERR#和PERR#這些信號(hào)在每個(gè)時(shí)鐘前沿都有建立和保持時(shí)間。對(duì)于C/BE[3:0]#在傳輸總線命令是,要在FRAME#第一次建立時(shí)對(duì)應(yīng)的時(shí)鐘邊沿上遵守建立和保持時(shí)間的關(guān)系。若傳輸字節(jié)使能信號(hào)時(shí),要在完成一個(gè)地址期或數(shù)據(jù)期之后的每一個(gè)時(shí)鐘邊沿保證相應(yīng)的建立和保持時(shí)間。
4) PCI9054與EEPROM接口
各種接口芯片都需要外接串行EEPROM芯片來加載配置數(shù)據(jù).對(duì)于串行EEPROM芯片,需要根據(jù)接口芯片數(shù)據(jù)手冊(cè)中給出的生產(chǎn)廠家及型號(hào)選擇。這里選擇FM93LC56。PCI9054提供4個(gè)管腳與串行EEPROM相連接,他們分別是EEDI,EEDO,EESK,EECS,對(duì)應(yīng)于FM93LC56的DI,DO,SkCS這四個(gè)管腳,這4對(duì)管腳直接相連就可以,另外93Lc56的VCC管腳需要接+5V電源,GND接地。因?yàn)樾枰獙?duì)串行EEPROM進(jìn)行寫操作,串行EEPROM應(yīng)處于可編程而且非保護(hù)狀態(tài),所以PE接高電平而PRE接低電平。FM93LC56的技術(shù)手冊(cè)規(guī)定兩個(gè)管腳上拉和下拉的電阻應(yīng)為10K左右。
5) PCI9054與LOCAL Bus端連接
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ù)完成,用以連接PCI9054等待狀態(tài)產(chǎn)生器,輸入信號(hào)。
3 VeHiog HDL軟件實(shí)現(xiàn)
FPGA內(nèi)部在PCI9054本地總線LOCAL Bus基礎(chǔ)之上進(jìn)行設(shè)計(jì);FPGA片內(nèi)RAM或FIFO可以在QUARTUSII環(huán)境下利用利用工具M(jìn)egaWizard Plug_In Manager調(diào)用功能模塊生成。單雙口、存儲(chǔ)容量、數(shù)據(jù)總線的寬度以及同步或異步自行定制。為與MCU或DSP等處理器通信,要設(shè)計(jì)RAM訪問仲裁模塊。決定某一時(shí)刻對(duì)RAM訪問的主方;PCI9054支持單周期、突發(fā)和DMA傳輸,在FPGA內(nèi)部要設(shè)計(jì)本地端總線控制模塊,實(shí)現(xiàn)局部總線的狀態(tài)控制,同時(shí)產(chǎn)生FPGA片內(nèi)RAM的讀寫時(shí)序及地址信號(hào)。
PCI9054支持單周期、突發(fā)傳輸和DMA傳輸,因此在狀態(tài)機(jī)設(shè)計(jì)中不僅要滿足單周期傳輸?shù)臅r(shí)序。還要兼顧突發(fā)和DMA傳輸時(shí)序。依據(jù)FCl9054的datasheet以及PCI總線協(xié)議,其狀態(tài)轉(zhuǎn)換圖如圖3所示:
圖3 PCI9054狀態(tài)轉(zhuǎn)換圖
狀態(tài)機(jī)是控制單元的主體,接受外部信號(hào)以及數(shù)據(jù)單元產(chǎn)生的信號(hào),產(chǎn)生控制信號(hào)序列。狀態(tài)機(jī)的關(guān)鍵是如何把一個(gè)實(shí)際的時(shí)序邏輯關(guān)系,抽象成一個(gè)時(shí)序邏輯函數(shù)。根據(jù)狀態(tài)轉(zhuǎn)換圖.采用3個(gè)always語句.即對(duì)應(yīng)三個(gè)進(jìn)程來完成Moore狀態(tài)機(jī)。一個(gè)用于狀態(tài)機(jī)的同步時(shí)序部分,在本地時(shí)鐘clk的上升沿到來時(shí).將nextstate狀態(tài)賦給currentstate;個(gè)用于描述狀態(tài)轉(zhuǎn)換;另一個(gè)用于描述輸出的組合邏輯。在這里重點(diǎn)闡述狀態(tài)轉(zhuǎn)換進(jìn)程,其Verilog HDL代碼簡(jiǎn)略如下所示:
always @ (lads,lblast)
begin case(currentstate)
S0:if(! lads)
nextstate《=S1;
else
nexbtate《=S0;
S1:if(! lblast)
nextstate《=S2;
else
nextstate《=S4;
S2: nextstate《=S3:
S3:if(! lads)
nextstate《=Sl;
else
nextstate《=S0;
S4:nextatate《=S5;
S5:if(blast)
nextstate《=S5;
else
nextstate《=S6;
S6:if(! lads)
nextstate《=S1;
else
nexmmte《=S0;
endcase
end
輸出組合邏輯進(jìn)程如下所示:
always @(currentstate)
case(currentstate)
SO:begin lready《=1‘b1;
ram_wr《=1’b0:
ram_rd《=1‘b0;
end
。..。..
endcase
圖4 利用QUARTUSⅡ仿真生成的State Machine圖(可與圖3對(duì)應(yīng))
圖5 PCI9054 LOCAL Bus單周期傳輸時(shí)序圖
4 結(jié)論
利用DriverStdio開發(fā)PCI9054的驅(qū)動(dòng)程序,實(shí)現(xiàn)主機(jī)對(duì)FPGA內(nèi)部RAM的讀寫,利用示波器檢測(cè)ads,blast信號(hào),在8位數(shù)據(jù)總線的情況下,實(shí)現(xiàn)數(shù)據(jù)傳輸率可以達(dá)到26.8Mbyte/s,接近PCI的極限傳輸速率(圖4、5所示)。本設(shè)計(jì)已經(jīng)應(yīng)用,經(jīng)實(shí)際運(yùn)行,傳輸速度快,數(shù)據(jù)正確,穩(wěn)定可靠,經(jīng)過擴(kuò)展,同時(shí)可應(yīng)用于其它需要與PCI數(shù)據(jù)總線接口的設(shè)備當(dāng)中,可縮短PCI設(shè)備的開發(fā)周期,提高工作效率。
本文創(chuàng)新點(diǎn):利用PCI9054設(shè)計(jì)的PCI高速通信接口,采用了FPGA內(nèi)部RAM間接緩沖技術(shù),可以與DSP,MCU等微處理器高速通信,擴(kuò)展性強(qiáng),適用于可應(yīng)用于其它需要與PCI數(shù)據(jù)總線接口的設(shè)備當(dāng)中。