PCI总线协议的FPGA实现及驱动设计

发布者:大头玩家最新更新时间:2012-04-14 来源: dzsc关键字:PCI总线  FPGA  虚拟设备 手机看文章 扫描二维码
随时随地手机看文章

  现在市面上存在着各种PCI接口芯片,如AMCC公司的S5933,PLX的9080系列等。专用芯片可以实现完整的PCI主设备与从设备模式的接口功能,将复杂的PCI总线接口转化为相对简单的用户接口,但系统结构受接口芯片的限制,不能灵活地设计目标系统,且成本较高。本文使用符合PCI电气特性的FPGA芯片进行简化的PCI接口逻辑设计,实现了33MHz、32位数据宽度的PCI从设备模块的接口功能,节约了系统的逻辑资源,且可以将其它用户逻辑集成在同一块芯片上,降低了成本,增加了设计的灵活性。另外,还给出了Windows9x系统下的设备驱动程序,可以与应用程序接口,形成一个完整的系统。目前,本系统已经被印染企业应用在数据采集和处理等方面。
  
  1 系统构成与功能描述
  
  系统的总体框图如图1所示。

  由图1可见,系统的硬件平台为一块PCI卡。此卡的结构十分简洁,主要由FPGA芯片、RAM芯片和输出接口三部分组成。其中,FPGA芯片集成了PCI接口模块和数据处理模块。PCI接口模块实现了33MHz工作时钟、32位总线宽度的接口功能,支持I/O空间、内存空间及配置空间的读写和PCI中断功能。由于简化的PCI接口占用的逻辑资源较少,可以在同一块芯片中集成其他用户逻辑。作为一个应用实例,本文加入了一个数据处理模块,对PCI接口传送来的数据进行处理,通过片外的输出接口输出到下位机。RAM芯片为数据处理提供缓存功能。
  
  2 从设备模式下的简化PCI协议的实现
  
  为了实现PCI接口的基本功能,必须完成以下几个模块:
  
  (1)PCI配置空间设置。PCI协议支持三种地址空间:I/O空间、内存空间和配置空间。配置空间提供了支持PCI设备自动配置的机制,是必需的。
  
  (2)PCI从设备状态机。PCI总线状态机是具有PCI总线的计算机系统的状态流,是由一个已知状态到另一个状态的条件、时序的描述。这是PCI接口设计中最基本也是最重要的部分。
  
  (3)地址译码和命令译码。地址译码用来确定PCI设备是否应当响应当前总线的操作;命令译码则用来指示PCI设备根据不同的总线命令作出相应的动作。
  
  本文采用ALTERA公司的Max+PlusII软件平台,硬件描述语言使用ALTERA HDL语言,也可以方便地转换成VHDL或VerilogHDL语言。在此之前,先引入PCI总线信号的定义。
  
  2.1 总线信号定义
  
  根据PCI总线协议2.2版,从设备模式下PCI接口至少包含47根引脚。图2给出了按功能划分的引脚分布,左边是必需引脚,右边是可选引脚。为简化起见,本文采用了如下引脚,其他引脚均不使能或置为高阻态。

  (1)由系统提供的33MHz的同步时钟信号CLK和复位信号RST#(#表示低电平有效);
  
  (2)关于数据传输的核心信号:32位地址/数据复用线AD[31:0]、总线命令/字节使能复用线C/BE[3:0]#和偶校验信号PAR;[page]
  
  (3)接口控制信号FRAME#、TRDY#、IRDY#、STOP#、DEVSEL#和IDSEL。其中,FRAME#为数据传输起止信号,TRDY#为主设备准备好信号,IRDY#为从设备准备好信号,STOP#为从设备停止请求信号,DEVSEL#为设备选择信号,IDSEL为配置空间读写时的片选信号;
  
  (4)中断引脚INTA#。为简化PCI协议,本文只实现了最重要的总线命令,表1给出了所支持的总线命令对应的C/BE[3:0]#编码值。

  2.2 配置空间设置

  配置空间大小为256字节,前64字节必需,记录了PCI设备的基本信息,比较重要的有:
  
  (1)VendorID、DeviceID和Class Code域:分别表示设备的生产厂商、设备编号和类型;
  
  (2)Command和Status域:分别给出了对PCI设备的控制命令和当前状态;
  
  (3)Base Adress Register域:指示此PCI设备按I/O方式还是内存方式进行读写以及需要的地址空间大小;
  
  (4)Interrupt Line和Interrupt Pin域:分别指明了设备使用的中断号和中断引脚。 在对配置空间的访问中,用AD[7:2]寻址一个双字DWORD。在本设计中,配置空间设置如表2所示,各值的具体含义请参阅文献[1]。

  2.3 简化的从设备状态机
  
  在PCI协议中,标准的从设备状态机包含五种状态,而且各状态的跳转条件比较复杂。本文在不违反PCI协议的前提下,简化了从设备的状态机,如图3所示。
 

[page]

  图3中,状态转移条件信号a、b、c定义如下:a代表配置空间访问条件,b代表I/O空间或内存空间访问条件,c代表总线传输开始条件。这三个条件的实现由后面的命令译码模块给出。
  
  IDLE是系统的缺省状态,表示总线当前空闲。通常,设备处在IDLE状态时,要检测来自PCI总线和后级设备的信号,以便设备作出合适的响应。设备处于S_DATA状态时完成第一次数据传输,直接无条件跳到BACKOFF状态。设备在BACKOFF状态时进行多个数据传输,直至主设备断开访问。需要注意的是:任何对I/O空间、配置空间以及内存空间的突发传输的地址超过了设备映射地址的范围时,从设备要在此状态建立STOP信号,断开访问。当帧信号无效或主设备终止传输时,设备回到初始的IDLE状态。BUS_BUSY状态时总线忙,表示总线正在被其它设备使用。有两条转移路径,若总线仍然被占用,则停留在BUS_BUSY状态,否则返回空闲状态IDLE。
  
  2.4 地址译码和命令译码模块
  
  地址译码模块主要检测PCI地址与本PCI卡的基地址是否匹配,可以通过AD[31:00]信号线上的值与设置的基地址作比较判断。如果PCI地址落在设置的基地址范围内,则PCI卡响应当前的总线操作。
  
  命令译码模块指示PCI卡响应不同的总线命令,通过检测C/BE[3:0]#信号线上的值,与表1列出的总线命令作比较,完成命令译码。
  
  3 Windows9x系统下驱动程序的设计
  
  对PCI设备而言,驱动程序提供了获取PCI卡的配置空间信息、勾挂PCI中断、总线数据传输等功能。本文介绍使用Numega公司的VtoolsD软件进行驱动设计的方法。
  
  3.1 寻找PCI卡并读取配置空间信息
  
  配置空间包含了系统初始化PCI设备所必需的信息,首先需要遍历整个硬件树结构来寻找指定的PCI设备。对于每一个设备,比较其厂商号(Vendor ID)和设备编号Device ID,如果与设计的PCI卡的信息匹配,则读取它的配置空间信息。
  
  3.2 I/O方式下的读写操作
  
  I/O方式下的读写比较简单。在得到PCI设备基地址信息后,通过C++语言中的端口读写函数inpd和outpd即可完成。举例如下:
  
  Temp=_inpd(gBaseAddresses);// Temp中得到读出的数据
  
  _outpd(gBaseAddressesData); //向基地址写入数据
  
  其中,gBaseAddresses为基地址值,Data为写操作时的数据。
  
  3.3 内存方式下的读写
  
  对于内存方式下的读写,一个重要问题就是地址的映射。因为硬件设备读写的是物理内存,但应用程序读写的是虚拟地址,所以存在着将物理内存地址映射到用户程序线性地址的问题。
  
  映射功能通过调用VtoolsD软件的标准库函数完成。根据给定的物理地址和所要求的空间大小,在系统内存中分配相应空间。首先,用PageReserve函数分配当前保留页的线性地址空间,再利用PageCommitPhys函数的服务对开始的线性地址空间分配相应的物理地址空间。程序如下:
  
  ULONG nPages=_NPAGES_(PhysAddressSizeInBytes);
  
  Linear=PageReserve(PR_SYSTEMnPagesPR_FIXED);
  
  PageCommitPhys(PAGENUM(Linear),nPagesPAGENUM (PhysAddress),PC_INCR | PC_WRITEABLE | PC_USER);
  
  LinPageLock(PAGENUM(Linear),nPages0);
  
  其中,PhysAddress为给定的物理地址,SizeInBytes为需要的空间大小。
  
  建立了物理RAM到系统内存的映射后,就可以利用C++语言中的文件操作基类CFile类完成数据的读写。首先使用CFile类的成员函数Open打开文件,为保证数据读写的准确无误,必须使用二进制方式打开;接下来使用Read和Write成员函数进行文件读写;完毕后用Close成员函数关闭文件。
  
  3.4 中断的勾挂和处理
  
  首先在ON_DEVICE_INIT函数中完成中断的初始化。即通过前面读取的PCI设备的中断号,使用VPICD_Virtualize_IRQ函数进行中断勾挂,并调用VPICD_Physically_Unmask函数开中断。
  
  RTCIRQHandle=VPICD_Virtualize_IRQ(&IRQdesc);

  VPICD_Physically_Unmask(RTCIRQHandle);
  然后在RTCInt_Handler函数中进行中断处理,可以进行各种操作,例如向应用程序发送自定义的消息来通知中断的发生。
  
  3.5 与应用程序的通信
  
  一般地,应用程序通过CreateFile函数调用VxD驱动程序,得到一个VxD的文件句柄。使用如下的语句可以打开一个名为mydriver.VXD的文件,得到的句柄保存在hVxD中。
  
  hVxD=CreateFile(″\\\\.\\mydriver.VXD″0,0,0,CREATE-NEW,FILE-FLAG-DELETE-ON-CLOSE,0);
  
  通过句柄hVxD和DeviceIoControl函数就可以与驱动程序进行数据传输。
  
  本文采用ALTERA公司的FLEX6000系列芯片,型号为EPF6016TC144-3,实现了简化的从设备模式PCI协议,并在Windows9x系统下实现驱动程序的设计。整个系统工作良好。资源占用情况如下:可用I/O引脚113根,占用51根,占用率45%;可用逻辑单元数1320个,占用151个,占用率11%。
  
  简化的PCI协议的实现占用较少的逻辑资源,可以灵活方便地进行功能添加和改进,同时可以在同一块芯片中集成其他用户模块,实现不同功能,以降低成本。目前,本系统已经应用在数据采集和处理、图像处理等方面。

关键字:PCI总线  FPGA  虚拟设备 引用地址:PCI总线协议的FPGA实现及驱动设计

上一篇:TMPN3150与TLC0832的两种接口实现方法
下一篇:专用键盘接口芯片的一种CPLD实现方案

推荐阅读最新更新时间:2024-05-02 22:00

基于CPCI总线的链路口多DSP引导方案的设计实现
   前 言     数字信号处理器DSP是一种具有特殊结构的微处理器,它专门为实现数字信号处理的各种算法而设计,因而在硬件结构上具有特殊性。TS201是ADI公司TigerSHARC系列中集成了定点和浮点计算功能的高速DSP。该处理器广泛应用于视频、通信市场和国防军事装备中,适合于大数据量实时处理的应用领域。     TigerSHARC系列DSP引导程序的加载方法非常灵活,可根据实际系统的需求灵活选用。某雷达信号处理机采用6U板形,CPCI总线采用欧洲卡尺寸标准,通过CPCI总线与主机进行数据通信。针对该信号处理机硬件系统,本文提出一种引导方案,该方案采用CPCI总线向板卡传输引导代码,进而依靠FPGA通过链路
[单片机]
基于C<font color='red'>PCI总线</font>的链路口多DSP引导方案的设计实现
基于FPGA的直接数字频率合成器的设计和实现
  直接数字频率合成(Direct Digital Fraquency Synthesis,即DDFS,一般简称DDS)是从相位概念出发直接合成所需要波形的一种新的频率合成技术。   目前各大芯片制造厂商都相继推出采用先进CMOS工艺生产的高性能和多功能的DDS芯片(其中应用较为广泛的是AD公司的AD985X系列),为电路设计者提供了多种选择。然而在某些场合,专用的DDS芯片在控制方式、置频速率等方面与系统的要求差距很大,这时如果用高性能的FPGA器件设计符合自己需要的DDS电路就是一个很好的解决方法。   ACEX 1K是Altera公司着眼于通信、音频处理及类似场合的应用而推出的FPGA器件芯片系列,总的来看将会逐步取代
[嵌入式]
基于<font color='red'>FPGA</font>的直接数字频率合成器的设计和实现
下一代MachXO3D FPGA 让汽车更安全
我们生活在一个高度互连的世界,很容易受到各种来源的网络攻击。仅 2018 年,硬件攻击让超过 30 亿系统暴露在数据盗窃、非法操作和其它安全隐患中 1。 在汽车领域,如今的智能联网汽车则加剧了这类安全问题。若网络攻击造成汽车失控不仅会对目标车辆中的人员造成伤害,更有可能危及附近的车辆、行人和财产。 因此,汽车的设计人员和厂商正极力寻找保障系统安全之道。正如本文所述,解决方法之一是采用莱迪思半导体的 MachXO3D™ FPGA。 老式汽车时代已经过去 汽车市场在不断演变,近些年来的变化尤其剧烈,变化速度极快。 以微处理器单元( MPU )和微控制器单元( MCU )为主的计算器件在 20 世纪七八十年代晚期开始
[汽车电子]
下一代MachXO3D <font color='red'>FPGA</font> 让汽车更安全
赛灵思宣布业界首款28nm FPGA开始量产
赛灵思宣布业界首款28nm FPGA开始量产 业界首款Kintex-7 FPGA已量产并交付客户 中国,北京,2012年3月2日-全球可编程平台领导厂商赛灵思公司(Xilinx, Inc.(NASDAQ: XLNX)今日宣布行业第一个28nm FPGA器件已经针对主要客户开始量产, 该发布再次为行业树起了另一个重要里程碑。Kintex™-7 FPGA的正式量产,是赛灵思以可编程逻辑器件(PLD)行业历史最快速度交付新产品的出色执行中, 继已成功交付数以千计的最新7系列产品样片之后, 再次迈出的崭新一步。这一成就使赛灵思的客户能够比以往任何时候都更快地开始投产他们自己的产品, 同时也能比以往任何时候更快地满足他们客户的需求。
[嵌入式]
赛灵思宣布业界首款28nm <font color='red'>FPGA</font>开始量产
基于数字移相的高精度脉宽测量系统及其FPGA实现
摘要:采用XILINX公司的SpartanII系列FPGA芯片设计了一种基于数字移相技术的高精度脉宽测量系统,同时给出了系统的仿真结果和精度分析。与通常的脉冲计数法相比,该系统的最大测量误差减小到原来的34.2%。 关键词:脉宽测量 数字移相 脉冲计数法 FPGA 在测量与仪器仪表领域,经常需要对数字信号的脉冲宽度进行测量。这种测量通常采用脉冲计数法,即在待测信号的高电平或低电平用一高频时钟脉冲进行计数, 然后根据脉冲的个数计算待测信号宽度,如图1所示。待测信号相对于计数时钟通常是独立的,其上升、下降沿不可能正好落在时钟的边沿上,因此该法的最大测量误差为一个时钟周期。例如采用80MHz的高频时钟,最大误差为12.5ns。
[应用]
HTC Vive虚拟现实设备降价 优惠千元还送游戏
新浪数码讯 8月21日下午消息,移动设备制造商HTC今日宣布将调整HTC Vive虚拟现实设备的定价策略,从原价6888元降至5488元。同时,购买该设备还将获赠送三款游戏和VIVEPORT一个月订阅服务。 HTC Vive降价千元   HTC Vive是一款虚拟现实(简称VR)设备,它配有一个头戴显示、两个操作手柄和两个用于精确追踪的定位基站,需要连接电脑设备使用。这款设备可以为用户提供沉浸式的虚拟现实体验。   此前,HTC Vive定价为6888元人民币,现在官方正式调整定价策略,直降1400元,最终售价为5488元。同时,官方还为订购的用户免费提供三款游戏,分别是《Final Force》、《超级怪兽》和《捕鱼大冒险》
[手机便携]
自动驾驶主流芯片:GPU、FPGA、ASIC
当前主流的 AI 芯片 主要分为三类, GPU 、 FPGA 、 ASIC 。GPU、FPGA均是前期较为成熟的芯片架构,属于通用型芯片。ASIC属于为AI特定场景定制的芯片。行业内已经确认 CPU 不适用于AI计算,但是在AI应用领域也是必不可少。 GPU方案 GPU与CPU的架构对比 CPU遵循的是冯·诺依曼架构,其核心是存储程序/数据、串行顺序执行。因此CPU的架构中需要大量的空间去放置存储单元(Cache)和控制单元(Control),相比之下计算单元(ALU)只占据了很小的一部分,所以CPU在进行大规模并行计 算方面受到限制,相对而言更擅长于处理逻辑控制。 GPU(GraphicsProcessing
[汽车电子]
自动驾驶主流芯片:GPU、<font color='red'>FPGA</font>、ASIC
通过PCI EXPRESS兼容性测试 - 赛灵思VIRTEX-5 成为全球首个通过所有v1.1标准测试的FPGA
经验证的解决方案使用户可快速采用业界速度最快的、内建低功耗 PCI Express 端点模块和串行收发器的 65nm FPGA 2007年1月11日,北京 – 全球领先的可编程逻辑解决方案提供商赛灵思公司 ( Xilinx, Inc. (NASDAQ: XLNX)) 今天宣布其 Virtex-5 LXT FPGA 通过了最新的 PCI Express 端点 v1.1 基本标准兼容性测试认证大会 ( Compliance Workshop )组织 的测试 , 并且已经进入 PCI-SIG 集成商列表 。这也是负责 PCI Express 兼容性的 PCI-SIG 组织
[焦点新闻]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved