弁言
随着高性能旗子暗记处理系统对运算速率、通信速率等哀求的不断提高,单独的处理器(如FPGA或DSP)无法知足高速实时旗子暗记处理的需求。TI公司的多核DSP处理性能强大,但是并行性不强,难以适应打算非常密集的运用,其余集成性的DSP接口也影响了数据传输的灵巧性;FPGA具有极强的并行性,适宜密集打算运用,而且可配置I/O和IP核支持多种数据传输接口,但FPGA的内部逻辑资源和存储资源有限,并且开拓难度大,实现繁芜算法也比较困难。因此,结合多核DSP和FPGA的上风,构建基于异构处理器的旗子暗记处理系统成为当前一种发展趋势。异构处理器间的高速通信成为高速旗子暗记处理系统的关键问题之一,本文基于SRIO协议设计和实现了DSP与FPGA之间的高速数据通信。
1.1DSP处理器

在处理器领域,多核DSP在处理性能、功耗和面积上都有很大上风,得到了广泛运用。TI公司的8核处理器TMS320C6678[2],基于KeyStone多核构造,具有高性能的浮点、定点打算能力,单核具有1 GHz的主频,运算速率可达320 GMACS/160 GFLOPS。该DSP采取同构多核架构,每个核可以独立地实行不同的打算任务,具有512 KB的私有内存。芯片具有4 MB共享内存供8个核心访问,而且具有SRIO、PCIe等多种接口,能够知足各种数据传输的需求。
1.2FPGA处理器
FPGA因其功能强大、接口灵巧,成为当前的主流处理器之一,FPGA与DSP芯片有机结合不仅能够高效地实现繁芜算法,而且还可以提高系统数据传输的效率和构造的灵巧性。Xilinx公司Virtex6 LXT系列FPGA芯片XC6VLX550T,是一款具有高等串行数据传输功能的高性能逻辑器件,基于硬件GTX串行收发器,可以实现多种高速数据传输接口。采取SRIO IP核可以实现FPGA和DSP之间的SRIO协议通信。
1.3异构处理器电路互连
RapidIO[3]协议是一个开放的点对点分组交流标准,是面向嵌入式系统开拓提出的高可靠、高性能、基于包交流的互连技能。串行RapidIO[4](SRIO)是采取串行差分仿照旗子暗记传输的RapidIO协议,基于SerDes(Serialize Deserialize)技能,采取差分互换耦合旗子暗记(具有抗滋扰能力强、速率高、传输间隔较远等优点),以是SRIO是一个针对嵌入式系统运用的高性能、低引脚数的高速互连接口。
SRIO协议分为3层:逻辑层、传输层和物理层。逻辑层定义了操作协议;传输层定义了包交流、路由和寻址机制;物理层定义了电气特性、链路掌握和纠错重传等。SRIO是基于包交流的高速互连技能,其数据包是由包头、有效的数据载荷和16位CRC校验组成。包头的长度根据包类型不同,可能为十几到二十几个字节,最大的有效载荷长度为256字节。由于包长度短,以是传输延时较小,硬件上也易于实现,适宜数字旗子暗记处理场合对传输延时哀求较高的运用。
TMS320C6678集成了支持SRIOv2.1通信协议的4通道SRIO接口,可以实现每条通路1.25 Gbps、2.5 Gbps、3.125 Gbps、5 Gbps的通信速率。XC6VLX550T的GTX模块嵌入Serial RapidIO IP核,可支持线速率为1.25 Gbps,2.5 Gbps~3.125 Gbps,因此可实现异构处理器DSP与FPGA之间的SRIO高速串行通信。
为了最大程度地表示RapidIO串行接口的性能,本设计中采取3.125 Gbps的线速率,处理器之间采取4xSRIO连接办法, 1个1x接口即是一个差分对的一对读/写旗子暗记,一个4x接口即4个此类差分对的结合,因此采取4x SRIO连接可实现最高12.5 Gbps的数据传输速率。电路连接办法如图1所示,只须要将DSP的TX、RX端口与FPGA的RX、TX端口对应相接,由于SRIO采取差分线对实现数据传输,以是须要在异构处理器的RX端口的差分线上串联一个0.1 μF的电容,做互换耦合利用。
图1 异构处理器连接办法
SRIO设计
DSP和FPGA作为SRIO连接的端点器件,两者可互为从属[5]。主设备须要管理通信的发起、配置、结束等一系列过程,从设备只须要被动地相应通信。基于DSP的编程比FPGA简便,为了降落开拓难度和事情量,采取DSP作为主设备,是通信的发起端;FPGA作为从设备,是通信的目的端。
2.1 DSP真个SRIO配置
DSP端SRIO的软件设计基于SYS/BIOS操作系统,利用TI公司供应的多核软件开拓套件(MCSDK),紧张组件是开拓平台中的芯片支持库(CSL)工具。CSL是TI公司为其DSP产品供应的API函数,供应了一个用于配置和掌握片上外设的C措辞接口,在程序设计过程中利用CSL库函数可以方便地访问DSP的寄存器和硬件资源,提高DSP软件的开拓效率和速率。
2.1.1 SRIO初始化
实现SRIO主要的一步是SRIO的初始化,一样平常分为以下几步:
① 打开SRIO的电源和时钟:为了降落功耗,默认状态下SRIO模块的电源和时钟是处于关闭状态的,因此 SRIO 初始化首先要调用CSL_SRIO_OPEN函数将SRIO模块的电源和时钟打开。
② 配置SRIO的串并转换器:将125 MHz的参考时钟通过串并转换器内部的锁相环倍频至1.25 GHz,串并转换器采取半速率时钟模式,利用这个时钟旗子暗记的上升沿和低落沿对4路8位数据分时移位输出,即每个时钟串并转换器的串行输出端将输出2位的数据,采取该模式降落了对时钟旗子暗记的哀求,降落了电路设计难度。
③ 设置4x事情模式:C6678有4个SRIO端口,将4路串并转换器使能。定义SRIO通信链路端点器件的ID,C6678供应了8个LSU模块用于SRIO数据操作的处理,每组LSU都有7个32位寄存器,通过配置LSUx_reg4将源器件DSP的ID设为0x00,目的器件FPGA的ID设计为0xFF。
④ 等待SRIO初始化完成:通过配置SP_ERR_STAT寄存器,检测SRIO的端口状态是否OK,如果OK,则表示可以进行SRIO通信,否则提示初始化不堪利或者其他情形导致不能通信。在SRIO初始化前须要FPGA端完成SRIO逻辑的配置,否则DSP在初始化SRIO期间无法和FPGA进行握手,会导致初始化失落败。
2.1.2 SRIO的读写操作
SRIO初始化完成后,通过DSP对SRIO端口的读写操作实现和FPGA之间的数据传输。DSP读写支持的操作通过数据包格式中的Ftype和Ttype两个字段描述,I/O逻辑操作是大略实用的传输办法,利用该模式的条件是主设备要知道被访问真个存储器映射,可以直接读写从设备的存储器。I/O逻辑操作在被访问真个功能每每完备由硬件实现,以是被访问的器件不会有任何软件包袱。表1所列为I/O操作的几种事务类型。本文利用的读操作事务是NREAD。在3种写操作事务中:NWRITE_R是带相应的写操作,效率较低;SWRITE哀求数据载荷长度在8~256字节之间,且为8字节的整数倍。因此本文采取NWRITE写操作,配置大略且易于实现。
图2 FPGA真个SRIO实现构造
I/O逻辑操作利用了SRIO的功能模块LSU(Load Store Unit)和MAU(Memory Access Unit)。LSU实现I/O逻辑操作数据包的读写;MAU提取数据包中的源地址、目的地址、数据长度等信息,从而将数据包的有效数据载荷写入指定位置。DSP端SRIO的I/O逻辑操作可以分为4个部分:
① 锁定LSU寄存器:CSL_SRIO_IsLSUFull函数读取LSUx_reg6寄存器中的FULL位,为1,则LSU所有的影子寄存器已经写入配置文件等待数据发送,暂时没有可用的影子寄存器。
② 配置寄存器:配置LSU寄存器0~4,获取传输信息,包括源地址dspAddress、目的地址rapidIOLSB、数据长度bytecount等,程序利用的函数是CSL_SRIO_SetLSUTransfer。
图3 RapidIO接口模块实现方案
③ 开释寄存器:完成锁定和配置LSU寄存器后,末了配置LSU寄存器5,确定数据包的事务类型,配置完成后通过CSL_SRIO_IsLSUBusy函数检测LSUx_reg6寄存器中的BUSY位。若BUSY为0,开释LSU掌握权,该影子寄存器进入等待状态,终极将数据发送出去;若BUSY为1,则将数据存放在影子寄存器中,等待LSU完成当前传输至空闲再发送数据。
④ 等待传输完成:通过CSL_SRIO_GetLSUCompletionCode函数读取寄存器SRIO_LSU_STAT_REG的状态,判断是否所有数据均传输完毕。
2.1.3 通信流程
C6678利用中断掌握器(INTC)管理和分配多个外部中断源,个中有来自FPGA的中断源。本文中SRIO事情于主模式状态,FPGA通过GPIO向DSP发送中断,当DSP吸收到来自FPGA的中断后,对FPGA相应的内存区域进行读写操作。本设计中,中断利用了GPIO8和GPIO9两个中断触发事宜,分别将其映射到DSP的CPU中断4和中断5。在此状态下程序紧张实行两种操作:在 DSP 收到中断4往后进入中断4做事函数, 完成从FPGA端读取数据的操作;在收到中断5往后进入中断5 做事函数,完成将数据写入FPGA真个操作。
2.2 FPGA真个SRIO配置
FPGA真个SRIO基于Xilinx公司的Serial RapidIO IP核[6]来实现,IP核底层硬件基于FPGA的GTX收发器。图2所示为FPGA真个SRIO实现构造,SRIO IP核左侧通过接口模块与用户逻辑相连,右侧通过输出引脚与DSP相连。IP核可划分为5个部分:RapidIO逻辑和传输层(LOGIC)模块、 RapidIO物理层(PHY)模块、RapidIO缓冲区(Buffer)模块、寄存器管理(Register Manager)模块、参考时钟和复位模块。根据不同的需求,用户可以选择利用物理层包封装(phy_wrapper)或者RapidIO包封装(rio_wrapper),本文选择利用RapidIO包封装。
本文以IP核为根本,采取已有的整体框架,环绕目标用户接口设计接口模块。中断作为FPGA和DSP之间的握手旗子暗记,FIFO作为用户逻辑和IP核之间的数据缓冲接口。图3所示为Rapid IO接口模块实现方案。
由于FPGA在通信中作为从设备,因此接口模块中不再须要IP核接口中发起用户的功能,只保留目标用户的功能,个中目标要求/相应状态机掌握各模块的时序变革。接口模块左侧与用户逻辑接口相连,右侧与IP核目标用户接口相连。
中断机制部分,向DSP发送数据时采取发送FIFO的半满标志作为读中断,从DSP吸收数据时采取吸收FIFO的半空标志作为写中断。发送FIFO中数据超过一定量时触发DSP读数据,吸收FIFO中数据低于一定量时触发DSP写数据。用户及时有效地掌握FIFO的状态,可以担保FIFO不会被写满或者被读空。用户也可以产生中断逻辑,掌握DSP对FPGA内部存储空间进行读写。本文引入了中断机制和数据缓冲FIFO,利于接口对接和功能拓展,实现数据在不同芯片之间的高效传输。
传输性能测试
本文对DSP与FPGA之间的SRIO通信进行性能测试。DSP的事情频率为1 GHz,SRIO 接口事情速率设置为3.125 Gbps,经由物理层8B/10B编码,数据包的实际传输速率为2.5 Gbps,传输办法设置为4x 模式,则理论数据传输速率应为10 Gbps。由于数据包的打包和解包等操作,实际速率会小于理论值。
表2是利用NWRITE和NWREAD对不同数据包进行通信速率测试的结果。在传输数据为32 字节时,考虑到数据包操作时的开销,与理论值比率仅为1.1%,很大一部分韶光被花费在数据包的打包和解包的处理中,随着传输数据量的增加,SRIO的实际传输效率不断增大,终极坚持在7 800 Mbps。经由多次反复实验,该统计结果稳定可靠,并且没有涌现丢包误码的情形。
结语
本文针对当今高速旗子暗记处理系统对芯片间数据传输的需求,研究异构处理器DSP和FPGA间的数据传输技能。DSP端基于CSL库实现了SRIO的主设备通信,FPGA端基于RocketIO IP实现了从设备通信,并采取中断实现异构处理器之间的握手旗子暗记,经测试达到较高的传输速率。本文研究内容也适用于同系列的其他处理器之间的数据通信,具有较高的运用代价。