本发明属于高速通信领域,特别涉及一种基于emif和srio接口的片间高速通信系统。
背景技术:
目前,数字信号处理技术快速发展,数字信号处理系统已经广泛应用于军用、民用领域,数字信号处理器(dsp)和现场可编辑门阵列(fpga)在数字信号处理系统中应用最为广泛。为了将fpga并行高速处理能力和dsp对复杂算法的处理能力相结合,需要以dsp+fpga为核心搭建数字信号处理平台,而实现片间高速实时通信至关重要,emif总线为并行数据总线,srio为高速串行接口,均是成熟的片间接口技术。
中国专利cn109446126a公开了一种基于emif总线的dsp与fpga高速通信系统及方法,支持对数据存储模块同时进行读写操作,也无须将通信数据一次全部写入数据存储模块,只需要较少数据存储资源,实现dsp与fpga双向数据的高速和实时通信,可以满足大量数据并行处理的需求,适用于低成本低功耗数字信号处理系统。但当需要大批量数据传输速率达到gb/s以上时,单纯的emif并行数据总线已经不能满足传输需求。
技术实现要素:
本发明的目的在于提供一种适用于高速信号处理系统的片间通信,利于完成大批量快速数据的传输,且具有灵活性高、适配性强等特点的片间高速通信系统。
实现本发明目的的技术解决方案为:一种基于emif和srio接口的片间高速通信系统,包括fpga端emif接口模块、fpga端srio接口模块、gtx模块、dsp端emif接口模块、dsp端srio接口模块、ddr3外部存储模块、dsp内部cpu模块、电源模块以及时钟模块;
所述fpga端emif接口模块,用于实现fpga对emif总线传输的指令进行读写控制;
所述fpga端srio接口模块,用于实现fpga对srio接口进行协议配置及数据读写控制;
所述gtx模块,用于实现片间批量数据高速串行传输;
所述dsp端emif接口模块,用于实现dsp对emif总线传输的指令进行读写控制;
所述dsp端srio接口模块,用于实现dsp对srio接口进行协议配置及数据读写控制;
所述ddr3存储模块,用于缓存片间传输的批量数据;
所述dsp内部cpu模块,用于处理片间中断信号及收发命令、数据;
所述电源模块,用于给系统供电;
所述时钟模块,用于提供系统所需的各种时钟。
本发明与现有技术相比,其显著优点为:1)结合了emif并行接口和srio串行接口,emif接口可用于片间命令控制字传输,srio接口可用片间高速数据传输,两者也可独立运行,方便灵活,系统适配性强;2)适用于高速信号处理系统的片间通信,利于完成大批量快速数据的传输。
下面结合附图对本发明作进一步详细描述。
附图说明
图1为本发明基于emif和srio接口的片间高速通信系统的结构图。
图2为本发明中电源模块结构图。
图3为本发明中时钟模块结构图。
具体实施方式
结合图1,本发明提出了一种基于emif和srio接口的片间高速通信系统,包括fpga端emif接口模块1、fpga端srio接口模块2、gtx模块3、dsp端emif接口模块4、dsp端srio接口模块5、ddr3外部存储模块6、dsp内部cpu模块7、电源模块8以及时钟模块9;
fpga端emif逻辑控制模块1,用于实现fpga对emif总线传输的指令进行读写控制;
fpga端srio接口模块2,用于实现fpga对srio接口进行协议配置及数据读写控制;
gtx模块3,用于实现片间批量数据高速串行传输;
dsp端emif接口模块4,用于实现dsp对emif总线传输的指令进行读写控制;
dsp端srio接口模块5,用于实现dsp对srio接口进行协议配置及数据读写控制;
ddr3存储模块6,用于缓存片间传输的批量数据;
dsp内部cpu模块7,用于处理片间中断信号及收发命令、数据;
电源模块8,用于给系统供电;
时钟模块9,用于提供系统所需的各种时钟。
emif接口和srio接口相互独立,emif并行接口作为命令控制字的传输通道,srio高速串行接口作为批量数据传输通道。
进一步地,在其中一个实施例中,fpga采用xc7k410t型号的fpga芯片。
进一步地,在其中一个实施例中,dsp芯片采用tms320c6678型号的dsp芯片。
进一步地,在其中一个实施例中,fpga端emif接口模块配置方式为:fpga端设置若干位宽16、深度1的读写fifo存储空间,每个fifo空间对应dsp的一个地址空间,同时设置中断控制信号供dsp判断从fpga读取数据的时机。
进一步地,在其中一个实施例中,fpga端srio接口模块配置方式为:fpga采用serialrapidioip核对srio接口模块进行配置,采用rapidio包封装形式,模块对外接口分为用户接口和物理接口,模块外配有中断控制信号。
进一步地,在其中一个实施例中,gtx模块对应fpga芯片内部的gtx收发器,是srioip核物理层硬件基础。
进一步地,在其中一个实施例中,dsp端emif接口模块的可编程参数配置方式如下:
1)setup建立时间,指在存储周期开始与读或写选通脉冲有效之间的时间,最小值是1。
2)srtobe数据稳定时间,指在读
3)hold保持时间,指从禁用读或写选通脉冲到周期结束之间的时间,最小值为1。
4)turnaround片选切换时间。
5)datawidth异步设备的数据总线的宽度(8/16位)。
6)setup、strobe、hold参数根据emif16的时钟周期计算。fpga以100m频率读写,r_setup+r_srtobe+r_hold=10ns=fpga的读写周期,同样的,w_setup,w_strobe和w_hold也满足上式。选择总线宽度为16bit。
在.cmd文件中完成emif空间的地址映射,在主程序中定义一个数组,将其地址映射到上面的存储空间中,然后对该数组操作即可。
进一步地,在其中一个实施例中,dsp端srio接口模块的可编程参数配置方式如下:
fpga给dspsrioclk引脚的参考时钟是156.25mhz,配置链接速率为3.125gbps,通过srio_serdes_cfgpll寄存器倍频实现。链接速率是参考时钟的20倍时应进行10倍频,采样时一个pll时钟采两个数据,对应寄存器的8-1位为00101000b,0位显然要置1使pll使能,最后srio_serdes_cfgpll寄存器的值为0x251,可以通过芯片支持库(csl)进行配置,同样的方法可以配置srio_serdes_cfgtx和srio_serdes_cfgtx寄存器。选择4x工作模式,只需要一个端口,在程序中将port0使能,port1-3禁用。
实施例中是dsp主动去读取fpga端的数据,所以数据包选择nread类型。其它参数还有接收的数据大小、原地址、目的地址、目的设备和源设备id。srio作为一个端点器件,是根据目标id来接收数据包的,实施例中采用本地接收方式,srio只接收那些id与自己本地id相同的数据包。当接收到fpga发过来的数据准备完成的信号后,dsp即进入中断服务子程序中开始接收数据。配置完lsu_reg5之后数据即开始发送,首先通过keystone_srio_lsu_transfer()将上面初始化好的lsu寄存器的值写入lsu寄存器中,然后通过keystone_srio_wait_lsu_completion()函数返回的completioncode判断传输状态,若传输正确,则退出中断,返回主程序处;若传输错误,则根据相应的返回值做出不同的判断。
进一步地,在其中一个实施例中,dsp内部cpu模块用于处理片间中断信号,具体实现gpio引脚8的上升沿触发中断,并将其映射到dsp的cpu中断号4的步骤如下:
1)首先在主函数中完成gpio的初始化,设置引脚8为输入状态,上升沿中断,关闭全局中断,同时清除所有的下降沿中断。
2)编写中断向量表,一般用汇编语言编写。在中断向量表中需要完成中断服务函数声明、定义中断向量入口地址的工作。
3)完成中断初始化,c6678提供了三个中断控制器intmux1、intmux2、intmux3,每个控制4个中断,其中intmux1控制4-7中断,intmux2控制8-11中断,intmux3控制12-15中断。首先设置intmux1将gpint8对应的第82号事件映射到中断4上,然后将中断清除寄存器evtclr每一位置1清除所有中断事件,再设置ier寄存器使能我们需要的中断4,在istr寄存器中自写入中断向量表的起始地址。
4)编写中断服务函数,进入中断后首先要清除设置的中断事件,c6678一共有4组事件标志寄存器mevtflag,每组32个,整个系统的128个事件产生的标志都在这,通过读取mevtflag可以获取中断标志,gpint8对应事件号是82,应该在第三组中,即mevtflag,获得中断标志后再使用事件清除寄存器evtclr,将对应的事件清除。
进一步地,在其中一个实施例中,ddr3外部存储模块包括4片内存颗粒,其中两片供fpga使用,两片供dsp使用。
作为一种具体示例,内存颗粒具体采用mt41k256m16内存颗粒。
进一步地,在其中一个实施例中,结合图2,电源模块8包括:两片ltm4633三输出10a降压型微型模块稳压器,分别给dsp和fpga供电;tps51200电源调节芯片,产生0.75v电压,为ddr3外部存储模块6供电;tps54620和tps74401芯片(产生1.5v电压),分别用于给gtx模块3和ddr外部存储模块6供电。
进一步地,在其中一个实施例中,结合图3,时钟模块9包括一块25mhz晶振和cdcm6208时钟芯片,其中25mhz晶振用于产生fpga所需的主时钟,cdcm6208时钟芯片用于产生其余所需时钟。
综上所述,本发明提出的基于emif和srio接口的片间高速通信系统实现了fpga与dsp间的双向高速实时通信,既可以通过emif总线传输命令控制字,又可以通过srio高速串行接口进行批量数据传输,适用于以fpga和dsp为核心的协同数字信号处理系统,灵活性和适配性强。