1、 测试条件:
(1)PCIE链路:SPEED –> 2.5Gb/S、LANE WIDTH -> X2;
测试环境:A15@1GHz 运行linux
DSP@500MHz 运行TI-RTOS,配置PCIE驱动,作为RC端
FPGA 作为EP端
使用的测试程序由《C:\ti\pdk_am57xx_1_0_4\packages\ti\drv\pcie\example\sample》改造而成,驱动初始化、BAR空间配置等未做修改,只修改了应用部分。
2、 DSP连续写BAR空间:
测试类似: *(int *)0x21000100=0x1234;
*(int *)0x21000104=0x4567;等
TLP报文间隔如下图所示:
M_axis_rx_xxx是DSP发送TLP包的总线,S_axis_tx_xxx是FPGA应答TLP包的总线,从上图可以看出,两个写TLP之间间隔是9个CLK(即9*8ns=72ns);
3、DSP连续读BAR空间:
测试类似: int A=*(int *)0x21000100;
int B=*(int *)0x21000104;
TLP包间隔如下:
M_axis_rx_xxx是DSP发送TLP包的总线,S_axis_tx_xxx是FPGA应答TLP包的总线,红色数字1,3,5是DSP分3次连续读BAR空间的TLP包的时刻,红色数字2,4,6是FPGA应答DSP的读申请的TLP包;
从上图可以看出,第一次DSP读申请,FPGA过了19-2=17个CLK(即17*8=136ns)就应答了DSP,但是DSP两次读申请的TLP包间隔(红色数字1,3)之间的差是202-2=200个clk,即1.6us
Kevin Le82:
由于程序中只是需要小量数据查询FPGA当前的状态和控制FPGA的运行,大量数据的传输是由FPGA使用DMA发起的。目前发现读取FPGA的状态时,读取一次4bytes需要1.6us左右,在实时25K频率中断中,读取几个FPGA状态值的时间占比太大,影响到实际应用。
请教一下专家们,读取慢是什么原因?
,
Shine:
没有用dma方式?
,
Kevin Le82:
目前大量数据的移动都是由FPGA自主通过DMA完成。所以DSP端只需要读取FPGA的状态和控制就可以了,数据量在4/8/16(最大)字节,这点数据使用DMA读取?而且读取的数据不一定是连续的,因为划分了功能块,使用DMA读取4/8字节会不会更慢?
,
Kevin Le82:
看时序图,DSP生成发送,到FPGA收到并且应答,其实时间是很短的,但是为什么真实获得数据所需要的时间就是时序图上两次读取的间隔时间。没有人遇到和我一样的问题吗?
请TI技术人员提供一下解决方案。
,
yongqing wang:
在应答后查看一下是否有啥代码
,
Kevin Le82:
dsp端时间测量是startT= TSCL;int A=*(int *)0x21000100;TimeUsed=(TSCL – startT)*10^9/cpu频率;//单位ns
FPGA端,由于使用的PCIe核,无法估计后续是什么
,
yongqing wang:
问题还没解决吗?
,
Kevin Le82:
还没有解决