基于PCI/PCIX 总线实现宽带数据高速传输

2012-03-18 08:10李燕斌
电讯技术 2012年8期
关键词:数传内核宽带

张 峰,李燕斌

(中国西南电子技术研究所, 成都610036)

1 引 言

宽带数传通常用于空地或空空的实时预警监视图像信息传输,目前的ISR 图像正朝着高帧频、高分辨率方向发展,这种海量数据是否能够高速传输,逐渐成为限制宽带数传终端发展的瓶颈。传统数传终端采用PCI 专用芯片(PCI9054、PCI9656 等)实现PCI协议[1-3],这种实现方式存在传输速度低、配置灵活性差等缺点。针对这些缺点,本文通过VHDL 语言在FPGA 内实现PCI/PCIX 总线协议,实现了宽带数据高速传输。PCI/PCIX 总线采用66 M/64 bit模式,突发长度为 512 byte, 利用率可达 80%, 即420 Mbyte/s,实验表明,此通信方式稳定可靠,且易于扩展,是宽带高速数传终端的一种理想选择。

2 PCI/PCIX 协议简析

PCI 总线标准于1993 年首次提出,版本几经更新,带宽 由33 M/32 bit 发 展到66 M/64 bit 后, 升 至PCIX 标准的133 M/64 bit模式。PCI/PCIX 总线可同时支持多个功能模块,并不受限于处理器结构,可作为处理器和高速外围功能模块的桥梁。

PCI/PCIX 总线可采用5 V或3.3 V两种供电环境,但不能混合使用。其信号线为CMOS 电平,静态电流小,可考虑在FPGA 内直接实现PCI/PCIX 的IP核,相对于采用PCI9054 等芯片方式,采用IP 核的方式能够减少PCB 布板面积,降低工程成本,简化数据流向,且具有易于升级、扩展等功能。

3 基于FPGA 实现PCI/PCIX 总线IP 核

宽带数传终端模块硬件结构框图如图1 所示。模块可认为由采集子单元和主控子单元构成。采集子单元主要由FPGA 及其相连的外围芯片组成,CCD相机数据通过Cameralink 接口进入到FPGA,由FPGA 完成对相机数据的采集,并通过SDRAM 乒乓缓存,缓存后的数据通过PCI/PCI 总线与主控子单元相连。主控子单元主要由PowerPC 及其相连的外围芯片组成,内存由512 Mbyte的DDR 存储器组成,外置Flash 芯片用于存储操作系统信息,通过网络物理层芯片实现了网络通信功能,用于与上位机进行数据交互,主控单元作为PCI/PCIX 总线的主设备,通过点对点通信,与作为从设备的FPGA 相连。

图1 基于PCI/PCI 总线的宽带数传框图Fig.1 The wideband data transport structure based on PCI/PCIX

宽带数传终端模块软件主要涉及在FPGA 内实现PCI/PCIX 协议,利用中断和主控单元实现基于PCI/PCIX 的数据交互。PowerPC 加载操作系统及PCI 设备驱动,实现PCI/PCIX 数据交互。其关键技术和实现难点在于如何在FPGA 内通过VHDL 语言实现PCI/PCIX 协议及在PowerPC440 下Linux 操作系统的移植。

根据PCI/PCIX 协议,在FPGA 内实现此IP 核,可考虑将PCI/PCIX IP 核划分为6 个单元,即PCI I/O 接口单元、极性产生/判别单元、发送单元、接收单元、配置空间单元和用户应用接口,如图2 所示。

图2 PCI/PCIX 结构框图Fig.2 PCI/PCIX IP core structure

PCI I/O 接口模块用于PCI/PCIX IP 核的对外接口信号,通常通过“金手指”与PCI 插槽相连。

极性产生/判别模块对地址数据AD 信号,字节使能CBE 信号R 进行奇偶校验,并通过PERR 信号和SERR 信号上报结果。

发送模块根据用户应用需要产生发送数据状态机,发送PCI/PCIX 数据, 支持的数据读写方式有PIO 32 位、PIO 64 位以及突发32 位、突发64 位。

接收模块根据用户应用需要产生接收数据状态机,接收PCI/PCIX 数据。

配置空间模块用于配置PCI/PCIX 配置空间中的3 个基址寄存器、命令/状态寄存器、中断线以及Device ID 和Vendor ID 等。

用户应用接口是PCI/PCIX 总线IP 核最重要的逻辑接口,它控制发送状态机发送数据,并对接收到的数据进行判断,同时对中断进行控制和处理等。

实际工程中,将配置空间中的Device ID 和Vendor ID 分别设置为0x1000、0x10ee,以在PowerPC440加载操作系统时加以探测并区分。将基址寄存器0配置为I/O 空间,256 byte大小,并使能BAR0。BAR2配置为Memory 空间,64 Mbyte,64 bit宽。基址寄存器2 映射为64 Mbyte空间,是根据FPGA 外接的64 Mbyte 的SDRAM 的寻址范围确定的,如图1 所示。

在用户应用接口,配置PCI/PCIX IP 核为64 bit突发写模式,FPGA 发起数据传输, 将数据写入到PCI 的基址寄存器BAR2,写完64 Mbyte数据,产生中断信号,通知处理器PowerPC440 进行数据处理。中断信号由FPGA 产生,通过INTA 信号接口,连接到PowerPC440 的中断控制器上。

4 PowerPC440 加载PCI/PCIX 驱动

本文选择在PowerPC440 处理器上运行Linux 操作系统[4]。

嵌入式Linux 操作系统的移植分为四步:第一步,做嵌入式处理器的引导程序bootloader,这一部分相当于PC 机的BIOS,即需要嵌入式处理器完成一个上电自启动;第二步,裁减Linux 内核,需要嵌入式处理器自启动后加载定制的Linux 内核,将PCI 编译成内核的一个模块;第三步,建立文件系统,Linux 通过文件系统对文件及设备进行管理,需要文件系统对PCI 进行管理、控制;第四步,编写应用层程序,通过应用层程序,发起PCI 操作,完成数据传输。

由于FPGA 本身不是标准的PCI 接口,在Linux操作系统中并不存在相应的驱动,因此需要单独开发基于FPGA 实现的PCI/PCIX IP 核驱动[4]。首先在内核中注册一个PCI 设备,将FPGA 作为一个块设备注册(在Linux 下,块设备比字符设备具有更大的数据吞吐速率);在Linux 内核中调用pci-enabledevice()函数探测并激活FPGA。当PowerPC440 处理器探测到Device ID 和VendorID 分别为0x1000、0x10ee 时,即为发现PCI 设备FPGA,发起数据传输操作。

数据传输采用DMA 方式,与配置的PCI/PCIX突发模式对应。

5 测试结果

将PCI/PCIX 驱动程序采用insmod 命令编译进Linux 内核,加载网络文件系统后, 在应用层发起PCI/PCIX 传输操作,将SDRAM 中的64 Mbyte数据由FPGA 经PCI/PCIX 写入到PowerPC440 的内存,通过示波器测PCI/PCIX 的FRAME 信号,FRAME 为帧周期信号,表示一次访问的开始和持续时间。

实验条件如下:CPU 为Pentium(R)Dual -CoreE5200@2.5GHz;内存2 Gbyte;操作系统为Windows XP Professinal Service Pack 3;ISE 版本:10.1.03;Linux 内核版本:2.6.26.1;示波器:Agilent Oscilloscope DSO5034A。实验结果如表1 所示。

表1 PCI/PCIX IP 核传输速率Table 1 The transmission speed for PCI/PCIX

实验表明,基于FPGA 实现的PCI/PCIX IP 核在66 M/64 bit,以突发长度为512 byte的条件下,传输速度可稳定在420 Mbyte/s以上,总线利用率在80%左右,性能超过目前常用的RapidIO(3.125 Gbit/s)总线以及PCIE(2.5 Gbit/s)总线,考虑到PCI/PCIX 总线在嵌入式系统设计中的通用性及实现难度, 这种传输方式将会得到广泛应用,且已在某宽带项目中得到验证。

6 结束语

传统宽带数传通过采用PCI9054、PCI9656 等外围芯片实现PCI 总线协议,这种方式增加了PCB 板的面积与功耗,及系统复杂性,而采用FPGA 通过VHDL 硬件语言实现PCI/PCIX 协议,将PCI/PCIX 作成一个通用的IP 核,增加了程序的通用性或移植性,为宽带数据处理终端提供了一种灵活的数据传输方式,是利用FPGA 实现高速数传的一种有效尝试。目前,PCI/PCIX 总线是66 M/64 bit传输方式,下一步考虑升级为133 M/64 bit传输方式,以增加系统带宽,实现更高速度的宽带数传。

[1] 杨茂, 戴紫彬.基于PCI9656 设备驱动程序的linux2.6内核研究[ 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 图像存储系统设计[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 数据接口卡驱动设计[ J] .国外电子测量技术,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 设备驱动程序[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)

猜你喜欢
数传内核宽带
我国行政村、脱贫村通宽带率达100%
基于数传电台的靶弹测控系统设计
强化『高新』内核 打造农业『硅谷』
装宽带的人
嫦娥卫星数传副瓣信号的干涉测量研究与精度验证
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
微生物内核 生态型农资
一种新颖的宽带大功率分配器
高速数传电缆散射参数的测试及半实物仿真的分析与研究