我使用的是论坛上提供的KeyStone_SRIO.zip程序,并进行了一些修改,可以实现内循环,也可以和FPGA进行SRIO通信,但是在测量带宽时遇到一点小问题:
在SRC中的SRIO_loopback_Test.c中的srio_signle_port_transfer函数中的
InitLsuTransfer(&lsuTransfer, transferParam, uiPortNum,
DSP1_SRIO_BASE_ID+uiPortNum, uiPortNum);
cycles= TSCL;
Keystone_SRIO_LSU_transfer(&lsuTransfer);
uiCompletionCode= Keystone_SRIO_wait_LSU_completion(uiPortNum,
lsuTransfer.transactionID, lsuTransfer.contextBit);
if(0==uiCompletionCode) //complete without error
{
/*wait for theoretical transfer time*/
while(TSC_delay_cycle(cycles)<(uiByteCount*10*1000/uiPortSpeed_Mbps)+300);
/*Since NWRITE/SWRITE complete without response,
we need waiting for last data landing*/
uiWordIndex= uiByteCount/4-1;
while(uipSrc[uiWordIndex]!=uipDst[uiWordIndex])
{
Invalid((void *)&uipDst[uiWordIndex], 4);
if(TSC_delay_cycle(cycles)>
(uiByteCount*10*1000/uiPortSpeed_Mbps)*4+4000) //timeout
{
break;
}
};
}
cycles= TSC_delay_cycle(cycles);
我想这个cycles应该是准确的,在我进行闭环测试时,4 X 3.125G测试,打印出的带宽速度能到达到8Gbps,但是我与FPGA进行数据传输时,不管是SWRITE或者NWRITE,也是4 X 3.125G,但是打印出来的带宽只有2.5Gbps,在用chipscope抓数,如下图所示

显示FPGA每次收到256B数据后都要停一段时间再收到256B,我想知道的是DSP是否是DSP一段时间一段时间的发数,还是FPGA的SRIO内核一段时间一段时间接收数据。我发送的数据量远大于256B,但是小于LSU所规定的1MB,DSP应该自动的将这些数据拆分成多个256B的包,这个在发送时会有延迟吗?
谢谢大家!