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ù)裙δ埽兄鴱V闊的市場(chǎng)前景。 本文介紹了目前使用美國(guó)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是美國(guó)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)加以選擇。 M模式是專為Motorola公司的MCU設(shè)計(jì)的工作模式,其主要應(yīng)用于電信領(lǐng)域。C模式是一種類似于單片機(jī)的工作方式,通過片內(nèi)邏輯控制,將PCI的地址線和數(shù)據(jù)線分開,很方便地為本地工作時(shí)序提供各種工作方式,對(duì)于這種工作方式,設(shè)計(jì)者只需要關(guān)注PCI9054的Local端的時(shí)序控制時(shí)序,就可以很方便的利用PCI9054實(shí)現(xiàn)PCI接口電路設(shè)計(jì)。J模式是地址總線和數(shù)據(jù)總線沒有分開,嚴(yán)格仿效PCI總線的時(shí)序,只是為時(shí)序控制增加了很多的控制信號(hào)。數(shù)據(jù)傳輸模式有三種:直接主模式,直接主模式就是本地處理器(如伺服控制卡上的DSP)訪問PCI總線上的I/O接口和計(jì)算機(jī)的內(nèi)存資源,由本地處理器發(fā)起整個(gè)數(shù)據(jù)傳輸。直接從模式,直接從模式就是主機(jī)作為主控設(shè)備發(fā)起對(duì)本地總線上資源的訪問.包括對(duì)本地處理器的控制和對(duì)本地端存儲(chǔ)器的訪問。DMA模式,DMA模式支持PCI總線與本地總線之間的高效突發(fā)。 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)中。 項(xiàng)目經(jīng)濟(jì)效益:20萬 作者:江勇 來源:《微計(jì)算機(jī)信息》(嵌入式與SOC)2009年第6-2期 |