基于FPGA的双缓冲模式PCI Express总线设计方案

发布者:温暖的微风最新更新时间:2014-12-03 来源: 21ic关键字:嵌入式系统  总线设计  可编程器件 手机看文章 扫描二维码
随时随地手机看文章

引言

    近年来软件无线电(SDR)得到了飞速的发展,在很多领域已显示出其优越性。本文的项目背景是通过软件无线电方式实现数字音频广播(DAB)的基带信号处理,这要求软件无线电平台具有高速实时数字信号处理与传输能力。高速可编程逻辑器件(FPGA)和丰富的IP核提供了能高效实现软件无线电技术的理想平台。
 
1  PCIE总线方案论证

    PCIE是第3代I/O总线互联技术,如今已成为个人电脑和工业设备中主要的标准互联总线。与传统的并行PCI总线相比,PCIE采用串行总线点对点连 接,具有更高的传输速率和可扩展性。例如本文采用的8通道1代PCIE 2.0硬核的理论传输速率是4 GB/s[1],其总线位宽亦可根据需求选择×1、×2、×4和×8通道。与其他的串行接口(如RapidIO和Hypertransport)相 比,PCIE具有更好的性能和更高的灵活性[2].
 
    1.1  PCIE总线实现方式

    目前,PCI Express总线的实现方式主要有两种:基于专用接口芯片ASIC和基于IP核的可编程逻辑器件FPGA方案。前者通常采用ASIC+FPGA/DSP 的组合方式,专用PCIE接口芯片(如PEX8311)避免用户过多地接触PCIE协议,降低了开发难度;但其硬件电路设计复杂,功能固定,灵活性和可扩 展性较差。后者使用IP核实现PCIE协议,用户可以开发其所需的功能和驱动,具有可编程性和可重配置能力;另外,单片FPGA降低了成本和电路复杂程 度,更符合片上系统(SoC)的设计思想。本文采用Xilinx公司Virtex 6 FPGA和PCIE集成块,实现双缓冲模式的高速PCIE接口设计。
 
    1.2  双缓冲与单缓冲比较

    以写操作(数据从FPGA到内存)为例,双缓冲PCIE系统框图如图1所示。为描述方便,将该FPGA片上系统命名为SRSE(Software Radio System with PCI Express)。
 

图1  双缓冲PCIE系统框图


    PC端的驱动程序在系统内存上为SRSE分配了两个缓冲区(WR_BUF1/2)用于数据存储,这两个缓冲区的地址信息分别存储在FPGA端的DMA寄 存器(DAM_Reg1/2)中。Root Complex连接CPU、内存和PCIE器件,它代表CPU产生传输请求[3];PCIE核是Xilinx公司提供的集成块程序,实现PCIE协议的处 理;DMA(直接存储器访问)引擎用于实现DSP核和PCIE器件间的高速数据存储与交换;DSP(数字信号处理)核是用户设计的算法或应用程序。以图1 为例,DSP核将产生的数据写入TX_FIFO,DMA引擎将数据以传输层数据包(TLP)的形式发送至PCIE核,其中数据包的头信息来自寄存器 DMA_Reg1.当SRSE将数据写入缓冲区WR_BUF1时,驱动分配另外一块缓冲区WR_BUF2并将该缓冲区的地址信息写入寄存器 DMA_Reg2中;当DMA引擎发出WR_BUF1的写操作消息中断(MSI)后,DMA控制器将数据包的头信息切换至DMA_Reg2,驱动将缓冲区 切换至WR_BUF2,继续传输数据。


图2  PCIE总线中断延迟测量

    与双缓冲相对应的是单缓冲模式。以写操作为例,驱动程序每次在内存上分配一个缓冲区WR_BUF,该缓冲区的地址信息存储在DMA寄存器DMA_Reg 中。当写满缓冲区WR_BUF时,DMA引擎会产生MSI中断,并通过PCIE核通知驱动程序。驱动分配新的缓冲区,并将该缓冲区地址通过PCIE总线写 入DMA寄存器DMA_Reg中。中断的传输和DMA寄存器的更新会产生一定延时,这需要较大的TX_FIFO来存取延时期间DSP核产生的数据。
 
    为精确测量中断延时时间,搭建了基于DELL T3400型PC和ML605开发套件的平台,通过ChipScope观察的波形结果如图2所示。DMA中断发生在时刻 0(mwr_done:0?﹥1);然后PCIE核向驱动发出MSI中断,驱动程序查询中断寄存器发生在时刻 2241(irq_wr_accessed:1?﹥0);驱动程序分配新的内存缓冲区,然后更新DMA寄存器发生在时刻 2802(wr_dma_buff0_rdy:0?﹥1)。在这2802个时钟周期内,PCIE器件无法将数据写入内存。PCIE的时钟频率为250 MHz,所以中断延时T=2802×(1/250 MHz)=11.2 μs.假定DSP核产生数据的速率为200 MB/s,中断延时期间将产生11.2 μs×200 MB/s=2241 B大小的数据。考虑到其他不可预测因素,如中断堵塞等,为了不丢失数据,TX_FIFO至少需要几KB的空间。这对于FPGA内宝贵的硬件资源(如 Block RAM)来说是严峻的挑战。
 
    与单缓冲模式相比,双缓冲模式优点归纳如下:
 
  ① 更新缓冲区不会引入中断延时,这意味着较小的FIFO即可满足需求,节约了硬件资源。
  ② 双缓冲模式延长了驱动程序处理中断的时间,也使缓冲区数据的处理更加容易,丢包率大大减小。
  ③ 数据的传输和内存缓冲区的数据处理可以并行处理,系统的实时性得到保证。
  ④ 双缓冲更适合Scatter/Gather DMA,取代block DMA,从而提高内存效率。
 
2  软件无线电平台设计

    软件无线电基于可编程、可重构的通用硬件平台,通过加载不同的软件实现不同的无线电功能,广泛应用于军用和民用领域。为了能够实现复杂的算法,其平台需 要具备高速数据交换和实时信号处理的能力。该设计参考Xilinx ML605开发套件,基于Xilinx Virtex 6 LX240T FPGA芯片,通过增加相应的模块搭建通用的软件无线电平台。
 
    软件无线电原理框图如图3所示。信号获取模块采用两片ADC和DAC以实现IQ两路信号的数模转换;通信模块由以太网和USBRS232接口组成;扩展 卡可以是射频发射机或接收机,通过扩展卡接口与母板相连;JTAG接口提供在线编程和内部测试功能;存储器件包括512 MB DDR3内存和128 MB平台Flash,分别用于动态数据存储和配置FPGA;人机接口由LED/LCD、按键和开关等元件组成,实现人机对话;200 MHz有源晶振和SMA时钟接口组成时钟输入模块,向FPGA提供时钟基准;8通道PCIE接口和IP核实现平台与PC间高速数据交换。

图3  软件无线电原理框图

 3  双缓冲模式PCIE总线设计
 
    3.1  PCIE驱动设计

    PC端基于Linux(Ubuntu 10.10)操作系统。该操作系统免费开源,安全稳定灵活,适合低成本软件开发。驱动程序包含数据流接口和控制接口。数据流接口用于Linux用户空间和 SRSE平台间高速的数据交换;控制接口使用户可以观察和配置SRSE平台寄存器,例如通过控制接口,用户可以在PC端改变SRSE平台的调谐频率等参 数。数据流接口是双向独立的,支持双/单工,即可以同时读和写数据。以数据发送(从PC到SRSE)为例,用户空间调用write()函数将任意数量的数 据发送至驱动,驱动整理数据碎片以满足PCIE对数据对齐和传输块数据量的要求。当数据满足4096字节,驱动将数据块发送至Root Complex并保留已发送数据的列表,等待接收来自SRSE平台的写操作中断。PCIE驱动数据接收的原理如图4所示。当用户空间调用read()函数 或者驱动接收到来自PCIE设备的数据时,驱动初始化读操作。驱动程序将保持阻塞(blocking),直到用户空间调用read()函数,并且已接收到 足够的数据包,从而能够填满read()请求的数据量。碎片整理模块对已接收的数据进行整理,然后将数据块返回至用户空间,并通知其解除驱动阻止。

 图4  PCIE驱动中的数据接收

    3.2  PCIE核配置

    Virtex 6 PCIE Endpoint Block[4]集成了传输层(TL)、数据链路层(DLL)和物理层(PL)协议,它完全符合PCIE基本规范,可配置性增加了设计的灵活性,降低了成 本。其功能框图与接口如图5所示。其中收发器通过PCIE总线与Root Complex实现数据包的传递,PCIE总线由系统接口和PCIE接口组成;系统接口由复位和时钟信号组成,PCIE接口由8条差分传输和接收对组成 (8lane)。TX/RX Block RAM用来存储来自DMA引擎和系统内存的数据,其大小可以通过Xilinx Core Generator配置。传输接口为用户提供了产生和接收TLP的机制;物理层接口使用户能够观测和控制链路的状态;配置接口使用户能够观察和配置 PCIE终端的配置空间,即DMA寄存器;中断接口实现DMA与PCIE核之间的中断传输。用户通过这些接口设计符合其需要的DMA引擎。[page]

 图5  PCIE功能框图与接口

    本文使用Xilinx CORE Generator生成PCIE核,其主要配置参数如表1所列。

表1  PCIE核主要配置参数

     3.3  总线主控DMA传输

    参考Xilinx应用实例XAPP1052[5],本文设计的DMA结构框图如图6所示,各部分功能介绍如下:
 
  ① 发射引擎。发射引擎产生传输层数据包(TLP)并通过传输接口发送至PCIE核,数据包的数据来自TX_FIFO,头信息来自DMA控制/状态寄存器,也负责驱动对DMA寄存器的读取。
  ② 接收引擎。接收引擎将来自上位机的数据包解码并转存至RX_FIFO中,也接收来自驱动的配置信息并将寄存器值写入DMA控制/状态寄存器中。
  ③ DMA控制/状态寄存器。该模块是DMA的主控制器,控制着DMA复位、读写等操作;内存缓冲区的地址信息和TLP包长度等信息也存储在该寄存器中。
  ④ MSI中断控制器。该模块产生读写中断,然后通过中断接口通知PCIE核,进而通知驱动程序。
  ⑤ TX/RX_FIFO.通过Xilinx Core Generator将FIFO配置为独立时钟异步模式,实现不同时钟域的数据缓冲和位宽转换。本文PCIE时钟为250 MHz、位宽64位,而DSP核时钟为200 MHz、位宽32位。
  ⑥ PCIE核。该模块为例化的PCIE集成块,框图和参数详见图5和表1.
  ⑦ DSP核。该模块为用户设计的算法或者功能模块,例如通过Simulink调用Xilinx库实现某种功能。
 

 图6  DMA结构框图

    3.4  双缓冲PCIE协议

    以写操作为例,双缓冲PCIE协议如图7所示。初始化时,驱动程序在内存中分配两块缓冲区Buff 1a/2a,然后将Buff 1a的地址信息写入DMA控制/状态寄存器DMA_Reg1(图1)中并开始写操作;DMA引擎将FIFO中的数据以数据包的形式通过PCIE总线发送至 缓冲区Buff 1a中,期间驱动程序将Buff 2a的地址信息发送至DMA控制/状态寄存器DMA_Reg2中;当Buff 1a写操作完成时,MSI中断控制器产生MSI中断并通知驱动,此时驱动和DMA控制器同时切换缓冲区,即驱动将缓冲区切换至Buff 2a,DMA控制器将TLP头信息切换至DMA_Reg2,如此继续传输数据。

 

图7  双缓冲PCIE操作协议(写操作)

    将MSI中断与新缓冲区配置间的时间间隔称为中断延时,如图2和图7所示。双缓冲模式的引入消除了中断延时的影响,使SRSE在中断延时期间仍能传输数据,节约了硬件资源,驱动程序也有更多时间来处理缓冲区的数据。
 
4  PCIE调试与性能

    提供了Root Port的Test Bench,它可以模拟PC和驱动程序,如初始化DMA引擎、产生下行数据流并发送至PCIE设备,也可以接收来自PCIE设备的上行数据流等,使整个系 统(PCIE核+DMA引擎+DSP核)可以在Modelsim SE环境下仿真。这大大缩短了开发周期,提高了开发效率。功能仿真通过后,使用Xilinx ISE 软件完成代码的输入、综合、实现、验证和下载。
 
    硬件平台为DELL T3400型PC和Xilinx ML605开发套件。PC端基于Ubuntu 10.10操作系统运行驱动程序,FPGA端DSP核(图6)通过Matlab Simulink调用Xilinx元件库实现。本文DSP核由32位计数器和加法器组成:计数器将值写入TX_FIFO,PC端检测接收数据以验证写操作 (SRSE→PC);同样地,PC端产生+1计数值并将数据写入RX_FIFO,DSP核的加法器用来验证读操作(PC→SRSE)。
 
结语

    本文设计了基于Xilinx Virtex 6 FPGA的通用软件无线电平台,利用C语言开发了基于Linux系统的驱动程序,利用Verilog语言设计基于Xilinx PCIE硬核的双缓冲DMA控制器。双缓冲消除了中断延时的影响,节约了硬件资源,提高了数据传输速度。

关键字:嵌入式系统  总线设计  可编程器件 引用地址:基于FPGA的双缓冲模式PCI Express总线设计方案

上一篇:基于CAN现场总线的分布式柴油发动机测试系统
下一篇:基于PROFIBUS总线的曲轴清理机器人系统设计

推荐阅读最新更新时间:2024-05-02 23:20

基于DSP的1553B总线接口电路设计
机载火控数据采集技术需要满足实时采集、实时传输、实时存储以及方便下载的需求,以便于地面人员对获取信息的处理。这样可以更好的动态掌握飞机的作战状态,提高飞行训练效果和作战能力。1553B数据总线作为航空电子综合系统中信息交流的主干道,使机载数据能在复杂的环境中得以保存、交换。DSP作为高速性能的数据处理芯片,可以实现较高速率的数据采集。FPGA作为高速、复杂的组合逻辑和时序逻辑控制器件,更适合外围电路的连接,将两者组合使用,满足了数据的高速传输与存储。同时,随着1553B数据总线协议标准的颁布,许多电器件公司开发了能将1553B数据总线与CPU相连接的相应接口芯片。这样,使得数据在传输过程中更加稳定、高速、可靠。本文旨在探讨采用DS
[嵌入式]
基于DSP的1553B<font color='red'>总线</font>接口电路<font color='red'>设计</font>
基于LXT971A的嵌入式系统的网络通讯设计
摘要:介绍LXT971A型网络通讯接口电路的内部结构和引脚功能,给出在嵌入式系统中采用LXT971A与MPC860型网络通讯处理器进行网络通讯的硬件接口实现方法,同时介绍基于嵌入式系统的服务器端的软件编程。 关键词:嵌入式系统 网络通讯 接口电路 处理器 服务器 1 概述 在嵌入式系统中,网络通讯是非常重要而且必备的功能。为了充分发挥嵌入式系统中CPU的网络控制功能,选择一款合适 的网络接口电路至关重要,LXT971A网络通讯接口电路就是一个很好的选择。LXT971A是Intel公司的网络通讯接口电路,它符合IEEE标准,直接支持10Mb/s/100Mb/s双绞线应用,也支持100Mb/s光纤接口;该电路提供的MII接口能很
[嵌入式]
基于μPD780822单片机及其CAN总线模块实现车灯节点的设计
1、引言 CAN(Controller Area Network)是德国Bosch公司最先提出的,是目前汽车控制器局域网中最流行、最常用的总线。它的主要特点是:CAN总线为多主站总线,各节点均可在任意时刻主动向网络上的其他节点发送信息,不分主从,通信灵活;CAN总线采用独特的非破坏性总线仲裁技术,优先级高的节点先传送数据,能满足实时性要求;CAN总线具有点对点、一点对多点及全局广播传送数据的功能;CAN总线上每帧有效字节数最多为8个,并有CRC及其他校验措施,数据出错率极低,某个节点出现严重错误,可自动脱离总线,总线上的其他操作不受影响;CAN总线只有2条导线,系统扩充时可直接将新节点挂在总线上,因此走线少,系统容易扩充,改型灵活
[嵌入式]
基于μPD780822单片机及其CAN<font color='red'>总线</font>模块实现车灯节点的<font color='red'>设计</font>
基于单片机和CAN控制器的嵌入式系统设计
1. 引言 单片机作为嵌入式设备的心脏,在从消费电子到工业应用等广泛的领域中得到应用。从单片机的历史来看,随着嵌入式设备对单片机功能和性能的要求提高,其经历了从4位机到8位机的发展过程。目前嵌入式产品的不断发展,8bit单片机的处理能力面对越来越多的挑战。而32bit单片机在嵌入式领域得到越来越多的应用。根据市场的发展,EPSON 公司专为高级数据处理的便携式设备推出了32位MCU(Microcontroller Unit )S1C33 系列,下面简单介绍一下EPSON 32 位单片机的特点: A. 强大的CPU内核:S1C33采用RISC(精简指令集)结构,三级流水线,105条16位长指令,其大多数指令在一个时钟周期内执行,大大
[单片机]
基于单片机和CAN控制器的<font color='red'>嵌入式系统</font><font color='red'>设计</font>
基于I2C总线的MSP430应用系统设计
引言 串行护展总线技术是新一代单片机技术发展的一个显著特点。其中PHILIPS公司推出的I2C总线最为著名,它包括一个两端接口,通过一个带有缓冲区的接口,数据可以被I2C发送或接收,控制和状态信息则通过一套内存映射寄存器来传送。与并行扩展总线相比,串行扩展总线有突出的优点:电路结构简单,程序编写方便,易于实现用户系统软硬件的模块化、标准化等。本文是把I2C总线应用到MSP430单片机温度控制系统中的一个典型实例。 I2C总线是用2根双向I/O信号线(串行时钟线SCL和串行数据线SDA)把多种器件连接起来,并实现器件之间的串行通讯。 MSP430是TI公司一种具有超低功耗的功能强大的
[单片机]
基于I2C<font color='red'>总线</font>的MSP430应用系统<font color='red'>设计</font>
嵌入式系统优先级反转问题的分析
摘要: 本文介绍了嵌入式系统任务调度优先级反转的一个实例。通过实例的讨论对嵌入式系统优先级反转有一个更深入的了解,有助于在编程中避免此类问题的发生。 关键词: 嵌入式实时系统;VxWorks;多任务;优先级反转 引言 VxWorks是美国Wind River(风河)公司的一个实时操作系统,具有良好的可靠性和实时性。该系统采用基于优先抢占式调度策略,系统为每一个任务分配一个优先级,调度程序保证当前运行的是优先权最高的任务。但在实际开发中,由于任务间资源共享,信号量及中断的引入,往往会出现高优先级任务被低优先级任务长时间阻塞或阻塞一段不确定时间的现象,即所谓优先级反转(Priority Inversion)。优先级反转会造成任务调度的
[应用]
冗余CAN总线远程数据采集系统设计与研究
   1 引 言   随着计算机应用技术在工业控制领域的推广及其自身的革新,以工业现场总线为应用背景的网络控制系统在业界被广泛使用和推广。CAN总线作为工业现场串行总线的一种,因其具有较高的位速率和极高的抗电磁干扰能力,能侦测和处理产生的任何总线错误,并且具有高可靠性、实时性和灵活性,在监测和控制系统中倍受青睐。然而传统的工业现场远程数据采集系统主要通过单总线传输,往往因为总线通讯故障而影响系统工作效率,不利于远程监测和控制,在某些控制领域里甚至存在很大危险,造成难以维护,系统监测数据不连续、难以管理和监测效率低下等缺点。   通过将冗余CAN总线技术应用到现场远程数据采集传输系统中,采用嵌入式控制方式很好地解决了上述问题
[嵌入式]
嵌入式学习④——嵌入式系统调试
前言 OpenCV是Intel开元计算机视觉库,它有一系列开源的C函数和少量C++类构成,实现了图像处理和计算机视觉很多通用的算法。 OpenCV特点: 1.拥有包括300多个C函数的跨平台的中、高层API; 2.跨平台:Windows/Linux; 3.Free:无论是对于商业还是非商业应用; 4.速度快; 5.使用方便。 一、代码的GDB调试 GDB : GNU Debugger,是GNU工程为GNU操作系统开发的调试器,但它的使用不局限于GNU操作系统, GDB可以运行在UNIX、Linux甚至Microsoft Windows。 使用GDB我们可以: – 设置断点使程序停住 – 监视或修改程
[单片机]
嵌入式学习④——<font color='red'>嵌入式系统</font>调试
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

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

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