黎德文 胡小文
[摘要]介紹在FPGA上實(shí)現(xiàn)PCI總線接口的設(shè)計(jì)方案,在主控與用戶功能模塊之間的進(jìn)行數(shù)據(jù)交換,以突發(fā)寫(xiě)方式進(jìn)行大量數(shù)據(jù)的高速傳輸。重點(diǎn)描述用戶邏輯接口模塊的程序設(shè)計(jì),滿足PCI總線時(shí)序要求,提高系統(tǒng)效率和性能。
[關(guān)鍵詞]PCI總線 接口 FPGA
中圖分類(lèi)號(hào):TP3文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1671-7597(2009)0420031-01
一、PCI總線及其接口概述
PCI(Peripheral Component Interconnect)總線即外圍部件互連總線,是由Intel公司1991年首先提出的,工作頻率是33Mhz,具有32bit總線寬度,理論上最大傳輸率為132MByte/s,比傳統(tǒng)的ISA總線5MByte/s速率高得多。而且使用PCI總線一個(gè)突出的特點(diǎn)就是CPU占用率極低。在需要的高數(shù)據(jù)率和低功耗的場(chǎng)合,PCI總線頗受青睞。尤其是PCI SIG在1995年公布了PCI總線規(guī)范2.1版本后,PCI總線更加受到業(yè)界的重視并被越來(lái)越多的高檔微機(jī)和服務(wù)器所采用。
PCI接口設(shè)計(jì)一般有兩種實(shí)現(xiàn)方案:第一種是采用專(zhuān)用的PCI接口芯片實(shí)現(xiàn),可以避免復(fù)雜的PCI協(xié)議,縮短開(kāi)發(fā)周期,降低開(kāi)發(fā)難度。但系統(tǒng)結(jié)構(gòu)受接口芯片的限制,不能靈活地設(shè)計(jì)目標(biāo)系統(tǒng),且成本較高。第二種是使用可編程邏輯器件FPGA實(shí)現(xiàn)。這種方案可以根據(jù)整個(gè)系統(tǒng)的實(shí)際需要僅選擇實(shí)現(xiàn)PCI協(xié)議的某些子集,同時(shí)將另外的一些重要的功能集成到同一個(gè)器件上,這樣就使得所設(shè)計(jì)的PCI接口具有很強(qiáng)的針對(duì)性和靈活性,與此同時(shí)又可以極大地降低這個(gè)系統(tǒng)的成本。
PCI的外部設(shè)備既可以作為PCI總線從設(shè)備(Target),實(shí)現(xiàn)基本的傳送要求,也可以作為PCI總線的主設(shè)備(Master),訪問(wèn)其他PCI總線設(shè)備及系統(tǒng)的其他的資源。ALTERA公司提供了多種不同功能的PCI MegaCore。例如:pci_mt64(支持64位的Master/Target接口),pci_t64(支持64位的Target接口),pci_mt32(32位的Master/Target接口),pci_t32(32
位的Target接口)等。因?yàn)橥话l(fā)讀寫(xiě)過(guò)程,PCI總線寫(xiě)效率要比讀效率高得多,故我們選用pci_mt32,既作為PCI總線從設(shè)備接收寫(xiě)數(shù)據(jù),也可以作PCI主設(shè)備向主控寫(xiě)數(shù)據(jù)。
二、PCI總線在FPGA中的實(shí)現(xiàn)
PCI總線在FPGA中的實(shí)現(xiàn)框圖如圖2所示,PCI總線在系統(tǒng)中主要完成主控與FPGA用戶功能模塊之間的數(shù)據(jù)傳輸。要實(shí)現(xiàn)PCI接口設(shè)計(jì),我們需要做的工作是與pci_mt32相連的用戶邏輯接口設(shè)計(jì),以滿足PCI總線嚴(yán)格的同步時(shí)序要求,實(shí)現(xiàn)數(shù)據(jù)的快速、有效傳輸。
三、用戶邏輯接口設(shè)計(jì)
當(dāng)主控向FPGA寫(xiě)數(shù)據(jù)時(shí),用戶邏輯接口模塊在lt_dxfrn='0'時(shí)將接收到的數(shù)據(jù)l_dato存在FIFO里面,并在接收完數(shù)據(jù)時(shí)向用戶功能模塊發(fā)送transrdy脈沖信號(hào),用戶功能模塊開(kāi)始讀取FIFO中的數(shù)據(jù)。
而當(dāng)用戶功能模塊處理完數(shù)據(jù)后,即向用戶邏輯接口模塊中RAM寫(xiě)入數(shù)據(jù),寫(xiě)完所有數(shù)據(jù)后向用戶接口模塊發(fā)送recvrdy脈沖信號(hào)。用戶邏輯接口模塊接收到recvrdy脈沖信號(hào)后向pci_mt32發(fā)送lm_req32信號(hào),pci_mt32隨后向PCI總線仲裁器發(fā)送reqn信號(hào),并接收到有效的gntn信號(hào)后變?yōu)镻CI主設(shè)備,將RAM中的數(shù)據(jù)寫(xiě)到主控內(nèi)存。
PCI狀態(tài)機(jī)如圖2所示,而PCI作主設(shè)備時(shí)的狀態(tài)機(jī)如圖3所示。
四、傳輸波形
主控向FPGA寫(xiě)數(shù)據(jù)時(shí),pci_mt32作從設(shè)備時(shí)的波形如圖4所示。
FPGA向主控寫(xiě)數(shù)據(jù)時(shí),pci_mt32作主設(shè)備時(shí)的波形如圖5所示:
五、結(jié)束語(yǔ)
本文介紹了在FPGA上實(shí)現(xiàn)PCI總線接口的設(shè)計(jì)方案,在主控與用戶功能模塊之間的進(jìn)行數(shù)據(jù)交換,以突發(fā)寫(xiě)方式進(jìn)行大量數(shù)據(jù)的高速傳輸。在時(shí)鐘頻率33MHz下,平均數(shù)據(jù)率可達(dá)400Mb/s以上,數(shù)據(jù)傳輸效果很好,完全符合pci總線的要求,這種設(shè)計(jì)提供了靈活的接口控制,實(shí)現(xiàn)快速、可靠的數(shù)據(jù)傳輸。
參考文獻(xiàn):
[1]PCI MegaCore Function User Guide,Version 4.2December 2006.
[2]PCI Local Bus Specification,Revision 2.3,October 31,2001.