outstanding,out of order ,interleaving的介绍

本文详细解析了AXI总线的关键特性,包括outstanding、out-of-order和interleaving的概念及其工作原理,并通过具体实例说明了这些特性如何应用于读写操作中。

参考https://blog.youkuaiyun.com/qwaszx523/article/details/53737276

Ordering model

​AXI的控制和数据通道分离,可以带来很多好处。地址和控制信息相对数据的相位独立,可以先发地址,然后再是数据,这样自然而然的支持显著操作,也就是 outstanding 操作。Master访问slave的时候,可以不等需要的操作完成,就发出下一个操作。这样,可以让slave在控制流的处理上流水起来,达到提速的作 用。同时对于master,也许需要对不同的地址和slave就行访问,所以可以对不同的slave 连续操作。而这样的操作,由于slave 返回数据的先后可能不按照master 发出控制的先后进行,导致出现了乱序操作(out of order )。

先看下ordering model​的几个概念:​

Outstanding

: The ability to issue multiple outstanding addresses means that masters can issue transaction addresses without waiting for earlier transactions to complete. This featurecan improve system performance because it enables parallel processing of transactions.

     

​​发出A11的addr后,在完成D11~D14的transfer之前,发出A21叫做outstanding。

Out-of-order : The ability to complete transactions out of order means that transactions to faster memory regions can complete without waiting for earlier transactions to slower memory regions. This feature can also improve system performance because it reducesthe effect of transaction latency.

地址的顺序是A11,A21,A31,而数据顺序则可能是D2?,D3?,D1?,这个过程叫做Out-of-order

Interleaving:  Write data interleaving enables a slave interface to accept interleaved write data withdifferent AWID values. The slave declares a write data interleaving depth that indicatesif the interface can accept interleaved write data from sources with different AWIDvalues.

​D11和D12之间插入D23,叫做interleaving。

简单而言,outsatanding是对地址而言,一次burst还没结束,就可以发送下一相地址。而out-of-order和interleaving则是相对于 transaction,out-of-order说的是发送transaction​和接收的cmd之间的顺序没有关系,如先接到A的cmd,再接到B的cmd,则可以先发B的data,再发A的data;interleaving指的是A的data和B的data可以交错,如A1 B1 A2 B2 B3……(同一个事务之间的不同数据要按顺序,例如不能出现A1 B2 A2 B1,)

举个例子,从master和slave两个角色分别来看:

对于AXI master,先看写操作。如果分别发出WCMD1和WCMD2两个写命令给两个不同的slave,假设这两个写命令都是四拍的数据分别记为WDATA1_0,WDATA1_1,WDATA1_2,WDATA1_3,以及WDATA2_0,WDATA2_1,WDATA2_2,WDATA2_3。如果master在自己的写数据总线上,依次发出WDATA2_0,WDATA2_1,WDATA2_2,WDATA2_3,WDATA1_0,WDATA1_1,WDATA1_2,WDATA1_3,这就叫写out of order;如果master在自己的写数据总线上,依次发出WDATA2_0,WDATA1_0,WDATA2_1,WDATA1_1,WDATA2_2,WDATA2_3,WDATA1_2,WDATA1_3,这就叫写out of order且interleave;注意,不论是out of order还是interleave,同一个命令对应的四拍数据在内部必须是顺序的,不能乱序。比如,不允许出现WDATA2_1,WDATA1_0,WDATA2_0,WDATA1_1,WDATA2_2,WDATA2_3,WDATA1_2,WDATA1_3这样的。显然,你自己设计master时,如果是写操作,你不会主动发出out of oder和interleave的操作,因为这个明显增加了复杂度且没带来master自己的效率提高。再看master读,同样发出RCMD1和RCMD2两个读命令给不同的slave,由于不同slave的响应速度不同,就可能出现RCMD2对应的读数据先返回到master的情况;再考虑到复杂系统的总线设计,master依次接收到RDATA2_0,RDATA1_0,RDATA1_1,RDATA1_2,RDATA2_1,RDATA2_2,RDATA1_3,RDATA2_3这样的数据是有可能的,这就是读的out of order且interleave。所以,对于master,不建议发出out of order与interleave的写数据,但是必须支持out of order与interleave的读操作!同理,可以分析,对于slave,必须支持out of order与interleave的写操作,不建议返回out of order与interleave的读数据。在一个系统中,interleave会明显增加设计复杂度,其实可以约定master,slave以及连接总线都不要使用interleave,(另外可以配置depth ==1,达到不支持interleaving的目的)这样可以降低复杂度,但out of order是AXI特性,这个功能必须支持。

 

在AXI4的总线规范中提到AXI4的总线特性之一:
   Support for issuing multiple outstanding addresses.

从字面理解,outstanding表示正在进行中的,未完成的意思,形象地说就是“在路上”

简单讲,如果没有outstanding,或者说outstanding能力为1,则总线Master的行为如下(AHB总线就没有outstanding能力):
1)读操作:读地址命令 -> 等待读数据返回 -> 读地址命令 -> 等待读数据返回 -> 。。。。。
2)写操作:写地址命令->写数据->等待写响应返回->写地址命令->写数据->等待写响应返回。。。。。(如果支持out-of-order,对于AXI3,写命令和写数据不一定有先后顺序且ID顺序不一定相同,AXI4因为已经没有WID信号,所以写数据的顺序要和写地址的顺序一样)AXI4.0是没有WID信号的,因为写通道不支持乱序写,其实对于写来说,乱序会变得设计复杂而且意义不大。

而如果outstanding能力为N>1的话,则:
1)读操作:可以连续发N个读地址命令,这期间如果读数据没有返回,则需要等待读数据返回,如果有读数据返回,则返回了几个,那么仍然可以接着发几个。也就是说,“在路上” 的读命令(或者读数据)最多可以是N。多说一点,可以看出,如果数据返回得比较慢,那么IP需要等待,效率就会比较低,因此,为了提高效率,有必要提高outstanding能力,以弥补”路上“(总线)引入的延时。但是也不能无限制地发,否则有可能会引起总线拥塞,把其他IP给堵住。下图为一个outstanding读的时序图例子.


2)写操作:可以连续发出N组写地址(写数据)命令,这期间如果写响应没有返回,则必须等待写响应返回才能接着发写地址(写数据)命令,如果有写响应返回,则返回了几个,那么仍然可以接着发几组。也就是说,“在路上” 的写响应最多可以是N。
--------------------- 
作者:tbzj_2000 
来源:优快云 
原文:https://blog.youkuaiyun.com/tbzj_2000/article/details/88042890 
版权声明:本文为博主原创文章,转载请附上博文链接!

<think>嗯,用户这次的问题是关于AXI协议中的OSD机制,具体是interleavingout-of-order的理解与验证方法。从对话历史看,用户之前关注过MMU验证难点,现在转向总线协议层面,可能是SoC验证工程师或数字IC设计人员,需要深入理解AXI高级特性。 用户引用的三段材料很有价值:第一段说明乱序的本质是命令与数据响应顺序解耦;第二段指出交织比乱序更复杂且AXI4已移除写交织;第三段展示实际芯片配置案例。这些恰好构成理论-限制-实践的知识链。 关于out-of-order机制,核心在于解耦命令顺序与数据响应顺序。比如master先发A请求后发B请求,slave可以先返回B数据再返回A数据,通过ID标签区分归属。这能有效提升总线利用率,但验证时需重点检查ID匹配和顺序约束(如同ID顺序不变)。 interleaving机制更激进,它允许单个ID的数据包被打断插入其他ID数据。引用[2]提到AXI4仅保留读交织且实际支持有限,因为交织需要复杂的调度逻辑。验证时特别要注意数据包边界是否被破坏,以及中断后能否正确恢复上下文。 验证方法上,建议分层实施:基础功能测试定向用例覆盖握手协议;随机测试用约束随机生成ID序列和传输间隔;压力测试制造背靠背请求和极端延迟场景。覆盖率要监控ID组合、包长变化点、缓冲水位等关键节点。 用户可能隐含的需求是如何平衡验证完备性与复杂度。引用[2]提到支持这些特性会让代码量激增,实际项目需评估必要性。可以补充说明:简单外设通常固定ID实现顺序传输,而DMA等高性能模块才需要完整OSD支持。 最后生成的问题延伸了OSD的应用场景和调试技巧,这些都是验证工程师日常遇到的痛点。特别是问题3关于波形分析技巧,实际调试中定位乱序问题往往耗费大量时间。</think>以下是针对 AXI OSD(Out-of-Order, Interleaving)机制及其验证方法的系统解析: --- ### **一、核心机制解析** #### 1. **Out-of-Order (乱序传输)** - **本质**:解耦命令与数据响应的顺序关系 - 发送端顺序:Master 依次发送命令 A、B - 响应端顺序:Slave 可先返回 B 的数据,再返回 A 的数据 - **依赖 ID 标识**: 通过 `AWID/ARID` 区分不同事务(Transaction),同 ID 的数据必须按顺序传输,不同 ID 的数据可乱序[^1]。 ```verilog // 示例:两个不同 ID 的写事务 send_cmd(A, ID=1); // 先发送命令 A send_cmd(B, ID=2); // 再发送命令 B // Slave 可能返回: send_data(B, ID=2); // 先返回 B 的数据 send_data(A, ID=1); // 再返回 A 的数据 ``` #### 2. **Interleaving (交织传输)** - **本质**:单事务内数据包可被其他事务中断插入 - 例如:ID=1 的 Burst 传输过程中,插入 ID=2 的单拍数据 - **AXI4 限制**: - **仅读操作支持交织**(AXI4 移除写交织)[^2] - 需 Master/Slave 明确支持该特性 #### 3. **性能与复杂度权衡** | **机制** | 性能增益 | 实现复杂度 | 典型应用场景 | |------------------|------------------------|--------------------------------|----------------------| | Out-of-Order | 高(减少总线空闲) | 中等(需 ID 管理) | DMA、多核访问 | | Interleaving | 极高(消除气泡周期) | 高(需数据包拆解与重组) | 高带宽读操作 | > 💡 **关键设计约束**: > - Interleaving 要求 Slave 具备多事务并发处理能力 > - 乱序需保证同 ID 数据顺序性(`WSTRB` 对齐等)[^2] --- ### **二、验证方法** #### 1. **定向测试(Corner Cases)** - **乱序场景**: - 同 ID 乱序尝试 → 检测是否被阻止 - 不同 ID 数据返回顺序逆序 → 检查数据一致性 - **交织场景**: - 突发传输中插入高优先级事务 → 验证包完整性 - 背靠背(Back-to-Back)交织请求 → 检查时序冲突 #### 2. **随机约束测试** ```systemverilog class axi_transaction; rand bit [3:0] id; // 随机 ID rand int delay; // 请求间延迟 constraint valid_delay { delay inside {[0:5]}; } endclass // 生成乱序序列 task generate_oo_order; axi_transaction tr1, tr2; tr1 = new(); tr1.randomize(); tr2 = new(); tr2.randomize(); send(tr1); #tr1.delay send(tr2); // 可变延迟注入 endtask ``` #### 3. **覆盖率模型** | **覆盖点类型** | 监测目标 | 示例指标 | |--------------------|-----------------------------------|------------------------------| | **事务顺序** | 命令/响应顺序组合 | 不同 ID 响应逆序比例 | | **交织深度** | 单事务被中断次数 | Burst 长度 vs 中断次数 | | **边界条件** | FIFO 满/空、超时 | Buffer 溢出触发率 | #### 4. **断言检查(SVA)** ```systemverilog // 同 ID 数据顺序性断言 property data_order; @(posedge clk) (valid && (id == prev_id)) |-> (data_seq == prev_seq + 1); endproperty ``` #### 5. **硬件加速验证** - 使用 FPGA 原型或 Emulator 进行长序列压力测试 - 注入极端场景: - 100% 总线利用率下的乱序 - 最大支持 ID 数并发请求 --- ### **三、调试与优化建议** 1. **波形分析重点**: - 关注 `ID` 标签与 `LAST` 信号匹配性 - 检查交织场景下 `ARLEN` 与实际数据包长度 2. **性能瓶颈定位**: - 统计总线空闲周期(Idle Cycles) - 分析交织中断导致的重新仲裁开销 3. **面积优化**: - 非高性能场景可关闭 Interleaving 以节省逻辑[^2] --- ### **四、工程实践参考** 在 Exynos 4 芯片中,通过 MIU(Memory Interconnect Unit)配置交织参数: ```c // 引用自 Linux 内核源码[^3] writel(APB_SFR_INTERLEAVE_CONF_VAL, EXYNOS4_MIU_BASE + APB_SFR_INTERLEAVE_CONF_OFFSET); ``` 此处 `Interleave_bit0` 和 `Interleave_bit1` 控制地址交织策略,需与 DDR 控制器配置匹配。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值