AXI 握手规则

本文主要探讨AXI接口中的握手规则,适用于AXI Stream、AXI和AXI-Lite。内容涉及基本的握手规则,包括xVALID和xREADY的使用,强调xVALID必须在复位后清除,xREADY应为寄存器信号。文章通过slave和master的示例说明逻辑形式,并提出在设计中应避免的错误。此外,还介绍了如何通过形式属性捕获这些规则。

我尽量保持这篇文章简短,同时仍然回答以下问题:使用 AXI 握手时需要知道的最低限度是什么?

我们将从基础开始,有masters 和 slaves。“从-slaves”端口是接收数据的端口,而“主-masters”端口向从端口传输或发送数据。

4e9c461e002120983603391464c5de40.png图 1. AXI 流数据流向:主机馈送从机

我倾向于遵循 Xilinx 示例中的约定,即在主端口信号上加M_*_和从端口信号前加上S_*_. 然后我会经常在*中间的部分填写一些名字,提醒我正在描述哪个接口。例如,S_VID_TVALID将是 TVALID在"从"视频接口上找到的信号。下表是 AXI 流的信号列表-图 2。

152afcf84d24f2f910b67aece700aac2.png图 2. AXI 流信号

在大多数情况下,接口只需要时钟、复位、有效、就绪和数据信号(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图 3. AXI 输入和输出之间不允许组合路径

(仅推荐:)READY在设计闲置时应保持高电平,仅在以下情况下拉低(如果需要)VALID && READY。

这对 AXI 流非常有用。它甚至适用于 AXI 读取地址通道。如果没有可用的 skid buffer ,那么使用写入地址和写入数据通道会有点困难 。我们稍后会更多地讨论这个问题。

slave示例

如果所做的只是遵循这些基本规则,那么几乎将被迫采用一些基本的逻辑形式。先看下slave逻辑的形式,接下来再看master逻辑。

因此,在slave中,具有如下所示的逻辑块:

always @(posedge ACLK)
  // Logic to determine S_AXIS_TREADY

 always @(posedge ACLK)
 if (S_AXIS_TVALID && S_AXIS_TREADY) // plus nothing!
  // Do something

前段时间,我写了关于在握手检查中添加条件的问题。从那时起,我在握手中看到的最糟糕的问题是 AXI 内存映射从设备只能在给定时间处理读取或写入请求,但不能同时处理两者。因此,让我们讨论如何快速处理这种情况。

例如,下面这个 VHDL 设计:

### AXI协议握手机制的工作原理 AXI(Advanced eXtensible Interface)是一种高性能、低延迟的总线协议,广泛应用于片上系统(SoC)的设计中。其握手机制通过一系列控制信号来协调数据传输过程中的请求与响应行为。 #### 1. 握手的核心概念 在AXI协议中,握手机制主要依赖于一对信号:`VALID` 和 `READY`。这两个信号分别由发送方和接收方驱动,用于指示当前通道的状态以及双方是否准备好进行数据交换[^3]。 - **VALID信号** 发送方使用`VALID`信号表示它已经准备好了有效数据,并可以将其传递给接收方。 - **READY信号** 接收方使用`READY`信号表明它可以接受来自发送方的数据。 只有当`VALID`和`READY`信号同时为高电平时,一次完整的握手才被认为成功完成,此时数据会被正式传输并记录下来。 #### 2. 数据传输的具体流程 以下是基于AXI协议握手机制的一个典型例子——写回确认阶段: - 当主机完成对从设备的一次写操作之后,会发出一个写回应消息(Write Response Channel),其中包括状态码等信息。 - 在这个过程中,`BVALID`信号由控制器设置为高电平以通知目标模块该笔交易已完成;而一旦目标端感知到这一变化并将自己的`BREADY`置位,则意味着整个事务结束,进入下一个循环迭代。 这种机制允许不同速度组件之间灵活交互而不至于造成资源浪费或者性能瓶颈现象发生。 #### 3. 时间优化策略 为了减少不必要的延时,在某些情况下可以通过提前预判的方式缩短实际所需时间长度。例如对于读取路径上的AR/AW地址设定环节而言,如果预期很快就能获得可用缓冲区位置的话,那么就不必等到前一笔业务彻底结束后再去启动新一轮尝试动作,而是可以在适当时候重叠处理多项任务从而提高吞吐量表现水平。 ```verilog always @(posedge clk or negedge reset_n) begin : proc_bvalid if (~reset_n) begin bvalid <= 1'b0; end else if (write_completed && !bvalid) begin bvalid <= 1'b1; // Indicate write response is ready to be taken. end else if (bready & bvalid) begin bvalid <= 1'b0; // Clear after handshake with slave. end end ``` 上述代码片段展示了如何利用寄存器更新逻辑实现简单的写应答信道管理功能。其中包含了针对各种条件分支下的具体赋值规则说明。 --- ### 总结 综上所述,AXI协议中的握手机制依靠`VALID`/`READY`组合形式达成同步目的,确保源节点与宿节点间能够按照既定节奏平稳运作下去。与此同时,合理运用预测技术还能进一步改善整体效率指标状况。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值