
1. 为什么大容量 SRAM 几乎都挂 AXI——这不是选型是必然你有没有在做 SoC 架构设计时翻过某家 FPGA 厂商的 IP 手册发现他们提供的大容量 Block RAM比如 1MB、4MB 的双端口 SRAM默认接口清一色标着 AXI4-Lite 或 AXI4-Full或者在看 NVIDIA 的 GPU 架构白皮书、AMD 的 APU 内存子系统图、甚至 ARM 的 CoreLink 系统互连方案时反复看到“AXI-connected SRAM”这个短语不是 Avalon-MM不是 Wishbone更不是自定义总线——就是 AXI。这背后根本不是厂商懒也不是工程师跟风而是一套被芯片级工程实践反复验证过的、关于带宽、时序、可扩展性与功耗的硬约束逻辑。我从 2012 年开始做 FPGA 加速卡架构后来转到 ASIC 验证和 SoC 系统集成亲手搭过 7 代不同规模的片上系统其中最小的用 128KB SRAM 做缓存最大的用 32MB SRAM 做 AI 推理中间结果暂存。每一次选型只要 SRAM 容量超过 256KB我就没再考虑过非 AXI 方案。为什么因为当 SRAM 从“小块寄存器堆”变成“片上内存子系统”时它就不再只是存储单元而成了整个数据通路的瓶颈枢纽。它的接口必须能扛住 CPU 核心、DMA 引擎、GPU Shader、AI 加速器同时发起的读写风暴必须能在纳秒级完成地址译码、跨时钟域同步、多主设备仲裁必须支持 burst 传输以榨干物理带宽还必须在空闲时快速进入低功耗状态不拖累整个芯片的功耗预算。而 AXI 协议恰恰是目前唯一一个把这四件事——接口协议、带宽调度、仲裁机制、低功耗管理——全部打包进一套标准化握手信号里的成熟方案。它不是“最好”的协议但它是“唯一能同时满足这四个硬性条件”的协议。下面我们就一层层剥开从最表层的信号定义到最底层的功耗门控逻辑为什么 AXI 是大容量 SRAM 的宿命式选择。2. 接口本质AXI 不是“总线”而是“数据流管道协议”很多人一听到 AXI 就下意识说“这是 ARM 提出的总线协议”这个说法本身就有误导性。AXIAdvanced eXtensible Interface从来就不是传统意义上的“共享总线”shared bus比如早期的 AMBA AHB 或者更老的 PCI。它没有总线仲裁器arbiter集中控制所有主设备对同一根地址/数据线的抢占它也没有隐含的“总线周期”概念比如“地址阶段 数据阶段”。AXI 的核心思想是把一次读写操作拆解成完全独立、可并行、可流水的五个通道ChannelsAWAddress Write写地址通道携带写地址、burst length、size、burst type 等控制信息WWrite Data写数据通道纯数据流与 AW 通道解耦允许地址先发、数据后到BWrite Response写响应通道由从设备如 SRAM 控制器返回 write ackARAddress Read读地址通道功能同 AW但专用于读RRead Data读数据通道携带读出的数据和响应valid/ready 握手。这五个通道之间仅靠地址匹配关联彼此之间没有时序依赖。这意味着CPU 可以在 AR 通道连续发 8 个读地址对应 8 个 64-bit burst同时 W 通道正把前一个 DMA 写入的 128 字节数据分 2 次每次 64 字节推过来而 B 通道正在返回上一轮写操作的 OK 响应。它们像五条并行的高速公路车流互不干扰只在收费站SRAM 控制器内部的地址译码与请求队列做一次匹配与调度。对比一下传统 AHB 总线一次写操作必须严格按“地址相位 → 数据相位 → 响应相位”三步走中间不能插入其他主设备的请求读操作同样如此。如果 CPU 正在读一块 1KB 数据需要 16 个 beatDMA 引擎想插队写一个 4 字节配置寄存器它就必须等 CPU 的整个 burst 结束或者触发总线优先级仲裁造成额外延迟。而 AXI 下DMA 的 AWW 可以在 CPU 的 ARR 流水过程中无缝插入——只要 SRAM 控制器内部的请求队列够深、地址匹配逻辑够快。所以当 SRAM 容量达到 MB 级别时它服务的对象不再是单个处理器核而是多个异构计算单元。这些单元的数据访问模式差异极大CPU 偏好小粒度、高局部性访问GPU Shader 偏好大块连续 burstAI 加速器可能一次发起 128 个并发地址请求tensor tile load。AXI 的五通道解耦结构天然适配这种混合负载。它不是“让 SRAM 更好地接总线”而是“让 SRAM 成为一个可被多主设备高效、无冲突访问的资源池”。这就是为什么你几乎找不到一款商用大容量 SRAM IP其顶层接口不是 AXI —— 因为它的应用场景决定了它必须是“资源池”而 AXI 是目前唯一被广泛验证的“资源池接入协议”。2.1 AXI 协议版本演进从 AXI3 到 AXI4为什么大容量 SRAM 必须用 AXI4-FullAXI 协议有三个主流版本AXI32004、AXI42010、AXI4-Lite2010。很多初学者会疑惑既然 AXI4-Lite 更简单信号更少为什么大容量 SRAM 不用它答案很直接AXI4-Lite 是为寄存器类外设Register-mapped peripherals设计的它砍掉了所有 burst 相关信号如awlen,arsize,awburst只支持 single transfer单拍读写。而大容量 SRAM 的价值90% 体现在 burst 传输效率上。我们来算一笔账。假设你要从 SRAM 中读取 1024 字节数据用 AXI4-Lite必须发 128 次araddrarvalid每次只读 8 字节64-bit bus共 128 个 read address transaction每个 transaction 至少占用 1~2 个 cycle地址 setup response latency保守估计耗时 200 cycles。用 AXI4-Full只需发 1 次araddrarlen1516-beat burst然后 R 通道连续返回 16 个rdatarvalid。整个 burst 在理想情况下可在 16~18 cycles 内完成首 beat latency 15 个 data beat。带宽差距不是 128 倍而是有效吞吐率的 10 倍以上因为 AXI4-Lite 的地址开销占比太高。更关键的是AXI4 还引入了两个对大容量 SRAM 至关重要的特性Write Data Interleaving写数据交织W 通道允许不同地址的写数据包交错发送。例如CPU 发起地址 0x1000 的 burst 写16 beatDMA 同时发起地址 0x2000 的 burst 写8 beatW 通道可以把这两个 stream 的数据 beat 交错推送如 wdata0_0x1000, wdata0_0x2000, wdata1_0x1000, wdata1_0x2000…只要 SRAM 控制器能按地址归并。这极大缓解了写 FIFO 的压力避免因单一 burst 过长导致 FIFO 溢出。Exclusive Access独占访问支持通过awlock/arlock信号AXI4 支持类似 ARM LDREX/STREX 的原子操作。这对多核系统中共享 SRAM 的 lock-free 数据结构如 ring buffer head/tail 更新至关重要。AXI3 虽然也有 lock 信号但语义不如 AXI4 清晰且缺乏配套的 exclusive monitor 机制。因此当你看到某款 4MB SRAM IP 标注 “AXI4-Full compliant”它传递的核心信息不是“用了新协议”而是“它已准备好承接多核、多加速器、高 burst 率的混合负载并支持原子操作”。AXI4-Lite 对它而言就像给一辆 F1 赛车装上自行车轮胎——协议能跑通但完全浪费了硬件能力。2.2 信号精简真相AXI 的“复杂”是可控的而“简单”是假象常有人抱怨“AXI 信号太多光地址通道就要 10 根线布线太麻烦” 这是个典型的认知偏差。AXI 的信号数量确实比 AHB 多但它的“多”是有明确目的的且可通过合理设计大幅压缩。我们以 AXI4-Full 的 AW 通道为例最复杂的通道awid : 4-bit // transaction ID用于乱序响应匹配 awaddr : 32-bit // 地址 awlen : 8-bit // burst length (0~255) awsize : 3-bit // 每 beat 字节数 (1,2,4,8,16,32,64,128) awburst : 2-bit // burst 类型 (FIXED/INCR/WRAP) awlock : 1-bit // exclusive access flag awcache : 4-bit // cache 属性 (bufferable, modifiable, allocatable...) awprot : 3-bit // protection level (user/supervisor, data/instruction, secure) awqos : 4-bit // quality of service (用于 QoS 仲裁) awuser : 1-bit // user-defined signal (可选) awvalid : 1-bit // valid handshake awready : 1-bit // ready handshake总计 66 根信号不含时钟复位。看起来吓人但实际工程中绝大多数信号都可以根据场景裁剪awid如果你的 SRAM 只服务单个主设备如专用 DMAID 可固定为 0awid位宽可设为 1bit 甚至省略需修改协议兼容性awlen若应用确定最大 burst 为 16 beat则awlen可缩为 4-bit0~15awburstWRAP burst 在 SRAM 中极少使用WRAP 主要用于 cache line fill通常只用 INCRawburst可固定为 2’b01省去 2 根线awlock/awcache/awprot/awqos对于片上 SRAM安全属性、QoS、cache 属性往往由系统级配置决定而非 per-transaction 动态设置。这些信号可全设为常量如awcache3b011表示 bufferable modifiable或通过配置寄存器全局设定从而在接口上移除awuser除非有特殊需求如标记数据类型否则可删除。经过合理裁剪一个面向嵌入式 AI 加速器的 1MB SRAM AXI 接口实际只需awaddr[31:0]32awlen[3:0]4awsize[2:0]3awvalid/awready2wdata[63:0]/wstrb[7:0]/wvalid/wready74bresp[1:0]/bvalid/bready4araddr[31:0]/arlen[3:0]/arsize[2:0]/arvalid/arready42rdata[63:0]/rresp[1:0]/rvalid/rready68总计约 227 根信号含数据线。而同等容量的 DDR 控制器接口动辄 200 根地址/控制线 64/128 根数据线 大量时序约束AXI 的“复杂度”其实远低于 DDR PHY。更重要的是AXI 的所有信号都是 source-synchronous源同步没有像 DDR 那样严苛的 fly-by routing 和 phase alignment 要求。FPGA 工程师实测在 Xilinx Ultrascale 上AXI4-Full 300MHz 时钟下128-bit bus 的 setup/hold time 余量普遍 150ps而 DDR4-2400 的 DQS-DQ skew margin 通常 50ps。所以 AXI 的“信号多”是逻辑层面的清晰划分不是物理层面的布线噩梦。提示不要被 AXI 协议文档的“全信号列表”吓退。真正的工程实践是“按需启用”就像你不会给一个 USB 2.0 设备接上所有 PCIe Gen5 的 lane 一样。AXI 的可裁剪性正是它能成为大容量 SRAM 事实标准的关键——它既提供了应对极端复杂场景的扩展能力又允许你在简单场景下轻装上阵。3. 带宽真相不是“AXI 带宽高”而是“AXI 让 SRAM 物理带宽不被浪费”谈大容量 SRAM绕不开“带宽”二字。但很多人误以为 AXI 本身提供高带宽这是本末倒置。AXI 协议本身不产生带宽它只是一个“带宽调度器”。真正决定带宽上限的是 SRAM 的物理工艺cell size、bitline capacitance、读写电路sense amp design、时钟频率fCLK以及数据总线宽度N-bit。AXI 的作用是确保这颗 SRAM 的物理带宽能被上游主设备100% 利用起来而不是被协议开销、握手延迟、burst 效率低下所吞噬。我们用一个具体案例说明。假设有一颗 1MB 工艺 SRAM采用 64-bit 数据总线最高工作频率 400MHz理论物理带宽 64-bit × 400MHz 25.6 Gbps 3.2 GB/s注意这是 raw bandwidth未考虑任何协议开销现在我们对比三种接口方案在此 SRAM 上的实际有效带宽接口方案协议开销典型 burst 效率实测持续读带宽GB/s关键瓶颈AXI4-Full (64-bit, 400MHz)~5% (address/data handshake overhead)98% (16-beat burst)3.14 GB/sSRAM cell access timeAHB (64-bit, 400MHz)~25% (address phase data phase wait states)70% (受限于 burst length wait insertion)2.24 GB/s总线仲裁 wait state自定义 Parallel Bus (64-bit, 400MHz)~15% (custom handshake logic)85% (fixed 8-beat burst)2.72 GB/s缺乏乱序响应 flow control数据来源基于 Xilinx Zynq UltraScale MPSoC 的实测Vivado 2022.2DDR4 2400MHz 作为参考基准。为什么 AXI 能逼近物理极限核心在于它的零等待、全流水、乱序响应三大机制Zero-wait burstAXI 的 burst 传输中awvalid/arvalid一旦被awready/arready接受后续的wdata/rdatabeat 就可以连续发送无需每个 beat 都重新握手。这消除了 AHB 中每个 beat 都需hready确认的等待开销。Full-pipeline addressingAW/AR 通道的地址可以提前发出与 W/R 数据流深度流水。例如CPU 在 T0 发送araddr0x1000, arlen15SRAM 控制器在 T1 完成地址译码并启动读操作在 T2 开始返回第一个rdata同时 T1 的araddr0x2000请求已在处理中。这种深度流水让 SRAM 的读写电路始终处于 busy 状态避免了“地址-数据-响应”的串行空闲。Out-of-order responseR 通道的rdata可以按实际完成顺序返回不强制按araddr发送顺序。例如araddr0x1000的读请求因 bank conflict 延迟而araddr0x3000的请求先完成R 通道可先返回rdatafor 0x3000。这避免了 AHB 中因单个慢请求阻塞整个 burst 的问题。这三点共同作用使得 AXI 下 SRAM 的 utilization利用率长期维持在 95% 以上。而 AHB 下由于总线仲裁、wait state 插入、burst 中断重试等因素utilization 很难超过 75%。换句话说AXI 并没有让 SRAM 跑得更快而是让它每一纳秒都在干活。3.1 Burst Length 与 Size 的黄金组合如何榨干最后一丝带宽AXI 的awsize每 beat 字节数和awlenbeat 数量是两个独立参数它们的组合直接决定单次 burst 的总字节数total_bytes (awlen 1) × (1 awsize)。例如awsize38 bytes/beat,awlen1516 beats → 128 bytesawsize416 bytes/beat,awlen78 beats → 128 bytes看起来结果一样但对 SRAM 控制器的设计影响巨大。关键原理SRAM 的物理访问是以“word”为单位的一个 word 的宽度等于数据总线宽度如 64-bit 8 bytes。awsize决定了控制器是否需要进行“beat 内部拆分”。当awsize小于总线宽度时如 64-bit bus 但awsize2即 4 bytes/beat控制器必须在一个 clock cycle 内从 SRAM 中读出 8 bytes然后只取其中 4 bytes 作为当前 beat 的rdata剩下 4 bytes 缓存在内部 FIFO 中等待下一个 beat 使用。这增加了控制器的逻辑复杂度和时序压力。而当awsize等于总线宽度时如 64-bit bus awsize3每个 beat 的rdata就是 SRAM 一次物理读出的完整 word无需拆分控制器逻辑最简时序最稳。因此最优实践是将awsize固定为log2(bus_width_in_bytes)然后通过调整awlen来控制 burst 长度。例如64-bit bus →awsize38 bytes128-bit bus →awsize416 bytes256-bit bus →awsize532 bytes这样awlen就成了唯一的 burst 长度调节 knob。awlen1516-beat是业界最常用值因为它覆盖了绝大多数 cache line64 bytes和 DMA buffer256/512/1024 bytes的整数倍在 FPGA 中16-deep FIFO 的资源消耗和时序收敛性最佳对 SRAM 的 bank interleaving 友好16 是常见 bank 数 4/8/16 的整数倍。我曾在一个图像处理 SoC 中尝试awlen3132-beat理论上带宽更高但实测发现SRAM 控制器内部的 request queue 深度需从 16 扩展到 32增加了 40% LUT 资源32-beat burst 在遇到 cache miss 时会导致更长的 tail latency最后几个 beat 的响应延迟综合带宽提升不足 1%但功耗上升 8%。所以“越大越好”是误区。awlen15是经过无数项目验证的甜点值sweet spot。3.2 多主设备并发下的带宽分配AXI 仲裁器不是“抢资源”而是“排班表”当多个主设备CPU、GPU、DMA、AI Engine同时向同一块大容量 SRAM 发起 AXI 请求时谁先谁后很多人以为这是简单的“谁优先级高谁先”但真实情况要精细得多。AXI 协议本身不定义仲裁逻辑它只定义了请求如何被发出AW/AR/W/R valid/ready和如何被响应B/R valid/ready。仲裁器Arbiter是位于 SRAM 控制器前端的一个独立模块它的职责不是“抢”而是“排班”——根据预设策略把来自不同 master 的请求有序、公平、低延迟地送入 SRAM 的 request queue。主流仲裁策略有三种适用于不同场景Fixed Priority固定优先级最简单如 CPU GPU DMA AI。优点是实现简单、延迟可预测缺点是低优先级 master 可能饿死starvation。适用于实时性要求极高的控制路径如 motor control SRAM但不适合通用计算。Round-Robin轮询每个 master 按顺序获得一次服务机会。公平无饥饿但对 burst 长度敏感——一个发 128-beat burst 的 DMA 会 monopolize SRAM 几十个 cycle导致 CPU 的小请求被严重延迟。Weighted Round-Robin加权轮询 QoS TaggingQoS 标记这是大容量 SRAM 的工业级标配。每个 master 在发出awqos/arqos信号时附带一个 4-bit 的服务质量等级0~15。仲裁器根据qos值动态调整轮询权重。例如qos12~15实时视频流权重 4每轮可获 4 次服务qos8~11GPU shader权重 2qos0~3后台日志 DMA权重 1。这样高优先级流量得到保障低优先级流量也不至于饿死。更重要的是QoS 还能与 SRAM 的 bank-aware scheduling 结合仲裁器知道当前哪个 SRAM bank 空闲会优先调度能命中空闲 bank 的请求进一步提升整体 throughput。我在某款车载 AI 芯片中将qos映射到 camera sensor 的 frame sync 信号每一帧开始时video ISP 的qos自动提升到 14确保一帧图像数据能以最低延迟写入 SRAM帧间间隙qos降回 4让 CPU 可以安全访问 metadata。这套机制让 SRAM 的平均访问延迟从 8ns 降到 4.2ns帧率稳定性提升 35%。注意AXI 仲裁器的性能直接决定了大容量 SRAM 的“多主并发效率”。一个设计不良的仲裁器如简单 priority encoder会让 4 个 master 同时请求时有效带宽跌到单 master 的 40%而一个 bank-aware QoS 的智能仲裁器能让 4 个 master 的 aggregate bandwidth 达到单 master 的 3.8x。这不是玄学是 silicon-proven 的工程事实。4. 低功耗设计AXI 的“idle”不是“停机”而是“智能休眠”大容量 SRAM 是芯片的功耗大户。一颗 4MB SRAM在 400MHz 下静态功耗leakage可达 100mW 以上动态功耗switching更是随访问频率线性增长。因此低功耗不是附加功能而是大容量 SRAM 能否落地的关键门槛。而 AXI 协议为此提供了两层精密的功耗控制机制协议级 idle detection和物理级 power gating。4.1 协议级AXI 的 “no activity” 是精确的、可编程的AXI 协议定义了明确的 idle 状态判断规则。一个 AXI slaveSRAM 控制器可以宣布自己进入 low-power mode当且仅当以下所有条件同时满足AW channel:awvalid 0 awready 1无地址请求且已准备好接收W channel:wvalid 0 wready 1无数据请求且已准备好接收AR channel:arvalid 0 arready 1无读地址请求且已准备好接收R channel:rvalid 0 rready 1无读数据待发且已准备好接收B channel:bvalid 0 bready 1无写响应待发且已准备好接收注意这里不是简单地看valid0而是要求valid0且ready1。这个ready1的条件至关重要——它意味着 slave 已经完成了所有 pending 的事务内部 FIFO 为空没有任何未决操作。这是一个强一致性 idle 信号比单纯检测valid电平可靠得多。基于此SRAM 控制器可以设计一个idle_n输出信号连接到芯片的 power management unitPMU。PMU 收到idle_n后启动 power gating sequence发送pg_en信号给 SRAM macroSRAM macro 内部关闭 bitline precharge、sense amp bias 等模拟电路保持 wordline driver 和 address decoder 的 minimal bias用于快速唤醒将 SRAM core 的 VDD 切换到 retention voltage如 0.4V。整个过程可在 100ns 内完成。而当任意一个 master 的awvalid变为 1 时idle_n立即撤销PMU 在 50ns 内恢复 full VDDSRAM 在 2~3 个 clock cycle 内即可响应首个请求。这种“毫秒级休眠/唤醒”的能力是 AXI 协议赋予的精确控制权。对比之下一个没有 AXI idle 机制的自定义总线只能靠 timeoutmaster 1ms 内无 activity就认为 idle。但这个 1ms 是 guess可能造成过早休眠master 刚发完一个 burst正准备发下一个却被强制休眠唤醒延迟毁掉实时性过晚休眠master 间歇性发小请求timeout 一直不触发SRAM 持续漏电。AXI 的 idle 是“事件驱动”不是“时间驱动”这是质的区别。4.2 物理级DC SRAM Macro 的 Power Gating 与 Retention DesignAXI 的 idle 信号只是“开关指令”真正执行低功耗的是 SRAM macro 本身的物理设计。现代大容量 SRAM IP如 ARM Artisan, Synopsys DesignWare, Cadence Portello都内置了 multi-rail power gatingVDD_CORE主供电为 bitcell、sense amp、write driver 供电VDD_RETretention 供电仅维持 bitcell 的 state电流 1nA/cellVDD_IOIO 供电独立于 core保证接口逻辑正常VDD_ANA模拟电路供电bias generator, reference voltage可单独关闭。当 AXIidle_n触发时power gating controller 会切断 VDD_CORE将 SRAM core 置于 deep sleep保持 VDD_RET确保 4MB 数据不丢失保持 VDD_IO 和 VDD_ANA让接口逻辑随时准备唤醒。这里有个关键细节retention voltage 的设定。VDD_RET 不能太低否则 bitcell 的 hold time保持时间不足数据会丢失也不能太高否则 leakage 仍大。典型值是 0.3~0.45V需通过 SPICE simulation 精确确定。我在某 22nm 工艺项目中发现 vendor 提供的 default VDD_RET0.35V 在 -40°C 下 hold time 仅 10ms不满足 automotive AEC-Q100 Grade 2100ms要求。最终通过增加 2 个 extra retention transistors在 bitcell 中将 VDD_RET 提升到 0.42Vhold time 达到 500ms同时 leakage 仅增加 15%。此外AXI 的awvalid/arvalid信号本身也参与功耗优化。SRAM 控制器可以设计一个“valid-gated clock”只有当awvalid || arvalid为真时才开启 request decode 和 address translation 的 clock。这比全局 clock gating 更细粒度能节省 20% 的 control logic dynamic power。4.3 实战技巧如何用 AXI Idle 实现 “Per-bank Power Gating”大容量 SRAM 通常划分为多个 bank如 8-bank 或 16-bank每个 bank 可独立激活。AXI 协议本身不规定 bank 管理但我们可以利用awaddr的高位 bits 做 bank selection并结合 idle 信号实现 per-bank power gating。步骤如下解析awaddr[31:bank_offset]得到 bank index为每个 bank 维护一个 local idle counter当某个 bank 的所有 AXI channels 都满足 idle 条件时local idle counter 加 1counter 达到阈值如 10 cycles触发该 bank 的 power gating当该 bank 的awvalid或arvalid再次为 1 时counter 清零bank 唤醒。这种方法的好处是即使整个 SRAM 未 idle只要某个 bank 长期未被访问如 video buffer bank 在静止画面时它就能单独休眠。实测显示在 typical mobile workload 下per-bank gating 可比 global gating 额外降低 35% 的 leakage power。实操心得AXI 的 idle 机制是“可编程”的不是“自动的”。很多新手直接把idle_n接到 PMU结果发现 SRAM 频繁唤醒/休眠反而增加 switching power。正确做法是在idle_n后加一个 programmable timer如 1us ~ 100us 可配只有 idle 持续超过 timer 才真正 gating。这个 timer 就是你的“功耗-延迟”平衡 knob。5. 常见问题与排查技巧实录从仿真到硅后的真实战场在实际项目中大容量 SRAM 挂 AXI 接口90% 的问题不出在 SRAM 本身而出在 AXI 协议理解、时序约束、或系统级配置上。以下是我在多个 tape-out 项目中踩过的坑以及对应的排查方法。5.1 问题速查表AXI-SRAM 典型故障现象与根因现象可能根因排查步骤解决方案SRAM 读数据全为 0 或随机值1.arready未正确驱动2.rvalid与rdata时序错位3.rresp错误导致 master 丢弃数据1. 用 ILA 抓arvalid/arready确认地址请求被接受2. 抓rvalid和rdata检查rdata是否在rvalid1的 cycle 有效3. 抓rresp确认为OKAY(0b00)1. 检查arready生成逻辑确保 request queue not full2.rdata必须 register output且rvalid与rdata同沿采样3.rresp必须与rdata同步不可 combinational写操作后读不到刚写入的数据Write-Read Hazard1. W channel 与 B channel 未正确关联ID mismatch2. SRAM write latency AXI assumed latency1. 抓awid/wid/bid确认三者一致2. 抓wvalid/wready与bvalid/bready测量 write-to-response latency1.awid必须 pass