文獻(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ì)思路總體上可分為兩種方法,,一是采用專門的接口芯片,二是采用可編程邏輯器件[4-5],。這兩種方法在不同角度皆有利弊,。
文獻(xiàn)[6]提出專用芯片可以將復(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ó)外開放IP組織Open Cores網(wǎng)站免費(fè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è)地址起讀寫大量數(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ǔ)器讀寫,、I/O讀寫,、中斷應(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),以開源的PCI-WISHBONE軟核為核心搭建串行通信接口平臺(tái),,使其成為PCI總線與用戶邏輯之間的橋梁,,避開復(fù)雜的PCI總線協(xié)議。其采用Xilinx公司的XC7A200T-2FFG1156 主芯片作為硬件核心,,結(jié)合基于WinDriver的驅(qū)動(dòng)程序,,采取規(guī)格為640×512的圖像作為模擬數(shù)據(jù)源,以乒乓方式輪流讀寫主機(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ǔ)器讀寫命令進(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)兩段可讀寫內(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),,分別為開始,讀操作,,寫操作以及重試,。狀態(tài)機(jī)上電復(fù)位后處于Start狀態(tài),數(shù)據(jù)進(jìn)入PCI后,,由狀態(tài)機(jī)分辨上位機(jī)的命令(Img_en)發(fā)起內(nèi)存讀寫事務(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)向讀寫操作狀態(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)行開發(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芯片的基本邏輯單元稱為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開源的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.