欢迎访问有用文档网!

当前位置: 有用文档网 > 作文大全 >

一种通过PCI总线配置FPGA的设计方法

| 浏览次数:

摘 要:在软件无线电领域中,系统必须具有较强的动态重构能力。这里讨论PCI协议特点和FPGA配置过程,给出一种通过PCI总线配置卡上FPGA的设计方法。硬件部分采用CPLD实现读写配置空间、PCI总线时序和FPGA配置时序,软件部分采用WinIO作为驱动程序。设计上简洁、灵活,不依赖专用PCI接口芯片,也不需要下载电缆。实践证明,这种方法便捷可靠,对PCI卡的设计具有很好的参考价值。

关键词:PCI总线;FPGA;软件无线电;WinIO

中图分类号:TP336文献标识码:A

文章编号:1004-373X(2010)02-090-03

Design Method of Configuring FPGA by PCI Bus

WANG Yuanqiang,ZHU Wei

(School of Electronic Science & Technology,Southeast University,Nanjing,210096,China)

Abstract:In the field of software radio,systems have to be equiped with a strong ability of dynamic reconstruction.The features of PCI protocol and the operation of configuring FPGA are discussed,a design method of configuring FPGA on cards by PCI bus is presented.In hardware part,a CPLD is used to implement PCI configuration read/write operation,and in software part,WinIO is used for the driver.The design is simple and flexiable because it doesn′t depend on special PCI interface chips and download cables.Pratice has proved the method convinent and reliable.So,it is valuale for guiding other PCI cards design.

Keywords:PCI bus;FPGA;software radio;WinIO

0 引 言

近十年来,半导体工艺水平的进步和市场需求的骤增推动了FPGA向高速度、高密度和低成本方向飞速发展。由于它具有强大的处理能力和高度的灵活性,人们在PCI卡上使用FPGA进行的图像处理、运动控制和协议转换已经逐渐成为一种主流的设计方法。然而,在某些场合,设计者和用户还要求以FPGA为核心的硬件系统具有动态的功能重组和逻辑重构的能力。例如,在软件无线电中,硬件平台的核心器件FPGA经常要根据工作频段、业务种类、数据速率与格式、传输协议等被实时在线地重新配置[1]。

系统中的硬件一般都是以PCI卡的形式存在的,对于PCI卡上的FPGA器件,传统的配置方法有外挂ROM、通过串口和通过USB接口三种方法[2]。外挂ROM的方法显然不够灵活,保密性低;通过串口或者通过USB接口的方法必须外接一根下载电缆,较为繁琐。这里提出一种通过PCI总线对卡上FPGA器件进行配置的方法。采用该方法配置或重配置FPGA时,操作者只需要在PC机上运行包含加载程序的软件,就可以在不同的任务阶段自动或手动地将准备好的配置逻辑通过PCI总线加载到FPGA中,整个操作过程完全软件化,无需拔插下载电缆;还可以通过Internet,实现远程配置。在配置工作完成之后,配置电路还可以充当主机与卡上FPGA进行数据交换的桥梁。

1 总体方案

这里所述的设计,遵守PCI SIG于1999年发布的《PCI局部总线规范2.2版本》,信号环境为5 V,PCI时钟频率为33 MHz,总线宽度为32位。

首先利用EDA工具编写RTL代码,然后进行编译、仿真、综合,最后生成配置文件。加载软件在被自动或手动触发后,将相应的配置文件中的数据以一定的格式通过操作系统和PCI总线传递到PCI卡中。如何从PCI总线上获得数据,以及把数据按照FPGA的配置时序要求加载到FPGA器件中是整个设计的关键。该设计采用了CPLD来解决这一关键问题。图1所示为整个系统的架构和各部分之间的逻辑关系。

与采用PCI接口芯片(如PCI9054)加单片机[3](或者加CPLD [4])的设计方案相比,只采用CPLD的方案使简化了硬件电路,降低了成本,节省了PCB面积,而且数据传输通道的速度不受单片机处理速度和引脚数量的限制。

图1 系统框架示意图

2 硬件设计

这里介绍的设计中,选用一片Xilinx的CPLD,型号为XC95144XL,封装为TQ100。

2.1 信号连接和PCB设计考虑

基本的PCI总线操作要求下列信号必须实现:CLK,RST,FRAME,TRDY,IRDY,IDSEL,DEVSEL,AD[31:0],C/BE[3:0]。这些信号都应连接到CPLD的I/O引脚上。其中,CLK应该在CPLD的GCK引脚上实现,时钟信号线的长度应控制在2.5 in左右;RST应该在GSR引脚上实现。PRSNT[1:2]的两个引脚至少应有一个接地。建议使用四层PCB设计PCI卡,中间两层应为电源和地[5]。

2.2 PCI总线时序分析和接口设计

PCI总线的功能强大,协议复杂,要在一片CPLD上实现主从设备之间数据传输的时序,需要有选择地实现接口协议。该设计中采用读写配置寄存器的总线操作来传输数据。这种方式仅支持单数据周期,对CPLD的资源要求低,并且不占用计算机系统的地址空间。

在配置写周期上,CPLD把总线上的数据锁存到内部寄存器中;在配置读周期上,CPLD把内部寄存器中的数据放置到总线上[5]。图2和图3分别为PCI总线上配置写操作和配置读操作的时序[6]。

图2 PCI总线配置写操作时序

在CPLD内要实现两个时序,PCI总线操作时序和FPGA配置时序。为此,在CPLD内部设计了两个状态机,分别命名为busstate和cfgstate。前者对应于PCI总线操作,它可以在IDLE,ADDRESS,DECODE,PREPARE和LATCH五个状态之间顺序切换。在PCI总线空闲时,状态机处于IDLE状态。当状态机在ADDRESS状态时,CPLD从地址/数据总线上获得目标寄存器的地址,从C/BE[3:0]上获得操作类型编码;当状态机在LATCH状态时,CPLD将地址/数据总线上的数据锁存到内部寄存器中,或者是将内部数据放置到地址/数据总线上。在每一次总线操作中,状态机根据握手信号的组合变化情况按顺序切换。

图3 PCI总线配置读操作时序

根据PCI规范,一个合法的PCI目标设备至少应该实现以下几个配置寄存器:供应商识别码寄存器(Vendor ID)、设备识别码寄存器(Device ID)、版本号寄存器(Reversion ID)、分类识别码寄存器(Class Code)。除此之外,该设计还实现了一个用于存放命令字、状态字和数据的32位内部寄存器如下:

State_regRdata_regCmd_regWdata_reg

24~311680

内部寄存器是CPLD数据中转的核心。PCI总线上的配置数据将先被存入Wdata_reg中,然后再写入FPGA中;从FPGA中读出的数据将先被写入Rdata_reg中,然后再被投放到PCI总线上。软件程序通过写入命令字到Cmd_reg中,使CPLD执行相应的操作;通过查询State_reg的内容来获知工作状态。Cmd_reg和State_reg是软件程序和CPLD相互配合的枢纽。

2.3 CPLD配置FPGA的时序分析和逻辑设计

FPGA器件的配置原理和基本方式都大同小异。这里以Xilinx的Spartan_IIE系列器件为例,有五种配置模式:从串(Slave Serial)、主串(Master Serial)、从并(Slave Parallel)、主并(Master Parallel)和JTAG模式[7]。其中,从并模式的数据宽度为8位,配置速度最快,数据格式简单,适用于CPLD或者MCU配置FPGA的场合,故采用这种方式。配置文件采用由Xilinx的综合开发工具ISE自动生成BIN格式文件,它全部由二进制格式的配置数据构成,易于软件程序的处理和加载。

Spartan_IIE系列FPGA器件的正常配置过程包括四个步骤:启动配置、清除内存、加载数据和器件启动。对FPGA的配置从Cmd_reg收到启动配置命令开始,CPLD立即给FPGA的PROGRAM引脚送去低脉冲,FPGA随即会置低INIT信号,表明它已经响应了配置操作,并开始清除内部SRAM[8]。FPGA完成清除配置内存的工作后,将拉高INIT信号,此时CPLD会把这一状态写入State_reg中,供软件程序查询。接下来,软件程序会把配置数据依次写入Write_reg中,CPLD再把这些数据转写到FPGA中。在送完所有的配置数据后,还应该给FPGA器件提供8个周期的时钟信号,用于让器件进入执行设计逻辑的用户操作状态。配置操作成功之后,FPGA会把DONE信号抬起,CPLD在检测到DONE变高之后将会在State_reg中写入表示配置成功的状态字,供用户程序查询。否则,表明配置失败。在成功配置FPGA后,原先用于配置操作的某些引脚(如WR,CS)随即转化为普通的I/O口,可用于传输用户数据。

状态机cfgstate用于协调CPLD对FPGA的配置操作和数据传输。该状态机在以下七个状态之间切换:空闲状态(IDLE)、启动配置(INITIATE)、加载配置数据(LOADING)、启动FPGA器件(STARTUP)、向FPGA写入类别码和地址码(OUTCTRL)、向FPGA写入数据(OUTDATA)、从FPGA读出数据(GETDATA)。两个状态机busstate和cfgstate联系的桥梁是State_reg,Rdata_reg,Cmd_reg和Wdata_reg这4个寄存器。

3 软件设计

3.1 底层驱动

软件程序的最基本操作是读/写PCI配置寄存器。在PC_AT架构的系统中,这一操作转化为对读/写两个地址分别为0CF8h和0CFCh的I/O单元的操作。在Windows NT/2000/XP中,操作系统不允许用户程序直接访问I/O单元,因此借助于能够打开操作系统I/O特权操作的库WinIO。在它的支持下,用户可以直接读写I/O端口[9]。在软件程序中,WinIO充当底层驱动程序。读写地址为0CF8H的CONFIG_ADDRESS方式如下:

ENRSVBUSDEVFUNREG00

3124~3016~2311~158~102~710

其中,EN(位31)是使能位,它用于确定何时把对CONFIG_DATA的访问转换为PCI总线上的配置访问;RSV(位24~位30)是保留位;BUS(位16~位23)用于选择系统中特定的PCI局部总线;DEV(位11~位15)用于选择总线上的特定设备;FUN(位8~位10)在设备支持多功能的情况下,用于选择设备的特定功能;REG(位2~位7)用于选择设备配置空间的双字;位1和位0是只读位,且返回值必须为0[4]。

在设置好CONFIG_ADDRESS后,如果是读PCI配置寄存器,用户程序则调用WinIO的读I/O函数,从CONGIF_DATA(地址为0CFCH)读出数据,即为目标寄存器的内容;如果是写PCI配置寄存器,用户程序则调用WinIO的写I/O函数,将要写入的用户数据写到CONFIG_DATA中即可。

为了便于编写软件程序,作者封装了两个函数用于读写PCI配置寄存器:

UINT ReadRegister(int BusNo,int DevNo,UINT RegAddr);

void WriteRegister(int BusNo,int DevNo,UINT RegAddr,UINT dwData)

其中,BusNo表示PCI卡所在的PCI总线序号;DevNo表示PCI卡所安装的PCI插槽序号;RegAddr是目标寄存器的地址;dwData是要写入寄存器的数据。

3.2 应用软件的设计

由于PCI卡是即插即用(PnP)设备,因此PCI卡的地址空间是不固定的。为了访问目标配置空间,用户程序首先应该探测PCI卡所在总线序号(BusNo)和插槽的序号(DevNo)。探测的方法是:让总线号在0~4之间变化,让设备号在0~31之间变化,逐一读取Vendor ID寄存器和Device ID寄存器,并与预先设定值相比较。当发现到二者都吻合时,记下此时的BusNo和DevNo,并保存在全局变量中,供ReadRegister()和WriteRegister()使用。探测的PCI卡的C语言程序代码如下:

int bus,device;

UINT ioAddr,ioData;

int Scan() {

bus=0; device=0;

for(int i=0;i<5;i++) {

for(int j=0;j<32;j++) {

bus=i; device=j;

ioAddr=0x80000000+bus*0x10000+(device*8)*0x100;

_outpd(0xcf8,ioAddr);

ioData=_inpd(0xcfc);

if (ioData==0x55AA1022) return 0;

}

}

return -1;

}

为了评估和测试PCI卡的性能,使用VC++ 6.0设计一个软件程序,包含如下六项功能:读配置寄存器;写配置寄存器;配置FPGA;从FPGA中读数据;向FPGA中写数据;退出程序。经过调试,该软件程序可以准确无误地读/写PCI卡上的配置寄存器,配置FPGA,传输用户数据。设计者可以根据具体的应用场合开发界面更美观、功能更完善的软件,但都应包含以上六项功能。

4 结 语

采用CPLD通过PCI总线配置FPGA的设计方法已经在笔者研制的带有FPGA芯片的PCI卡上得以实现和应用。实践证明,这种设计能够准确、可靠、便捷地将配置数据加载到FPGA中,配置过程彻底软件化。配置完成后,FPGA完全按照设计逻辑工作,结果与其他配置方式无异。在FPGA启动后,CPLD还可以担负起主机和FPGA之间数据传输的任务[10],数据宽度为8 b时,传输速度可达2.5 Mb/s。

参考文献

[1]刘伟,孟宪元.FPGA在软件无线电中的应用[J].有线电视与网络,2001(1):69-71.

[2]乔建良,田思.基于MCU的CPLD/FPGA配置[J].现代电子技术,2004,27(19):70-72.

[3]梅安华,田建生,刘欢.基于PCI总线FPGA配置系统的设计[J].计算机测量与控制,2005,13(4):375-377.

[4]梅安华,田建生,刘欢.基于总线灵活配置FPGA设计[J].电子技术,2004(9):18-21.

[5]李贵山,陈金鹏.PCI局部总线及其应用[M].西安:西安电子科技大学出版社,2003

[6]Tom Shanley,Don Anderson.PCI System Architecture[M].4th Edition.Addison Wesley Longman Inc.,2000.

[7]Xilinx Inc.Spartan_IIE FPGA 数据手册[Z].2004.

[8]李鹏,兰巨龙.用CPLD和FLASH实现FPGA配置[J].电子技术应用,2006(6):101-103.

[9]于朋飞,张元涛,张有志.一种实现对PCI配置空间访问的方法[J].山东大学学报,2003,8(4):421-424.

[10]曾哲昱,叶卫东.用CPLD实现PCI总线目标接口[J].测控技术,2002,21(1):45-47.

作者简介

王元强 男,1980年出生,硕士研究生。研究方向为嵌入式系统。

朱 为 男,硕士生导师,副教授。研究方向为嵌入式系统、图像处理与传输。

推荐访问:总线 配置 方法 设计 PCI

热门排行Top Ranking

支部组织生活方面存在问题清单和整改措施 党组织生活个人问题整改清单

下面是小编为大家精心整理的支部组织生活方面存在问题清单和整改措施党组织生活个人问题整改清单文章,供大家阅读参考

2021年党员个人问题清单及整改措施 党组织生活个人问题整改清单

下面是小编为大家精心整理的2021年党员个人问题清单及整改措施党组织生活个人问题整改清单文章,供大家阅读参考。

浅析军队战斗力损耗的新变化

关键词:军队;战斗力损耗;新变化军队战斗力的结构,是战斗力各要素间的结合方式和相互关系。军队战斗力的

小学六年级毕业演讲稿100字左右9篇

小学六年级毕业演讲稿100字左右9篇小学六年级毕业演讲稿100字左右篇1敬爱的老师,亲爱的同学们:大

问题及整改措施 (2) 药房个人存在问题及整改措施

下面是小编为大家精心整理的问题及整改措施(2)药房个人存在问题及整改措施文章,供大家阅读参考。精品文章《问题及

个人问题清单及整改措施(最新) 能力作风建设个人问题清单及整改措施

下面是小编为大家精心整理的个人问题清单及整改措施(最新)能力作风建设个人问题清单及整改措施文章,供大家阅读参考。在认真

疫情防控赞美警察诗朗诵 关于警察的诗朗诵

下面是小编为大家精心整理的疫情防控赞美警察诗朗诵关于警察的诗朗诵文章,供大家阅读参考。疫情防控赞美警

纳税人满意度调查存在不足及对策探讨 提升纳税人满意度的方式方法有哪些

下面是小编为大家精心整理的纳税人满意度调查存在不足及对策探讨提升纳税人满意度的方式方法有哪些文章,供大家阅读参考。纳

小学思想品德教育面临的问题及对策

摘要:小学思想品德课程是小学教育教学过程中不可或缺的一门综合性课程,它对学生良好品德的形成具有重要影

2020党支部班子查摆问题清单及整改措施 农村党支部问题清单

下面是小编为大家精心整理的2020党支部班子查摆问题清单及整改措施农村党支部问题清单文章,供大家阅读参

消防安全检查简报 派出所校园消防安全检查简报

下面是小编为大家精心整理的消防安全检查简报派出所校园消防安全检查简报文章,供大家阅读参考。简报第2期申扎县中学

2021教师党员年度个人总结8篇

2021教师党员年度个人总结8篇2021教师党员年度个人总结篇1敬爱的党组织:我是一个普通年轻的人民