"); //-->
3BSE022462R1 一个写地址或写数据项未完成
重置 AXI master 更具挑战性。基本上,master 必须等待所有未完成的事务完成才能完成重置。这需要某种状态机。
让我们逐步了解这可能是如何工作的。
首先,请求重置,然后设计从任何 WORKING 状态转换到 INRESET 状态,以等待事情解决。
在 INRESET 状态下,不会启动其他 AXI 事务。允许完成现有事务。此步骤本身需要几个子步骤。
总之,这些步骤将使您无法开始任何新交易。
BREADYRREADY如果尚未设置,则需要设置为 1
我个人喜欢在交易未完成时保持BREADY高位RREADY,即使没有未完成的交易也是如此。我认为这是一个很好的做法,尽管我可以想象 设计可能无法做到这一点的原因。
只要!AxVALID || AxREADY在任何地址请求通道上为真,AxVALID就应该丢弃该线路。这样,就不会发出新的交易请求。
这假设您没有WVALID在其相关信号之前设置高电平 AWVALID。虽然规范允许您这样做,但它通常不会为您带来任何更好的性能,因为互连 无论如何都不知道如何处理除地址之外的数据。尽管如此,如果您选择允许WVALID在 之前进行设置AWVALID,那么您还需要确保刷新AWVALID 线路,就像我们即将刷新WVALID下面的信号一样。
一旦!WVALID || WREADY,您将要设置S_AXI_WSTRB 为零。这将阻止您的核心在重置请求后实际写入任何更多值——假设这是您想要的。
只要您有需要完成的未完成的写入事务,您还需要设置WVALID为。1
写入通道信号有点棘手。您将需要完成所有正在进行的写入操作。我的建议是只要您有未完成的交易就可以设置WVALID为。1这是有效的,因为您WSTRB同时设置为零,因此您不再真正关心 您发送的数据,只关心数据交易通过系统清除。
在该INRESET州期间,必须允许任何和所有现有交易完成。
您一直在跟踪发起了多少突发请求,以及有多少预期响应仍未完成,对吧?
只要交易仍然未完成,您就需要保持这种 INRESET状态。
一旦所有交易完成,您的核心可能会离开重置状态并返回IDLE(或WORKING– 取决于您的核心设计要求)。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。