SRIO其实不是个通用的名字,真正能google到的叫Lp-serial,这个全称是什么暂且买个关子,它是一种协议,就是规定了两个都遵照这种协议的设备可以通信。要注意的是这里规定的是两个设备,不是三个也不是四个,这个理解是比较重要的。比如你一个switch连接了3个DSP和2个FPGA,这5个都可以通过SRIO协议通信的。但是本质上,这3个DSP和2个FPGA都是和Switch通信,再进一步来说这个协议是端到端的协议。之所以要说明这个问题,就是很多客户反映的DSP到FPAG发包木有成功,如果中间有switch,那么你需要检查DSP到switch的链路,switch到FPGA的链路。而不是笼统的去看DSP到FPGA,这就是协议的本质。
再说协议,协议规定了SRIO在物理层传递是按照固定的报文的。如果你是做原始的SRIO的IP,那么你需要手动的拼接这些报文;如果你用TI芯片,恭喜你,TI使用LSU帮你拼接,你只需要配置LSU寄存器就可以了。所以有人问LSU怎么填,那么如果你懂了协议里面的包格式,同时了解LSU如何对应到协议中去,那么你就不会有任何疑问了。(这当然是说的简单啊……)
继而就说到SRIO的错误检测了,通常遇到SRIO错误,我们这里抛去硬件信号质量错误(这种错误需要看眼图)。我们一般首先会看offset为0x158的SPn_ERR_STAT寄存器。比特位域如下表所示,这个寄存器可以分为3个部分来看,一是port状态,二是输出和输出的stop error,三是重传的stop error。我们下面分三部分重点说明各个状态是什么意义。
Port uninitialized and Port Ok
端口未初始化和端口OK是一组状态,端口状态只能是未初始化或者OK。通常在刚开始的时候端口状态时未初始化的,需要用户进行初始化配置才能变成端口OK状态。端口的初始化配置主要是端口的接收时钟窗对齐以及端口宽度的确认过程;大部分情况端口宽度通常是固定配置的,只有接收时钟窗需要调整。
接收时钟窗调整的过程是,两个连接的设备都互相向对方不停的发送training control symbol和link-request control symbol。成功收到并检测出control symbol的端口会回复一个idle control symbol,收到idle control symbol的端口会清除port uninitialized状态转为port ok状态。
一周热门 更多>