Taro如何实现页面之间通信_基于SRIO协议设计和实现了DSP与FPGA之间的高速数据通信...
时间:2023-12-12 20:37:02
欢迎FPGA工程师加入官方微信技术群
点击蓝字关注我们FPGA中国最好最大的家——中国最好的家FPGA纯工程师社区

摘要: 现代信号处理系统通常需要在不同处理器之间实现高速数据通信,SRIO该协议因其高效率和低延迟而被广泛使用。本文研究了它FPGA和DSP两种处理器之间的实现SRIO通过电路设计和处理器开发工具编程,实现了两种处理器之间的高速通信。经测试,该系统具有较高的传输效率。
引言
随着高性能信号处理系统对运行速度和通信速度要求的不断提高,单独的处理器(如FPGA或DSP)不能满足高速实时信号处理的需要。TI公司的多核DSP处理性能强,但并行性不强,难以适应计算异常密集的应用。DSP接口还影响数据传输的灵活性;FPGA并行性强,适用于密集计算应用,可配置I/O和IP核支持多种数据传输接口,但FPGA内部逻辑资源和存储资源有限,难以开发,难以实现复杂算法。因此,结合多核DSP和FPGA构建基于异构处理器的信号处理系统已成为当前的发展趋势。异构处理器之间的高速通信已成为高速信号处理系统[1]的关键问题之一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.异构处理器电路互连
RapidIO[3]该协议是一个开放的点对点分组交换标准,是一种基于包交换的高可靠性、高性能和互联技术。串行RapidIO[4](SRIO)采用串行差分模拟信号传输RapidIO协议,基于SerDes(Serialize Deserialize)该技术采用差分交流耦合信号(抗干扰能力强、速率高、传输距离长等优点)SRIO是嵌入式系统应用的高性能、低引脚的高速互连接口。
SRIO协议分为逻辑层、传输层和物理层三层。逻辑层定义操作协议;传输层定义包交换、路由和搜索机制;物理层定义电气特性、链路控制和纠错重传。SRIO它是一种基于包交换的高速互连技术,由包头、有效的数据载荷和16位组成CRC校验组成。根据包类型的不同,包头的长度可能到二十字节,最大的有效载荷长度是256字节。由于包装长度短,传输延迟小,硬件易于实现。适用于数字信号处理场合对传输延迟要求高的应用。
TMS320C6678集成了支持SRIOv2.通信协议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种x SRIO最高12个连接.5 Gbps数据传输速率。如图1所示,只需将电路连接方式连接起来DSP的TX、RX端口与FPGA的RX、TX因为SRIO异构处理器需要使用差分线来实现数据传输RX端口的差线上串联0.1 μF的电容,做交流耦合使用。
图1 异构处理器的连接方式
2 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逻辑操作可分为四部分:
① 锁定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公司的Seria 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,利于接口对接和功能拓展,实现数据在不同芯片之间的高效传输。
3 传输性能测试
本文对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实现了从设备通信,并采用中断实现异构处理器之间的握手信号,经测试达到较高的传输速率。本文研究内容也适用于同系列的其他处理器之间的数据通信,具有较高的应用价值。
欢迎FPGA、嵌入式、信号处理等工程师关注公众号
全国第一大FPGA微信技术群
欢迎大家加入全国FPGA微信技术群,这个群体拥有数万工程师、一群热爱技术的工程师,这里的FPGA工程师相互帮助,相互分享,技术氛围浓厚!赶紧叫上小伙伴一起加入吧!!
用手指按住就可以加入FPGA全国技术群哦
FPGA之家元器件芯城
优势元器件服务,有需求请扫码联系群主:金娟 邮箱:293580331@qq.com 欢迎推荐给采购
ACTEL、AD部分优势订货(经营全系列):
XILINX、ALTERA优势现货或订货(经营全系列):
(以上器件为部分型号,更多型号请咨询群主金娟)
服务理念:FPGA之家元器件自营芯城,旨在方便工程师快速方便购买器件服务,经过数年竭诚服务,我们的客服遍布国内大型上市公司、军工科研单位、中小企业、最大的优势是强调服务至上的理念、并且做到快速交货、价格优惠!
直营品牌:Xilinx ALTERA ADI TI NXP ST E2V、镁光 等百余元器件品牌,尤其擅长欧美对华禁运器件,欢迎工程师朋友把我们推荐给采购或者亲自咨询我们!我们将一如既往提供业内最佳服务!
FPGA技术群官方鸣谢品牌:Xilinx、 intel(Altera)、microsemi(,Actel)、LattIC e,Vantis,Quicklogic,Lucent等

