找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

[嵌入式/ARM] 基于FPGA实现多DSP系统的数据流高效广播

[复制链接]
admin 发表于 2013-3-23 08:56:50 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
摘  要: 以ADSP-TS201构成的多DSP系统中,链路口数目有限会造成数据广播复杂度的提高。为此提出了一种基于FPGA实现DSP间广播通信的方案。设计了基于FPGA的链路口接收和发送模块,采用自定义数据报头,完成了基于令牌和轮询的数据调度状态机的设计,实现了DSP之间的一对一、一对多以及多对多的广播通信。经验证,该广播通信方法的吞吐率单向可达150 MB/s,双向可达300 MB/s,数据传输可靠,具有可扩展性。
关键词: 多DSP;ADSP-TS201;FPGA;链路口
       机载超宽带合成孔径雷达(UWB SAR)具有穿透叶簇和浅地表对隐蔽目标探测成像的能力,其军事应用潜力巨大,是未来雷达的一个发展方向。但是UWB SAR回波的数据量达到数百万字节,同时成像所需的运算量达到数GFLOPS[1]。单片DSP的处理能力明显不足,所以采用多片高性能的DSP共同完成任务,而如何实现多片DSP间互联通信又成为一大难点。本文DSP选用的是ADI公司的ADSP-TS201,但由于TS201链路口的数目有限,无法使所有DSP都直接通过链路口相连,所以需要配合其他的方法来解决DSP间的通信问题。参考文献[2]介绍了如何在8片TS201和1片FPGA组成的系统中用FPGA实现8片DSP的互访。该设计中,访问是基于4字命令包,通过读写、设备状态、目的地址和源地址以及优先级等的判断,完成DSP之间的互访;FPGA和DSP通过总线的方式连接;FPGA完成原始回波数据流的转发。其缺点是,通信协议复杂,必须不停地修改命令包;访问有固定的优先级,有时会很慢,效率低;用总线的方式连接容易产生竞争。
     针对以上问题,本文提出了一种在8片DSP和2片FPGA构成的系统中通过FPGA实现DSP之间广播通信的方案。由于该系统特殊的拓扑结构,原始回波数据流的转发已确定为通过TS201的链路口完成,而控制数据流和运动测量参数的转发以及对DSP程序运行的监控却成为一大瓶颈。为此,本文设计了在其中的一片FPGA内实现多DSP间有效互联的方案。
1 系统结构
     本系统中的信号处理板主要用于UWB SAR的实时成像数据处理,DSP与FPGA的连接示意图如图1所示。DSP2~DSP7主要处理回波数据流,成像数据处理需要两块这样的板子:一块做距离向处理,另一块做方位向处理。FPGA2的主要任务:(1)方便主机通过CPCI总线对DSP进行程序的加载、程序运行的监控、数据的读写和实时运算结果的显示;(2)在飞行过程中,当飞行的速度、天线的姿态、工作模式等参数改变时,可以方便及时地将参数信息广播到DSP中。该处理板的具体结构以及各模块的功能可参见参考文献[3]。本文的关键是如何通过FPGA2实现DSP2~DSP7之间的互联通信。由于DSP2与DSP5、DSP3与DSP6、DSP4与DSP7已经通过链路口两两相连,所以它们之间的通信不再需要经FPGA2的转发,故需要与上述6片DSP中某片DSP通过FPGA2实现通信的DSP只有4片,例如对于DSP2,需要通过FPGA2与其通信的4片DSP为DSP3、DSP4、DSP6、DSP7。
    20121107051439461672270.gif
       TS201是目前业界公认的高性能DSP处理器之一,有着很高的数据处理速度。FPGA2选择Xilinx公司的XC4VLX25,该类型的FPGA比较适合逻辑控制和做数据接口。TS201共有4个链路口,都采用LVDS(Low Voltage Differential Signaling)技术;每个链路口包含发送和接收两个独立的通道,每个通道都有4对差分数据线、1对差分时钟、2个控制信号,共24根线;链路口在每个通道(发送或接收)都可以通过1 bit或者4 bit模式进行数据通信,本文采用4位通信模式[4]。
2 多DSP数据流高效广播设计
     本设计的总体框图如图2所示。对每片DSP,FPGA都有一对完全一样的接收和发送模块,DSP链路口发送来的差分数据依次经过IBUFDS模块和IDDR模块,最后暂存于RAM中。在多个状态机的控制调度下,一次或多次将数据从RAM中读出,然后发送到相应的发送模块。要发送的数据先暂存于FIFO中,然后依次经过ODDR模块和OBUFDS模块发送到对应的DSP中。
    20121107051439508542271.gif
       设计的最大难点在于如何实现数据的正确调度而不出现错发或漏发现象,特别是当一片DSP向其他所有DSP广播数据和其他所有DSP同时向一片DSP发送数据时,不出现错发或漏发现象。
2.1 数据接收、发送模块的设计
     要在FPGA中实现多DSP的互联通信网络,首先必须使FPGA和DSP可以正确地互相收发数据。由于TS201的链路口有自己的通信协议,所以只要在FPGA中编程实现TS201的链路口通信协议,就可以实现FPGA与TS201之间的双向通信。TS201的具体通信协议,可参见参考文献[4]。
2.1.1 接收模块
     FPGA接收模块如图3所示。在接收模块中,先将差分数据和差分时钟分别通过IBUFDS模块转换为单端的数据和单端时钟[5];再将该单端数据分别送入到4个IDDR,单端时钟经过BUFG模块后输出的bufg_clkout作为IDDR的驱动时钟;最后将IDDR模块输出的完整8 bit数据存储在输入输出宽度为8 bit的双端口RAM中。块发送完毕,信号bcmpi延迟一个周期后和bufg_clkout一起经过一个时钟选择器后输出时钟mux_clkout作为RAM的写驱动时钟。这样,可以保证写入RAM的数据深度正好是DSP的发送数据长度,而不再需要去考虑数据写入深度控制的问题。
    20121107051439539792272.gif
   2.1.2 发送模块
       FPGA接收模块如图4所示。在发送模块中,要发送的数据先存于输入输出宽度为8 bit的FIFO中,再将FIFO的输出数据依次经过4个ODDR和4个OBUFDS,最后得到差分输出数据。在控制模块CONTROL中,当数据全部写入FIFO、acki有效且FIFO不空时,FIFO读使能rd_en和clkoe信号有效。将clkoe作为ODDR的正极输入(负极始终为低电平)得到发送时钟[5],再经 OBUFDS得到差分输出时钟。在控制模块CONTROL中同时会给出块发送完毕信号bcmpo。
     在Virtex4中提供了强大的数字时钟管理器(DCM),它可以实现延迟锁相环、数字频率合成器、数字移相、数字扩频等功能。本文用到两个DCM,其中一个作为倍频器,将FPGA中的系统时钟从60 MHz倍频到150 MHz;另外一个作为移相器,将倍频后的时钟移相90°,从而得到需要的0°时钟clk_0_150 MHz和90°时钟clk_90_150 MHz(见图4)。
2.2 数据调度状态机的设计
     若只完成接收模块和发送模块的设计,则只能实现FPGA与DSP的点对点通信,还不能实现多片DSP之间的互联通信,所以还需要有一个数据的合理调度过程。
2.2.1 DSP数据报头
     为了使数据调度变得容易,本设计定义了DSP发送数据报头,如图5所示。位0~7表示信宿,位0为1,表示该数据块请求发送到CPCI自定义接口,用于板间通信;位1为1,表示请求发送到9656;位2~7为1,分别表示请求发送到DSP2~DSP7;若为0,则表示不发送到任何器件。位8、9、10表示信源,000表示信源为CPCI自定义接口,001表示信源为9656,010~111分别表示信源为DSP2~DSP7;位11~暂时保留,为以后扩展功能时使用。
    20121107051439555422273.gif
       当FPGA接收到来自于DSP的数据时,首先要将该数据块的前8 bit提取出来,用以确定目的DSP,并将该8 bit数据称之为请求发送信号require。
2.2.2 应答请求信号状态机
     在2.2.1节中,提取数据报头的前8 bit,得到一个8 bit require信号。在FPGA的程序中,对应每片DSP本文都设计有一个这样的状态机,用于对其他DSP送来的require信号进行判断,然后给出相应的应答信号allow,表示允许发送,其状态转移图如图6(a)所示。该状态机基于令牌和轮询的思想,并遵循以下原则:
     (1)按照require1~require4依次轮询,发现满足条件的则给与令牌。
     (2)令牌不能同时拥有,令牌被持有后就将令牌信息置为无效。
     (3)若令牌被持有则轮询暂停,等待令牌被释放,即重置为有效。
     (4)当块发送完毕信号、bcmpo信号为低电平时,释放令牌。
     (5)令牌被释放后则继续轮询尚未持有令牌的,如是重复。
     需要说明的是,当bcmpo为低时虽然也表示数据块发送完毕,但低电平只维持4个周期,而且当有多片DSP向其中一片DSP发送数据时,bcmpo会被多次拉低来指示某片DSP需要发送的数据已经发送完毕。所以与链路口协议中的bcmpo已经不是一回事了,只是重名而已。本设计的令牌为avail。
2.2.3 RAM读地址状态机
     在FPGA的程序中,对应每片DSP本文也有另外一个状态机,用于对送来的allow信号进行判断,给出相对应的RAM的读地址addrb和FIFO准写信号wr_en,其状态转移图如图6(b)所示。所遵循的原则与2.2.2的状态机几乎一样。不同的地方在于:
     (1)当对应bcmpi为低电平时,信号ram_rd_en为高(即DSP数据发送完了才能从RAM中读出数据),状态机开始工作。
     (2)令牌为flag_tx_achiv信号,addrb等于DSP发送数据深度M时(即在RAM中的数据完全读出后),释放令牌。
     (3)只有持有令牌期间,对应的信号addrb开始累加,wr_en为高电平。
    20121107051439602292274.gif
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-24 09:49 , Processed in 0.059953 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表