RapidIO MegaCore功能I / O Avalon-MM主站的读写端口可能会以与RapidIO链路上显示的顺序不同的顺序在Avalon-MM接口上显示读写事务。更具体地说,如果RapidIO IP内核在接收到几个写请求数据包后立即在RapidIO链路上收到读请求数据包,则读取事务可能会在所有写事务完成之前完成。
下图说明了可能出现问题的情况示例。
I / O Avalon-MM主状态,其中r5读取事务可以传递一个或多个写入事务
在图中,RapidIO IP内核Avalon-MM主写端口有一个写请求事务w0准备发送到Avalon-MM从器件0,而RapidIO IP内核Avalon-MM主读端口有一个读请求事务r5准备发送到同一个Avalon-MM从站,Avalon-MM从站0.事务编号表示事务从传输层到达的顺序,即事务应完成的顺序。但是,在以下示例方案中丢失了事务排序:
- 主写端口将w0请求发送到Avalon-MM slave 0。
- Avalon-MM slave 0通过断言
waitrequest
来响应。 - 主读端口将r5请求发送到Avalon-MM slave 0。
- Avalon-MM slave 0在w0事务完成之前检索并传输数据到Avalon-MM主读端口以响应r5请求。
w1,w2,w3或w4被延迟可能会出现相同的情况。类似地,w0可能会延迟但在r5之前仍然完成,但是在r5之前w1没有完成,依此类推。理论上也可以使用r0读取事务和w1写入事务来发生相同的情况。但是,RapidIO规范并不排除写入事务传递读取事务。
解决/修复方法
为防止NREAD
事务在其之前的NWRITE
事务序列中传递任何事务,请确保RapidIO链路上的写事务和读事务之间有足够的延迟。例如,你可以做最后的NWRITE
交易的NWRITE_R
交易,而是和发送NREAD
收到后才链接交易NWRITE_R
响应。
此问题将在RapidIO MegaCore功能的未来版本中修复。
没有回复内容