我设计的板子上面有两片DSP,不妨称为DSP0和DSP1。DSP0和DSP1连接在一条JTAG链上,其Target Configuration如附件图1所示。
DSP0的4x SRIO连接到一片数据交换芯片上,DSP1的4x SRIO连接VPX上,用于将来的底板互联。
使用资源KeyStone_5F00_SRIO例程测试单个DSP的SRIO内循环。
1、 连接DSP0的CORE0,也就是链上的/C66xx_0(见附件图2),将生成的.out文件load,然后 运行,能够得到测试结果。
2、 连接DSP1的CORE0,也就是链上的/C66xx_8(见附件图2),load同一个.out文件运行,程序停在了函数Keystone_SRIO_Init(&srio_cfg)里面。经过跟踪测试,发现程序运行到这段代码:
for(i=0; i<SRIO_MAX_PORT_NUM; i++)
{
if(srio_cfg->blockEn.bLogic_Port_EN[i])
{
while(0==(srioRegs->RIO_SP[i].RIO_SP_ERR_STAT&
CSL_SRIO_RIO_SP_ERR_STAT_PORT_OK_MASK));
}
}
程序一直死在if内部,代码给出的注释是:/*---------wait all enabled ports OK-------------*/
是否可以这样理解:SRIO 的ports一直没有准备好?可能是什么原因呢?如何解决?谢谢。
还请问:
1、这个自循环包含哪些循环?进入到物理层了吗?是否进行了8B/10B编码?
2、端口没有准备好,和有没有负载有没有关系?不过evm的SRIO好像连岛金手指上了,也应该认为没有负载吧?