0 引言
随着现代信息技术的快速发展,数字信号处理技术在军用和民用市场都得到了广泛的应用,同时日趋复杂的信号处理需求也对处理平台提出了更高的要求,特别是在无线通信、人工智能、航空航天等高科技领域信号处理实时性高,数据量大,数据交互及处理算法复杂度高,依靠单个处理器的传统解决方案已经无法满足这些需求,高度集成的多处理器嵌入式系统逐步成为高速信号处理平台的主流方案,基于“DSP+FPGA”的协同处理架构凭借其超强的处理能力和广泛的工程化应用优势,已经成为通用信号处理平台的首选。采用“DSP+FPGA”的信号处理系统显著提升了运算速度和数据处理能力,但同时不可避免地引入了处理器之间的数据交换问题,随着交互频率和数据量的急剧增加,对芯片间的高速数据传输要求越来越高,传统的共享总线已无法满足高性能嵌入式系统的数据交互需求,成为了处理平台性能进一步提升的瓶颈。因此,需要高性能互联体系结构来解决嵌入式处理器之间的数据交互问题,高速串行Rapid IO总线正是基于该需求设计的新型高性能互连总线技术,该总线以其高带宽、低延时、低功耗及高可靠性等优势为嵌入式系统内部互连提供了良好的解决方案。本文设计一种基于SRIO总线的DSP与FPGA通信互连架构,其中多核DSP TMS320C6678的SRIO接口模块采用4x接口模式配置,每路接口传输速率为3.125 Gb/s,理论传输速率达到10 Gb/s,同时使用DSP片上DDR3控制器模块扩展2 GB高速缓存进行数据读写,从而实现系统内部数据高速传输及共享存储。
1 Rapid IO协议架构介绍
Rapid IO体系架构是为了满足高性能嵌入式系统互连需求而设计的一种系统级互连技术,它支持芯片间以及板间的互连与通信,广泛应用于多处理器、多存储器及通用信号处理平台等的交互连接。Rapid IO的数据传输操作基于数据包的请求与响应,数据包是点对点通信设备的消息载体,通信过程首先由主控器件发出一个请求事务,并将该请求事务以包的形式传输给目标器件,目标器件收到请求事务后执行相应操作并产生响应事务返回给通信的发起方,发起方接收到响应包后一次通信操作完成。Rapid IO互连体系结构共分为三层,分别为逻辑层、传输层和物理层。逻辑层为协议最高层,定义了全部操作协议和包格式,为端点器件发起和完成事务提供必要的信息;传输层处于协议中间层,定义了Rapid IO的地址空间、寻址机制和用于包交换的路由信息;物理层处于协议最底层,主要定义电气特性、包传输机制、流量控制及低级错误管理等器件级接口细节,Rapid IO协议层次结构如图1所示。
2 基于SRIO的互连系统设计
2.1 TMS320C6678的SRIO模块特性
TMS320C6678 DSP外围接口丰富,片内集成了基于1x/4x LP-Serial规范的串行Rapid IO外设接口模块,即SRIO。该模块支持4通道的Rapid IO高速传输,也可配置成1x、2x和4x等多种接口模式,单个通道的传输速度最大可达5 Gb/s,在实际工程化应用中也可灵活配置到1.25 Gb/s、2.5 Gb/s和3.125 Gb/s使用。
基于Rapid IO的高速传输操作协议由逻辑层定义,SRIO接口逻辑层支持I/O逻辑操作(Direct I/O)和消息传递(Message Passing)两种数据传输机制,其中I/O逻辑操作包含NREAD、NWRITE、NWRITE_R、SWRITE、Atomic和MAINTENANCE共6种基本I/O操作,消息传递主要包括DOORBELL和MESSAGE两种,具体如表1所示。
直接I/O模式是最简单实用的传输方式,主设备可以直接读写从设备的存储器,可通过多种请求和响应事务直接完成对应存储空间的数据读写,其中SWRITE事务是高效的传输格式,接口实现简单,通信开销小,适用于点对点的大数据直接传输;消息传递模式使用信箱和信件的方式传递信息,类似以太网的传输方式,接收方根据内部地址与信箱的映射关系对数据进行读写,适用于包含多个处理器的复杂系统间通信。消息传递机制中包含有一种特殊的轻量级消息传递事务类型,即门铃消息(Doorbell),门铃消息数据包仅可填充一个16位大小的数据负载,适用于发送SRIO通信的中断信息,接收方将收到的门铃事务放到门铃消息队列中,通过解析门铃信息进行相应的响应操作。
2.2 传输系统互联设计
本文设计的DSP与FPGA通信系统基于图2所示的高速串行Rapid IO接口进行互联设计。在FPGA端选用Xilinx公司的Kintex7系列芯片,FPGA对外接口接收雷达回波数据或者光学相机采集的图像数据,然后通过4路SRIO高速接口将数据实时传输给DSP芯片,FPGA的SRIO接口采用开发平台提供的IP核进行设计实现。DSP端芯片选用TI公司的TMS320C6678高性能多核浮点型处理器,该芯片采用全新的Keystone架构和C66x内核,其内部有8个速度达到1.25 GHz的高性能定点/浮点CPU内核,每个内核的单周期定点性能高达32MAC,浮点性能高达16FLOP,单个CorePac内核中配置了32 KB一级程序存储器(L1P)、32 KB一级数据存储器(L1D)以及512 KB二级局部存储器(L2),高性能的计算能力和高速缓存能力有效地支撑了复杂图像处理算法的工程化应用需求。同时6678处理器内部集成了DDR3控制器模块,带有64 bit位宽的DDR3存储器接口总线,最高速率可达1 600 MTS,可供寻址的空间达到了8 GB,本系统外挂了4片256×64 bit的DDR3 SDRAM,总容量达到2 GB,完全满足系统数据缓存需求,DSP处理器可以通过EDMA的方式直接对DDR3存储器进行读写访问,减少了通过内核CPU读写大数据的资源占用,有效提升系统并行运算效能。
3 通信系统软件设计
3.1 SRIO接口驱动设计
根据上文的互联系统设计,为了实现接口通信功能需进行接口软件设计,DSP端的SRIO外设模块驱动编程主要有以下几个方面:
(1)通信设备ID设置
SRIO模块支持8位和16位两种模式ID设置,8位的ID可容纳256个单独设备,16位ID可容纳65 536个单独设备,通信双方需采用相同设置模式,但要设置为不同的ID号,本系统采用8位ID模式设置,DSP和FPGA ID号设置如下:
#define SRIO_DSP_BASE_ID (0x00)
#define SRIO_FPGA_BASE_ID (0xFF)
(2)SRIO工作模式配置
SRIO模块可配置成1x、2x和4x等多种端口模式使用,可通过路径控制寄存器PLM_SP(n)_PATH_CTL的PATH_CONFIG和PATH_MODE作用域进行编程配置。本系统采用4x模式配置,单通道速率配置为3.125 Gb/s,具体配置程序如下:
CSL_SRIO_Enable3_125GBaud(hSrio, 0);
CSL_FINS(hSrio-》RIO_PLM[0].RIO_PLM_SP_PATH_CTL,SRIO_RIO_PLM_SP_PATH_CTL_PATH_CONFIGURATION, 4);
CSL_FINS(hSrio-》RIO_PLM[0].RIO_PLM_SP_PATH_CTL, SRIO_RIO_PLM_SP_PATH_CTL_PATH_MODE, 4);
(3)SerDes模块配置
SRIO接口通过SerDes(Serialize Deserialize)模块接收和发送高速串行差分信号,该模块由TX、RX、PLL、S2P(serial-to-parallel)、P2S(parallel-to-serial)及时钟恢复等部分组成,初始化配置主要对PLL模块的SRIO_SERDES_CFGPLL寄存器的MPY域赋值0x00010100,表示PLL倍频5倍,并对ENPLL位赋值1使能PLL; 对SRIO_SERDES_CFGTX[0-3]和SRIO_SERDES_CFGRX[0-3]寄存器的RATE位赋值0x01,表示每个时钟周期采样两位数据,结合时钟倍频配置可以计算出传输速率rate=clk*MPY*RATE=312.5MHz*5*2bit=3.125 Gb/s,即得到需要的速率,配置功能函数如下:
CSL_BootCfgSetSRIOSERDESConfigPLL(cfgPll);
for(index = 0; index 《 4; index++)
{
CSL_BootCfgSetSRIOSERDESRxConfig(index, cfgRx);
CSL_BootCfgSetSRIOSERDESTxConfig(index, cfgTx);
}
(4)LSU模块配置
SRIO的Direct I/O和Message Passing两种传输机制使用不同的传输控制模块,其中控制Direct I/O模式包发送的为LSU(Load/Store Unit)模块,系统中一共有8个LSU,每个LSU都有独立的7个寄存器,即LSU_Reg0--LSU_Reg6,Reg0--Reg4用来配置传输控制信息,REG5、REG6用来存储命令和状态信息,Reg6有只读和只写两种模式,其他寄存器都是可读可写的,LSU寄存器组定义如图3所示。
由图3可见LSU的Reg0~4中主要配置了Direct I/O传输的控制信息,如源地址、目的地址、数据长度、设备ID、端口号、优先级等;Reg5寄存器配置门铃信息和包格式等命令信息;Reg6在只读模式下通过Busy和Full位信息确认指令寄存器和影寄存器是否空闲,该两位信息都为0时表示当前LSU可用, LTID位和LCB位信息一起用于确认传输的完成信息(completion code)。
LSU寄存器配置可使用CSL库文件中的API函数CSL_SRIO_SetLSURegx()对每一个寄存器单独赋值编程,也可通过编辑结构体SRIO_LSU_TRANSFER变量对ByteCount、DestID、deviceID、TType、FType、Drbll_Info等关键成员变量进行赋值,然后通过API函数CSL_SRIO_SetLSUTransfer()完成整个传输的配置和启动。
3.2 数据传输系统软件设计
本文设计的DSP与FPGA通信系统通信节点较少,传输数据量大,属于点对点的高速数据传输,所以SRIO接口采用Direct I/O传输方式和Doorbell消息相结合的方案进行数据交互,数据包格式采用Direct I/O方式的SWRITE流写操作,传输方案实现简单,同时通信发起方在数据发送完成后发送Doorbell消息通知接收方传输完成,接收方收到Doorbell消息后进行相应处理,保证通信过程的实时性和正确性。具体软件流程如图4所示。
系统上电启动后,软件对DSP系统中时钟、定时器、存储器、中断等必要设备进行初始化,在SRIO模块初始化过程中需等待DSP与FPGA的SRIO接口连接成功才表示初始成功,然后便可以进行自定义的数据传输操作了。根据TMS320C6678 DSP存储空间配置,本系统中DDR3缓存地址区域为0x80000000—0xFFFFFFFF,大小为2 GB,SRIO接口可直接对存储空间进行读写访问。根据系统设计FPGA每发送完一组数据后,都将附带发送一个Doorbell消息作为完成标记,Doorbell的16 bit信息位填充内容为0x0001,表示使用DOORBELL0_ICRR寄存器的ICR1映射中断事件,系统中设置CPU中断4作为响应Doorbell事件的CPU中断,DSP收到Doorbell消息后将触发CPUINT4,程序跳转执行中断响应函数,在中断响应函数中查询中断状态位,对接收数据包的正确性进行判断,然后通过EDMA模块将数据快速搬移到DDR3指定地址锁存,并调用算法对数据进行处理。当DSP需要向FPGA端回复应答信息时,DSP程序通过配置LSU寄存器组向FPGA存储地址发送数据,当LSU的Reg0~Reg5配置完成后传输开始,程序软件通过查询LSU传输完成信息与Reg6中记录的LCB位信息进行比较,判断当前传输是否成功。
4 测试与验证
针对上文所设计的SRIO互联系统进行性能测试,系统设计单通道传输速度为3.125 Gb/s,物理层SerDes模块采用8B/10B编码,所以4通道的SRIO接口理论传输速度为3.125×4×8/10=10 Gb/s。实际测试过程中采用多组长度不同的数据进行测试,每组测试数据多次运行取平均值,测试结果如表2所示。
测试结果表明,本文设计的DSP与FPGA互联系统能够按照设计需求稳定工作,数据读写正确,传输速度较为稳定,当数据量较大时通信开销占总传输时间比例减小,整体传输速度超过8 Gb/s,达到理论值10 Gb/s的80%以上,传输效率较为理想。
5 结论
本系统基于TI多核DSP TMS320C6678的SRIO接口模块建立DSP与FPGA之间的高速通信互联系统,采用SRIO模块4x接口模式及每路接口3.125 Gb/s的传输速率实现DSP与FPGA间高速稳定的数据传输,同时使用DSP自带DDR3控制器模块实现对DSP外部扩展DDR3 SDRAM存储芯片的读写访问,从而实现系统内部数据传输及共享存储。该系统已经在大视场高分辨率光学图像处理、实时SAR雷达成像等多个工程项目中得到应用验证。
参考文献
[1] Texas Instruments.TMS320C6678 Multicore Fixed and Floating-Point Digital Signal Processor[Z].2014.
[2] Texas Instruments.KeyStone Architecture Serial Rapid IO(SRIO) User Guide[Z].2012.
[3] Texas Instruments.KeyStone Architecture DDR3 Memory Controller User Guide[Z].2011.
[4] Texas Instruments.TMS320C66x DSP CorePac User Guide[Z].2013.
评论
查看更多