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