張 峰,李燕斌
(中國西南電子技術(shù)研究所, 成都610036)
寬帶數(shù)傳通常用于空地或空空的實時預(yù)警監(jiān)視圖像信息傳輸,目前的ISR 圖像正朝著高幀頻、高分辨率方向發(fā)展,這種海量數(shù)據(jù)是否能夠高速傳輸,逐漸成為限制寬帶數(shù)傳終端發(fā)展的瓶頸。傳統(tǒng)數(shù)傳終端采用PCI 專用芯片(PCI9054、PCI9656 等)實現(xiàn)PCI協(xié)議[1-3],這種實現(xiàn)方式存在傳輸速度低、配置靈活性差等缺點。針對這些缺點,本文通過VHDL 語言在FPGA 內(nèi)實現(xiàn)PCI/PCIX 總線協(xié)議,實現(xiàn)了寬帶數(shù)據(jù)高速傳輸。PCI/PCIX 總線采用66 M/64 bit模式,突發(fā)長度為 512 byte, 利用率可達 80%, 即420 Mbyte/s,實驗表明,此通信方式穩(wěn)定可靠,且易于擴展,是寬帶高速數(shù)傳終端的一種理想選擇。
PCI 總線標準于1993 年首次提出,版本幾經(jīng)更新,帶寬 由33 M/32 bit 發(fā) 展到66 M/64 bit 后, 升 至PCIX 標準的133 M/64 bit模式。PCI/PCIX 總線可同時支持多個功能模塊,并不受限于處理器結(jié)構(gòu),可作為處理器和高速外圍功能模塊的橋梁。
PCI/PCIX 總線可采用5 V或3.3 V兩種供電環(huán)境,但不能混合使用。其信號線為CMOS 電平,靜態(tài)電流小,可考慮在FPGA 內(nèi)直接實現(xiàn)PCI/PCIX 的IP核,相對于采用PCI9054 等芯片方式,采用IP 核的方式能夠減少PCB 布板面積,降低工程成本,簡化數(shù)據(jù)流向,且具有易于升級、擴展等功能。
寬帶數(shù)傳終端模塊硬件結(jié)構(gòu)框圖如圖1 所示。模塊可認為由采集子單元和主控子單元構(gòu)成。采集子單元主要由FPGA 及其相連的外圍芯片組成,CCD相機數(shù)據(jù)通過Cameralink 接口進入到FPGA,由FPGA 完成對相機數(shù)據(jù)的采集,并通過SDRAM 乒乓緩存,緩存后的數(shù)據(jù)通過PCI/PCI 總線與主控子單元相連。主控子單元主要由PowerPC 及其相連的外圍芯片組成,內(nèi)存由512 Mbyte的DDR 存儲器組成,外置Flash 芯片用于存儲操作系統(tǒng)信息,通過網(wǎng)絡(luò)物理層芯片實現(xiàn)了網(wǎng)絡(luò)通信功能,用于與上位機進行數(shù)據(jù)交互,主控單元作為PCI/PCIX 總線的主設(shè)備,通過點對點通信,與作為從設(shè)備的FPGA 相連。
圖1 基于PCI/PCI 總線的寬帶數(shù)傳框圖Fig.1 The wideband data transport structure based on PCI/PCIX
寬帶數(shù)傳終端模塊軟件主要涉及在FPGA 內(nèi)實現(xiàn)PCI/PCIX 協(xié)議,利用中斷和主控單元實現(xiàn)基于PCI/PCIX 的數(shù)據(jù)交互。PowerPC 加載操作系統(tǒng)及PCI 設(shè)備驅(qū)動,實現(xiàn)PCI/PCIX 數(shù)據(jù)交互。其關(guān)鍵技術(shù)和實現(xiàn)難點在于如何在FPGA 內(nèi)通過VHDL 語言實現(xiàn)PCI/PCIX 協(xié)議及在PowerPC440 下Linux 操作系統(tǒng)的移植。
根據(jù)PCI/PCIX 協(xié)議,在FPGA 內(nèi)實現(xiàn)此IP 核,可考慮將PCI/PCIX IP 核劃分為6 個單元,即PCI I/O 接口單元、極性產(chǎn)生/判別單元、發(fā)送單元、接收單元、配置空間單元和用戶應(yīng)用接口,如圖2 所示。
圖2 PCI/PCIX 結(jié)構(gòu)框圖Fig.2 PCI/PCIX IP core structure
PCI I/O 接口模塊用于PCI/PCIX IP 核的對外接口信號,通常通過“金手指”與PCI 插槽相連。
極性產(chǎn)生/判別模塊對地址數(shù)據(jù)AD 信號,字節(jié)使能CBE 信號R 進行奇偶校驗,并通過PERR 信號和SERR 信號上報結(jié)果。
發(fā)送模塊根據(jù)用戶應(yīng)用需要產(chǎn)生發(fā)送數(shù)據(jù)狀態(tài)機,發(fā)送PCI/PCIX 數(shù)據(jù), 支持的數(shù)據(jù)讀寫方式有PIO 32 位、PIO 64 位以及突發(fā)32 位、突發(fā)64 位。
接收模塊根據(jù)用戶應(yīng)用需要產(chǎn)生接收數(shù)據(jù)狀態(tài)機,接收PCI/PCIX 數(shù)據(jù)。
配置空間模塊用于配置PCI/PCIX 配置空間中的3 個基址寄存器、命令/狀態(tài)寄存器、中斷線以及Device ID 和Vendor ID 等。
用戶應(yīng)用接口是PCI/PCIX 總線IP 核最重要的邏輯接口,它控制發(fā)送狀態(tài)機發(fā)送數(shù)據(jù),并對接收到的數(shù)據(jù)進行判斷,同時對中斷進行控制和處理等。
實際工程中,將配置空間中的Device ID 和Vendor ID 分別設(shè)置為0x1000、0x10ee,以在PowerPC440加載操作系統(tǒng)時加以探測并區(qū)分。將基址寄存器0配置為I/O 空間,256 byte大小,并使能BAR0。BAR2配置為Memory 空間,64 Mbyte,64 bit寬?;芳拇嫫? 映射為64 Mbyte空間,是根據(jù)FPGA 外接的64 Mbyte 的SDRAM 的尋址范圍確定的,如圖1 所示。
在用戶應(yīng)用接口,配置PCI/PCIX IP 核為64 bit突發(fā)寫模式,FPGA 發(fā)起數(shù)據(jù)傳輸, 將數(shù)據(jù)寫入到PCI 的基址寄存器BAR2,寫完64 Mbyte數(shù)據(jù),產(chǎn)生中斷信號,通知處理器PowerPC440 進行數(shù)據(jù)處理。中斷信號由FPGA 產(chǎn)生,通過INTA 信號接口,連接到PowerPC440 的中斷控制器上。
本文選擇在PowerPC440 處理器上運行Linux 操作系統(tǒng)[4]。
嵌入式Linux 操作系統(tǒng)的移植分為四步:第一步,做嵌入式處理器的引導(dǎo)程序bootloader,這一部分相當于PC 機的BIOS,即需要嵌入式處理器完成一個上電自啟動;第二步,裁減Linux 內(nèi)核,需要嵌入式處理器自啟動后加載定制的Linux 內(nèi)核,將PCI 編譯成內(nèi)核的一個模塊;第三步,建立文件系統(tǒng),Linux 通過文件系統(tǒng)對文件及設(shè)備進行管理,需要文件系統(tǒng)對PCI 進行管理、控制;第四步,編寫應(yīng)用層程序,通過應(yīng)用層程序,發(fā)起PCI 操作,完成數(shù)據(jù)傳輸。
由于FPGA 本身不是標準的PCI 接口,在Linux操作系統(tǒng)中并不存在相應(yīng)的驅(qū)動,因此需要單獨開發(fā)基于FPGA 實現(xiàn)的PCI/PCIX IP 核驅(qū)動[4]。首先在內(nèi)核中注冊一個PCI 設(shè)備,將FPGA 作為一個塊設(shè)備注冊(在Linux 下,塊設(shè)備比字符設(shè)備具有更大的數(shù)據(jù)吞吐速率);在Linux 內(nèi)核中調(diào)用pci-enabledevice()函數(shù)探測并激活FPGA。當PowerPC440 處理器探測到Device ID 和VendorID 分別為0x1000、0x10ee 時,即為發(fā)現(xiàn)PCI 設(shè)備FPGA,發(fā)起數(shù)據(jù)傳輸操作。
數(shù)據(jù)傳輸采用DMA 方式,與配置的PCI/PCIX突發(fā)模式對應(yīng)。
將PCI/PCIX 驅(qū)動程序采用insmod 命令編譯進Linux 內(nèi)核,加載網(wǎng)絡(luò)文件系統(tǒng)后, 在應(yīng)用層發(fā)起PCI/PCIX 傳輸操作,將SDRAM 中的64 Mbyte數(shù)據(jù)由FPGA 經(jīng)PCI/PCIX 寫入到PowerPC440 的內(nèi)存,通過示波器測PCI/PCIX 的FRAME 信號,FRAME 為幀周期信號,表示一次訪問的開始和持續(xù)時間。
實驗條件如下:CPU 為Pentium(R)Dual -CoreE5200@2.5GHz;內(nèi)存2 Gbyte;操作系統(tǒng)為Windows XP Professinal Service Pack 3;ISE 版本:10.1.03;Linux 內(nèi)核版本:2.6.26.1;示波器:Agilent Oscilloscope DSO5034A。實驗結(jié)果如表1 所示。
表1 PCI/PCIX IP 核傳輸速率Table 1 The transmission speed for PCI/PCIX
實驗表明,基于FPGA 實現(xiàn)的PCI/PCIX IP 核在66 M/64 bit,以突發(fā)長度為512 byte的條件下,傳輸速度可穩(wěn)定在420 Mbyte/s以上,總線利用率在80%左右,性能超過目前常用的RapidIO(3.125 Gbit/s)總線以及PCIE(2.5 Gbit/s)總線,考慮到PCI/PCIX 總線在嵌入式系統(tǒng)設(shè)計中的通用性及實現(xiàn)難度, 這種傳輸方式將會得到廣泛應(yīng)用,且已在某寬帶項目中得到驗證。
傳統(tǒng)寬帶數(shù)傳通過采用PCI9054、PCI9656 等外圍芯片實現(xiàn)PCI 總線協(xié)議,這種方式增加了PCB 板的面積與功耗,及系統(tǒng)復(fù)雜性,而采用FPGA 通過VHDL 硬件語言實現(xiàn)PCI/PCIX 協(xié)議,將PCI/PCIX 作成一個通用的IP 核,增加了程序的通用性或移植性,為寬帶數(shù)據(jù)處理終端提供了一種靈活的數(shù)據(jù)傳輸方式,是利用FPGA 實現(xiàn)高速數(shù)傳的一種有效嘗試。目前,PCI/PCIX 總線是66 M/64 bit傳輸方式,下一步考慮升級為133 M/64 bit傳輸方式,以增加系統(tǒng)帶寬,實現(xiàn)更高速度的寬帶數(shù)傳。
[1] 楊茂, 戴紫彬.基于PCI9656 設(shè)備驅(qū)動程序的linux2.6內(nèi)核研究[ J] .微計算機信息,2006,22(1):126-128.
YANG Mao,DAI Zi-bin.Research of linux 2.6 kernel based on devic driver of PCI9656[ J] .Information of Micor-Computer,2006, 22(1):126-128.(in Chinese)
[2] 曹琦,畢篤彥,王洪迅.基于PCI 總線的高速CCD 圖像存儲系統(tǒng)設(shè)計[J] .微計算機信息,2007,23(19):169-171.
CAO Qi, BI Du-yan,WANG Hong-xun.High-speed CCD image storage system desiging based on PCI bus[J] .Information of Micor-Computer,2007,23(19):169-171.(in Chinese)
[3] 周磊, 胡學龍.基于linux 平臺的PCI 數(shù)據(jù)接口卡驅(qū)動設(shè)計[ J] .國外電子測量技術(shù),2006,25(12):16-19.
ZHOU Lei,HU Xue-long.Design of PCI data interface card driver based on linux[ J] .Foreign Electronic Measurement Techmology,2006,25(12):16-19.(in Chinese)
[4] Corbet J, Rubini A,Kroah-Hartman G.LINUX 設(shè)備驅(qū)動程序[M] .魏永明, 耿岳,鐘書毅, 譯.北京:中國電力出版社, 2007.
Corbet J,Rubini A,Kroah-Hartman G.linux device driver[M] .Translated by WEI Yong-ming,GENG Yue,ZHONG Shu-yi.Beijing:China Electric Power Press,2007.(in Chinese)