我尽量保持这篇文章简短,同时仍然回答以下问题:使用 AXI 握手时需要知道的最低限度是什么?
我们将从基础开始,有masters 和 slaves。“从-slaves”端口是接收数据的端口,而“主-masters”端口向从端口传输或发送数据。
![4e9c461e002120983603391464c5de40.png](https://i-blog.csdnimg.cn/blog_migrate/353e29abda126206710a429dbbf5ff8f.png)
我倾向于遵循 Xilinx 示例中的约定,即在主端口信号上加M_*_和从端口信号前加上S_*_. 然后我会经常在*中间的部分填写一些名字,提醒我正在描述哪个接口。例如,S_VID_TVALID将是 TVALID在"从"视频接口上找到的信号。下表是 AXI 流的信号列表-图 2。
![152afcf84d24f2f910b67aece700aac2.png](https://i-blog.csdnimg.cn/blog_migrate/f76620aac40416dbbdfcacf9b7becc1c.png)
在大多数情况下,接口只需要时钟、复位、有效、就绪和数据信号(clock, reset, valid, ready, and data)。在数据包接口中,如使用 Xilinx’s stream DMAs, 信号TLAST是必须的。视频接口也使用 TUSER 信号来指示帧的开始。
其余的信号是可选的,很少使用他们。
然而,今天,我想专注于握手信号。因此,我们将这些信号分为三类:TVALID、TREADY,并且我们将把其他所有内容都归为TDATA信号。这仅仅是因为握手信号平等地为所有有效载荷信号创建规则。
此外,虽然今天将讨论 AXI stream 握手规则,但我们今天讲的所有规则也将适用于 AXI 和 AXI-lite 握手规则。
规则
所以让我们开始基本的握手规则。事实上,我喜欢将这些视为构建 AXI 握手所需的最低限度的信号。
xVALID必须在复位后清除。
除非xVALID && xREADY.
就像这里的一个符号点一样,我遵循 AXI4 规范约定使用xVALID来指代某种类型的 AXI stream通道。在这种情况下,我可能会说M_AXIS_TVALID && M_AXIS_TREADY or S_AXIS_TVALID && S_AXIS_TREADY,但我只是用上面的缩写缩短了一些东西以试图简化事情。
总会有事情发生xVALID && xREADY——注意不要在此检查中添加任何其他条件,以免错过握手!
除非!xVALID || xREADY.
这更像是一个master规则,而不是一个slave规则,但仍然非常重要。我们稍后再讨论这个问题。
xREADY必须是寄存器信号。如有必要,请使用 skid buffer以避免吞吐量受影响。
这不是规范所要求的。相反,这是规范确实要求的结果。该规范只要求“在主从接口上,输入和输出信号之间不得有组合路径。”
![dbc716c9b895d71b73ecdc5ab2b339ab.png](https://i-blog.csdnimg.cn/blog_migrate/e61172385048ce9db5d065d2e090324c.png)
(仅推荐:)READY在设计闲置时应保持高电平,仅在以下情况下拉低(如果需要)VALID && READY。
这对 AXI 流非常有用。它甚至适用于 AXI