基于SRIO的FPGA与DSP间高速数据传输
目录
- 引言
- FPGA发送数据至DSP
- 测试过程示意图
- DSP程序计时
- 大小端问题
- 测试结果
- FPGA从DSP读数据
引言
前段时间实现了DSP与FPGA之间的门铃通信,但SRIO不只是可以用来传门铃事务产生中断,它最大的优势在于能够实现嵌入式平台上的高速数据传输。我计划采用SWRITE事务包,从FPGA向DSP发送640×512×8bit图像数据,测试DSP端完成数据接收所需的时间。
参考资料:
SPRU976E - TMS320C645x DSP Serial RapidIO (SRIO) User’s Guide
SPRU732J - TMS320C64x/C64x+ DSP CPU and Instruction Set Reference Guide
FPGA发送数据至DSP
DSP端中断的产生在SPRU976E中有详细的说明,4.2节中指出,DSP在接收从外部送来的数据时,不管是Message还是Direct I/O的事务,外部的设备都需要通过门铃中断来告知DSP已经有数据传输完成。但是门铃事务和传数据的事务是独立的。如果发送端在发完数据后紧接着发门铃中断,有可能数据还未传输完成,DSP就已经开始响应门铃中断了。
为了避免这种情况的发生,发送端需要最后发送一个与前面发送的事务同样优先级的带响应的写(NWRITE_R),在接收到正确的响应后就能确保数据确实已经传输完成。再接着由发送端发起门铃中断,告知DSP传输完成。
测试过程示意图
测试过程的示意图如上图所示,FPGA等待接收从DSP发过来的门铃信号,DB0和DB1分别指的是门铃的Info字段为“0”或者“1”的门铃事务,用于区分不同的工作模式。
DB0对应参照组,DSP端记录从发送门铃到接收门铃所用的时间t1t_1t1。
DB1是测试组,FPGA在收到DB1后,先后依次发送1280包SWRITE事务,再发送NWAITE_R事务,收到响应后发送DB1。DSP记录总时间t2t_2t2。
实际发送数据所用时间为:
t=t2−t1t = t_2-t_1t=t2−t1
DSP程序计时
DSP程序计时用的最多的感觉就是TSC(Time Stamp Counter Registers)寄存器。SPRU732J 的2.9.14对TSCL和TSCH两个寄存器有详细的介绍。这两个寄存器在初始化的时候默认是不启动的,可以往TSCL中写任意值来启动计时器,这个值不会被写入,因为这两个寄存器都是只读的,但是起到了启动计时器的功能。一旦计时器启动,就只能通过复位或者掉电来停止。
读当前的计时值也有讲究。先读TSCL,这时计时器实际的高32位的值也会写入TSCH,接着读TSCH,读到的就是准确的计时。两次读之间不要有中断,万一在中断中也有人去读TSC的值,那么之前的值就丢了。
一个寄存器32位,当前系统时钟1GHz,从0开始计数,只需要4.29s就能计满。而且有时候TSC的起点不是0,所以用的时间会更少,在计时的时候不能省略TSCH不读。
232/109=4.29s2^{32}/10^9 = 4.29s 232/109=4.29s
大小端问题
DSP端的SRIO用的是大端模式,而FPGA上实例化的Xilinx IP SRIO Gen2是小端模式。我感觉挺混乱的,实际测试发现,如果数据以字节为单位,那么每个字节中的bit顺序是对的;而每个字节的顺序是反的。
我利用状态机,控制ireq通道发送的数据,发送NWRITE_R事务包时,指定地址为0xE0050000,发送数据为64’hFEDCBA9876543210。
……
else if (cstate == WRHD) IP_ireq_tdata = {srcTID, NWRITE_R, 1'b0, prio, CRF, 8'd7, 2'b0, 34'hE0050000};
else if (cstate == WRDAT) IP_ireq_tdata = 64'hFEDCBA9876543210;
……
结果如下图所示,最高地址的字节0xFE,到了最低的地址0xE0050000处,而0xFE本身还是0xFE,没有变成0x7F。
根据这一特点,在以后用SRIO的时候,需要在FPGA发送端对数据重新组织或者更改DSP的大小端模式。
测试结果
测试结果如上图所示,我们只用了port 2 上的一对链路,物理层的链路速率是3.125Gbps,DSP的主频是1GHz,因此这里的时间单位是ns。
对照组所用时间为2.179us,也就是发送并接收门铃的时间。测试组的结果已经减去了对照组中的额外时间开销,传输数据所用时间为1.191960ms。
640×512×8bit1191960ns=2.20Gbps\frac{640\times512\times8\rm{bit}}{1191960\rm{ns}}=2.20\rm{Gbps} 1191960ns640×512×8bit=2.20Gbps
η=2.203.125×100%=70.4%\eta = \frac{2.20}{3.125}\times100\%=70.4\%η=3.1252.20×100%=70.4%
有效数据带宽2.2Gbps,数据传输效率70.4%。
FPGA从DSP读数据
为了测试FPGA从DSP读数据的时间开销,同样设置有一组对照组和一组测试组。与前面的测试不同的是,这里FPGA完成的是读取数据的任务,在数据读取完成后向DSP发送中断。
读数据并不是马上就能得到响应。FPGA每次在ireq端口发起NREAD事务之后,需要过一段时间才能在iresp端口读到数据。上图是相应的ILA波形,每次开始接收数据是,FPGA同时发起下一个NREAD事务。可以看到这里有大部分时间iresp通道都是空闲的状态,因此传输效率并没有发送图像数据时那么高。但这样做的优点是,整个过程不需要DSP干预,减轻了CPU的负担。
这里因为换了一块FPGA,所以也换了一个SRIO的端口,换到了端口0,不知道为什么它的通道工作模式指示的是4x的模式,实际上还是1x的链路。可以从上图看书,整个过程花的时间大概是3.568179ms。
640×512×8bit3568179ns=734.7Mbps\frac{640\times512\times8\rm{bit}}{3568179\rm{ns}}=734.7\rm{Mbps} 3568179ns640×512×8bit=734.7Mbps
η=0.73473.125×100%=23.5%\eta = \frac{0.7347}{3.125}\times100\%=23.5\%η=3.1250.7347×100%=23.5%
有效数据带宽734.7Mbps,数据传输效率23.5%。接收数据的过程效率还可以进一步提高,但那样也会占用更多DSP的SRIO中的发送缓冲区的空间,更容易发生拥塞。
基于SRIO的FPGA与DSP间高速数据传输相关推荐
- FPGA和DSP间基于SRIO的高速通信系统设计
摘要: 现代信号处理系统通常需要在不同处理器之间实现高速数据通信,SRIO协议由于高效率.低延时的特性被广泛使用.本文研究了在FPGA和DSP两种处理器之间实现SRIO协议的方法,并通过电路设计和利用 ...
- 基于国产银河飞腾多核 DSP +FPGA的图像识别硬件设计与算法实现
随着监测卫星的发展,如何快速对卫星图像中的目标物进行识别成为关键技 术.为了实现星载关键器件的国产化,并为整个系统提供更高的性能和更好的实 时性,本课题将以国防科技大学计算机学院自主研发的高性能多核 ...
- DSP+FPGA TMS320C665x + Xilinx Artix-7高速数据采集与处理方案
为实现对光纤 Bragg光栅(FBG)传感器检测到的动态应变量进行实时性.高速性的采集和传输,设计了一种基于 DSP 和 FPGA 架构的高速数据采集系统.该系统利用现场可编程逻辑门阵列(FPGA)作 ...
- FPGA+DSP的高速AD采集处理开发详解
一.案例说明 Kintex-7 FPGA使用SRIO IP核作为Initiator,通过AD9613模块采集AD数据.AD9613采样率为250MSPS,双通道12bit,12bit按照16bit发送 ...
- 基于STM32 ARM+ FPGA 的软体机器人的 CAN总线运动控制器的设计
针对在软体机器人控制时 , 多电机协同控制过程中难度大 . 通用性差 . 协同性差等缺点 , 设计了基于 ARM 和 FPGA 的软体机器人的控制器局域网络 ( controller area net ...
- 基于XC2V1000型FPGA的FIR抽取滤波器的设计
http://hi.baidu.com/hieda/blog/item/3613b6bf6f4dd00e18d81f78.html 基于XC2V1000型FPGA的FIR抽取滤波器的设计 摘要:介绍X ...
- 基于STM32 ARM+FPGA的电能质量分析仪方案(一)硬件设计
本章主要给出了本系统的设计目标和硬件设计方案,后面详细介绍了硬件电路的设计 过程,包括数据采集板. FPGA+ARM 控制板. 3.1系统设计目标 本系统的主要目的是实现电能质量指标的高精度测量和数据 ...
- stm32采集脉冲信号_基于STM32+FPGA的数据采集系统的设计与实现
引言 由于火控系统工作环境特殊,所需采集信号复杂多样,传统的以微控制器或PC为主的采集系统往往难以胜任.针对上述问题,提出了一种基于STM32+FPGA的数据采集系统的设计方案,该方案不仅能够完成对多 ...
- 龙芯+复旦微FPGA全国产VPX高速数据采集卡解决方案
现今国产化是个大趋势. 方案特点 ①采用高性能的龙芯3A4000处理器,工作主频1.8GHz-2.0GHz,兼容龙芯3A5000处理器,工作主频2.3GHz-2.5GHz ②搭配龙芯自主7A1000桥 ...
- 基于MP2307的FPGA实验系统供电设计
设计中所使用的电源是由MP2307控制的开关降压.稳压电路和相关保护电路组成的.MP2307是由Monolithic Power Systerms,Inc.研发的一款专用于FPGA,DSP,ASIC和 ...
最新文章
- MOBA项目问题记录
- 碎碎念-----快排与工作
- Lucene全文检索过程
- 【设计模式之美】<Reading Notes>抽象类与接口
- CV模型,全目标检测等
- 透彻!博士生成长需要经历的7道门
- 五菱汽车:并不知悉导致股价及成交量上升的任何原因
- 快速数论变换(NTT)
- 修改MySQL用户的host属性_如何快速修改MySQL用户的host属性
- undefined: resolver.BuildOption
- idea项目中的idea文件如何隐藏,以及不小心隐藏之后如何显示idea文件夹
- 【Java学习笔记】之家庭账目管理系统
- CISSP考试过程,备考过程巨详细!
- 源泉书签支持批量删除功能啦
- 计算机主机cpu图片,秒懂台式电脑处理器性能 桌面处理器天梯图2017年9月最新版...
- SQL中的笛卡尔你真的懂吗?
- 交通系统速度预测综述:从车辆到交通【公共交通数据集】【开源模型整理】
- VSCode 使用教程--编写调试C/C++程序
- 匹兹堡计算机科学公司,UPitt的CS「匹兹堡大学计算机科学系」
- 上传本地.xlsx(.xls)文件,实现页面表格数据预览