文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2016.08.018
中文引用格式: 梁燁,簡(jiǎn)獻(xiàn)忠,肖兒良,等. 基于WISHBONE總線的雙向PCI高速傳輸接口設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2016,42(8):77-79,83.
英文引用格式: Liang Ye,Jian Xianzhong,Xiao Erliang,et al. The bidirectional interface design of PCI high-speed transmission based on WISHBONE bus[J].Application of Electronic Technique,2016,42(8):77-79,83.
0 引言
PCI總線是目前推出的一款高性能局部總線[1],能同時(shí)滿足高數(shù)據(jù)傳輸和高功率輸出,是中頻數(shù)據(jù)采集與處理模塊的理想總線接口[2]。PCI 局部總線不受制于處理器,為中央處理器及高速外圍設(shè)備提供了一座橋梁[3],用戶可將高速外設(shè)通過(guò)局部總線直接掛接到 CPU總線上,使其與之匹配,從而打破了數(shù)據(jù)傳輸?shù)钠款i,使高性能 CPU 的功能得以充分發(fā)揮。
PCI總線接口的設(shè)計(jì)思路總體上可分為兩種方法,一是采用專(zhuān)門(mén)的接口芯片,二是采用可編程邏輯器件[4-5]。這兩種方法在不同角度皆有利弊。
文獻(xiàn)[6]提出專(zhuān)用芯片可以將復(fù)雜的總線接口轉(zhuǎn)換為相對(duì)簡(jiǎn)單的用戶接口。用戶可集中精力于應(yīng)用設(shè)計(jì),而不是調(diào)試PCI接口。但這種方式造成了一定的資源浪費(fèi),缺少靈活性。為了解決這些弊端,文獻(xiàn)[7]提出采用Xilinx、Altera以及Atmel等公司的可編程邏輯器件IP核實(shí)現(xiàn)PCI總線接口。最常用的IP核是Altera公司的PCI MegaCore和Xilinx公司的PCI LogiCore,但采取這兩種IP核的費(fèi)用不菲,且主模式設(shè)計(jì)難度較高,讓大多數(shù)研究人員望而卻步。文獻(xiàn)[8]論述了PCI主橋的的應(yīng)用和WISHBONE片上總線技術(shù),提出了使用單片機(jī)和FPGA架構(gòu)實(shí)現(xiàn)基于PCI Bridge核的被動(dòng)模式的PCI系統(tǒng)。
本文針對(duì)兩種方式的不足,在文獻(xiàn)[8]的基礎(chǔ)上,針對(duì)WISHBONE總線特點(diǎn)及國(guó)外開(kāi)放IP組織Open Cores網(wǎng)站免費(fèi)提供的開(kāi)源PCI-WISHBONE橋核,優(yōu)化該IP核主傳輸模塊狀態(tài)機(jī)程序,僅使用一片可編程邏輯器件嵌入用戶程序,將時(shí)鐘頻率提至66 MHz,首次實(shí)現(xiàn)了一種以高速DMA方式傳輸、主從共模的PCI接口設(shè)計(jì)。
1 PCI總線與PCI-WISHBONE橋核
1.1 PCI總線
PCI總線是同步傳輸協(xié)議,所有PCI操作均同步于時(shí)鐘??偩€時(shí)鐘有33 MHz、66 MHz兩種頻率,位寬分為32 bit和64 bit兩種,最大傳輸速率為264 MB。系統(tǒng)中 PCI總線的最大帶寬可達(dá):66×106×32=2.112 Gb/s。
重要的是,PCI可以支持一種名為線性突發(fā)的數(shù)據(jù)傳輸模式,可確??偩€不斷滿載數(shù)據(jù)。這種線性的或順序的尋址方式,意味著可以由一個(gè)地址起讀寫(xiě)大量數(shù)據(jù),然后每次只須將地址自動(dòng)加1,便可接收數(shù)據(jù)流內(nèi)下一個(gè)字節(jié)的數(shù)據(jù)。線性突發(fā)傳輸能更有效地動(dòng)用總線的頻帶寬傳輸數(shù)據(jù),減少無(wú)謂的尋址操作。同時(shí),PCI對(duì)總線主控及同步操作的支持有助于改善PCI的性能,即可將任何一個(gè)具有處理功能的外圍設(shè)備暫時(shí)接管總線,以加速執(zhí)行高吞吐量、高優(yōu)先次序的任務(wù)。PCI獨(dú)特的同步操作功能可確保CPU能與這些總線同步操作,毋須等待后者完成任務(wù)。
1.2 PCI-WISHBONE橋核
PCI-WISHBONE IP核提供了一個(gè)PCI總線和WISH-
BONE總線之間的接口,兼容PCI 2.2協(xié)議,支持WISHBONE SoC互聯(lián)協(xié)議B版本。它適用于32位PCI 接口,包含獨(dú)立的主橋、從橋功能模塊,支持啟動(dòng)程序與目標(biāo)命令功能,例如存儲(chǔ)器讀寫(xiě)、I/O讀寫(xiě)、中斷應(yīng)答等操作。
如圖1、圖2所示,PCI-WISHBONE橋核包括2個(gè)單元:PCI 主單元和從單元,每一個(gè)單元都擁有自己的一套功能支持橋接操作。例如圖1,PCI 主單元與WISHBONE主單元共同處理WISHBONE總線起動(dòng)的交易。首先,由WISHBONE從接口發(fā)起信號(hào)占用PCI總線,若PCI總線響應(yīng)成功,WISHBONE接口將傳輸數(shù)據(jù),地址以及命令經(jīng)由FIFO,通過(guò)PCI接口傳至PC機(jī)內(nèi)存空間。 圖2為PCI從模式機(jī)制,主要處理由上位機(jī)啟動(dòng)的事務(wù),同上述主模式基本一致,此處不再敘述。
圖1 PCI主單元結(jié)構(gòu)
圖2 PCI從單元結(jié)構(gòu)
2 PCI高速傳輸接口設(shè)計(jì)
2.1 硬件架構(gòu)設(shè)計(jì)
本文設(shè)計(jì)的雙向高速數(shù)據(jù)傳輸系統(tǒng)基于FPGA平臺(tái),以開(kāi)源的PCI-WISHBONE軟核為核心搭建串行通信接口平臺(tái),使其成為PCI總線與用戶邏輯之間的橋梁,避開(kāi)復(fù)雜的PCI總線協(xié)議。其采用Xilinx公司的XC7A200T-2FFG1156 主芯片作為硬件核心,結(jié)合基于WinDriver的驅(qū)動(dòng)程序,采取規(guī)格為640×512的圖像作為模擬數(shù)據(jù)源,以乒乓方式輪流讀寫(xiě)主機(jī)內(nèi)存,實(shí)現(xiàn)了高速圖像數(shù)據(jù)的雙向傳輸。
在硬件方面,根據(jù)PCI總線規(guī)范2.2版,當(dāng)PCI接口引腳M66EN是高電平時(shí),總線時(shí)鐘頻率可控制在33 MHz~66 MHz范圍內(nèi),反之為0~33 MHz。該模塊設(shè)計(jì)原理圖如圖3所示,用戶可使用跳線帽自由控制PCI總線時(shí)鐘頻率。當(dāng)引腳2與1相接時(shí),總線時(shí)鐘頻率高達(dá)66 MHz。
圖3 PCI總線時(shí)鐘模塊原理圖
2.2 PCI-WISHBONE橋核主模式傳輸設(shè)計(jì)
PCI-WISHBONE橋核內(nèi)置功能接口允許用戶端訪問(wèn)PCI總線,用戶可將其設(shè)計(jì)為主模式傳輸方式,設(shè)計(jì)方案如下:
pci_constants、bus_commands和pci_user_constants是橋核可外部修改的3個(gè)配置文件。用戶可將其設(shè)置成客戶端應(yīng)用(Guest)與主端應(yīng)用(Host)。本文設(shè)計(jì)采用Guest模式,支持PCI總線的主機(jī)系統(tǒng)連接。在接通電源時(shí),該設(shè)備獨(dú)立軟件掃描主機(jī)系統(tǒng)中任何連接PCI插槽的設(shè)備,主機(jī)系統(tǒng)進(jìn)行配置周期,PCI橋和連接到主機(jī)系統(tǒng)的所有其他PCI設(shè)備在上電復(fù)位后響應(yīng)。下面的步驟必須以正確的順序來(lái)執(zhí)行,以確保適當(dāng)?shù)腜CI橋的操作:
(1)配置所有PCI基地址寄存器。
(2)啟用PCI主操作和響應(yīng)內(nèi)存與I/O空間的從操作。
(3)配置合適的PCI配置空間Type00 Header寄存器。
(4)前3個(gè)步驟完成后,所有的配置寄存器可以在PCI Image0地址范圍內(nèi)使用存儲(chǔ)器讀寫(xiě)命令進(jìn)行訪問(wèn)。而其它寄存器可配置合適的應(yīng)用。
(5)當(dāng)配置好所有的PCI橋寄存器后,軟件便可以通過(guò)PCI從單元訪問(wèn)從設(shè)備或通過(guò)WISHBONE從接口啟用主設(shè)備來(lái)訪問(wèn)PCI總線。
PCI-WISHBONE橋核采取中斷機(jī)制,能夠應(yīng)對(duì)不同的事件產(chǎn)生中斷,由中斷控制和中斷狀態(tài)寄存器控制中斷請(qǐng)求的產(chǎn)生。作為Guest橋時(shí),由PCI總線INTA#引腳產(chǎn)生中斷請(qǐng)求;而作為Host橋時(shí)則通過(guò)WISHBONE總線上INTA_O引腳發(fā)起中斷。中斷控制寄存器用于使能/禁止不同來(lái)源的中斷。中斷狀態(tài)寄存器用于確定中斷源,并清除中斷請(qǐng)求。
2.3 DMA雙向傳輸狀態(tài)機(jī)優(yōu)化設(shè)計(jì)
為了方便測(cè)試,本文使用Verilog語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)了一種規(guī)格為640×513的圖像數(shù)據(jù)源,該數(shù)據(jù)流以62.5 MHz的同步時(shí)鐘發(fā)送,由幀結(jié)束信號(hào)和圖像有效數(shù)據(jù)組成。其中單副圖像數(shù)據(jù)位寬為16,以列的形式傳輸,每幀圖像結(jié)尾增加幀結(jié)束信號(hào)標(biāo)志(第513行)。
為了提高傳輸速率,驅(qū)動(dòng)程序需申請(qǐng)兩段可讀寫(xiě)內(nèi)存塊,將2個(gè)內(nèi)存首地址通過(guò)從模塊傳遞給FPGA,保存在寄存器中。同時(shí),當(dāng)驅(qū)動(dòng)程序檢測(cè)到PCI卡時(shí),給予合適的中斷、傳輸命令并及時(shí)回饋狀態(tài)信號(hào),這樣驅(qū)動(dòng)程序與FPGA完成交互。
如圖4所示,根據(jù)傳輸流程定義4種狀態(tài),分別為開(kāi)始,讀操作,寫(xiě)操作以及重試。狀態(tài)機(jī)上電復(fù)位后處于Start狀態(tài),數(shù)據(jù)進(jìn)入PCI后,由狀態(tài)機(jī)分辨上位機(jī)的命令(Img_en)發(fā)起內(nèi)存讀寫(xiě)事務(wù)。此時(shí)由于PCI的傳輸速率(66 MHz)遠(yuǎn)大于圖像速率(62.5 MHz),需將數(shù)據(jù)暫存于FIFO中,等到上位機(jī)允許傳輸并緩存數(shù)據(jù)達(dá)到既定數(shù)量時(shí)(img_fifo_half),狀態(tài)機(jī)轉(zhuǎn)向讀寫(xiě)操作狀態(tài)。
圖4 主模塊狀態(tài)機(jī)示意圖
在Read/Write狀態(tài)下,對(duì)應(yīng)的地址和數(shù)據(jù)將傳給wbm_adr_o 和wbm_dat_o信號(hào)線,傳輸完畢后進(jìn)入Retry狀態(tài)。當(dāng)主橋同PCI總線握手后,通過(guò)WISHBONE總線回饋給狀態(tài)機(jī)信號(hào)(wbs_ack_o, wbs_err_o, wbs_rty_o,分別表示傳輸成功、錯(cuò)誤和重試),從而繼續(xù)發(fā)起下一次事務(wù)或重復(fù)本次事務(wù)直至本幅圖像傳輸完畢。
當(dāng)檢測(cè)到圖像幀結(jié)束標(biāo)志時(shí),預(yù)示著該幅圖像傳輸即將完畢,此時(shí)FPGA會(huì)產(chǎn)生一個(gè)高位信號(hào)傳至PCI接口中的INTA#引腳(中斷引腳)通知上位機(jī)。一方面驅(qū)動(dòng)程序以電平檢測(cè)方式分辨出該信號(hào),迅速清除中斷并讀取內(nèi)存空間,保存數(shù)據(jù)或顯示圖像;另一方面主模塊切換內(nèi)存首地址,進(jìn)行下一幅圖像傳輸。乒乓傳輸方式的采用,不僅提高了傳輸速率,更給驅(qū)動(dòng)程序保留處理時(shí)間。
3 實(shí)驗(yàn)驗(yàn)證
PCI傳輸系統(tǒng)程序主要包括模擬源和PCI傳輸模塊,均使用Xilinx公司的ISE14.4軟件進(jìn)行開(kāi)發(fā),硬件仿真軟件ISIM進(jìn)行仿真。數(shù)據(jù)處理方面可將16位的模擬源數(shù)據(jù)(img_in[15:0])與累加的內(nèi)存地址進(jìn)行拼接處理后分別送入PCI主模塊中(wbm_adr_o[31:0]和wbm_dat_o[31:0])。
Xilinx公司7系列FPGA芯片的基本邏輯單元稱(chēng)為CLB,每個(gè)CLB包含2個(gè)Slices,每個(gè)Slices由8個(gè)寄存器(Registers)和4個(gè)6輸入的查找表(LUTs)組成。該P(yáng)CI傳輸接口設(shè)計(jì)FPGA資源使用率如表1所示,寄存器、查找表使用率皆在1%~2%之間,被占用的Slice總數(shù)約占總數(shù)5%左右,而觸發(fā)器使用數(shù)量為1 713,約占總數(shù)的34%。
表1結(jié)果表明,本設(shè)計(jì)能有效降低FPGA內(nèi)部硬件資源使用率,在各種資源利用之間達(dá)到一種平衡,從而最大限度地發(fā)揮器件的功能。
系統(tǒng)搭建如圖5所示,驅(qū)動(dòng)程序在Windows XP操作系統(tǒng)中實(shí)現(xiàn)。由于該項(xiàng)目設(shè)計(jì)了單獨(dú)的PCB板作為模擬源輸入,每行數(shù)據(jù)為0000-027F數(shù)據(jù),經(jīng)過(guò)PCI采集后將傳輸結(jié)果以灰度圖像形式展現(xiàn),每行數(shù)據(jù)由黑到白,與輸入的模擬數(shù)據(jù)源相對(duì)應(yīng)。經(jīng)過(guò)多次的驗(yàn)證,該系統(tǒng)PCI時(shí)鐘可達(dá)66 MHz,數(shù)據(jù)穩(wěn)定,符合設(shè)計(jì)標(biāo)準(zhǔn)。
圖5 PCI系統(tǒng)框架圖
4 結(jié)論
雙向PCI傳輸接口采用國(guó)外網(wǎng)站Open Cores開(kāi)源的PCI-WISHBONE橋核設(shè)計(jì)了DMA雙向高速傳輸接口,并實(shí)現(xiàn)了以FPGA為主處理器、主機(jī)為從處理器的圖像傳輸系統(tǒng)。該接口卡目前已應(yīng)用到三維免模板磨邊機(jī)系統(tǒng)中,進(jìn)行高速數(shù)據(jù)傳輸。實(shí)驗(yàn)發(fā)現(xiàn),設(shè)計(jì)的PCI接口卡具有傳輸速率高、配置靈活、簡(jiǎn)便、可移植性強(qiáng)等特點(diǎn),滿足項(xiàng)目高速傳輸數(shù)據(jù)的需要。
參考文獻(xiàn)
[1] 田小林.基于FPGA的PCI總線接口設(shè)計(jì)[J].今日電子,2004(6):60-62.
[2] 楊軍.基于IP CORE的PCI接口設(shè)計(jì)及在數(shù)字中頻采集與處理模塊中的應(yīng)用[D].成都:電子科技大學(xué),2009.
[3] 蘇治國(guó).PCI總線接口芯片PCI9052及其應(yīng)用[J].世界產(chǎn)品與技術(shù),2002(5):36-37.
[4] HUANG J.Design of online pipeline ultrasonic data acquisition and storage system based on PCI Bus[C].Applied Mechanics and Materials.Trans Tech Publications,2014,651:2296-2300.
[5] Yu Hongsong.Design of general-purpose video image process system based on Compact-PCI bus and FPGA+DSP structure[J].Chinese Journal of Liquid Crystal & Displays,2015,30(2).
[6] 曾哲昱.用CPLD實(shí)現(xiàn)PCI總線目標(biāo)接口[J].測(cè)控技術(shù),2002(1):45-47.
[7] 鄒戧祁.PCI總線的實(shí)現(xiàn)方案及其實(shí)例[J].電子工程師,1997(7):7-8.
[8] 徐江豐.基于WISHBONE片上總線的PCI Bridge核的研究和應(yīng)用[J].電子設(shè)計(jì)工程,2005(4):23-26.
[9] WISHBONE Soc Architecture Specification , Revision B.1[EB/OL].http://www.silicore.net.