棋子 · 2019年12月18日

AXI读/写订购

AXI规范的8.6节说,读写之间没有顺序限制。然后说,如果存在RAW依赖项,则主机必须在发出读取之前等待写入完全完成。如果写入是可缓冲的,则响应来自AXI目标。如果该目标是到另一个I / O或主机协议的桥梁,那么主服务器应该期望什么?我可以想到两个答案:

a)主服务器必须用不可缓冲的写入(相同的AWID)对一系列可缓冲的写入进行标点,以确保所有写入数据均已到达最终目的地。不可缓冲的写入响应接收指示可以随后发出读取。

-要么-

b)主机假定目标设备将保持RAW顺序超出AXI。主机发出一系列可缓冲写入(相同的AWID),并在收到最后一个可缓冲写入响应后发出读取。写操作在目标桥中进行缓冲,然后读取操作使目标桥在另一端发出读取操作之前刷新可缓冲的写操作。

RAW依赖关系可能是与先前写入的地址冲突,也可能是先前写入具有可能影响读取的副作用,例如为读取访问打开存储空间窗口。RAW依赖项的类型是否会改变主机对可缓冲写与不可缓冲写的选择?

任何意见?AXI在这里需要什么?

1 个回答 得票排序 · 时间排序
极术小姐姐 · 2019年12月18日

AXI规范对于RAW危害的所有要求是,主机要等到收到BRESP才能发出READ访问权限。

如果中间的AXI从属块在可缓冲的WRITE数据到达实际目标块之前已经给出了BRESP,则该中间块必须负责任何RAW危害检查。

我不认为主机是否使用缓冲或未缓冲的WRITE事务并不重要,它应该能够假定,当它看到BRESP时,便可以发出READ事务,并且您当然不希望强制执行管理员使用无缓冲的WRITE事务来确保进一步进行RAW危害检查。

至于从站如何进行危险检查,我想它可以根据WRITE数据缓冲区中的条目检查READ地址,或者如您所说,在执行任何READ之前刷新WRITE缓冲区的内容而不管地址。

您确实提到了先前WRITE可能会影响后续读取的副作用的可能性,但是对于这种“控制” WRITE访问类型,我不希望它具有可缓冲的类型,因此RAW危害将不适用。

I / O或控制WRITE访问几乎肯定会是无缓冲的,这样主机可以知道访问是在请求时执行的,而不是在写缓冲区耗尽后的某个时刻执行。

你的回答