资讯详情

资讯详情

建站行业动态 · 设计趋势 · 数字化升级干货

深入解析AXI事务属性:缓存、保护与QoS配置实战指南

深入解析AXI事务属性:缓存、保护与QoS配置实战指南 1. 项目概述从信号到语义理解AXI事务属性的核心价值在数字芯片设计的互联世界里AMBA AXI协议无疑是那个最耀眼的明星。无论是做SoC集成的架构师还是写IP核的RTL工程师几乎每天都在和AXI打交道。我们常常把精力花在理解握手信号、突发传输、读写通道分离这些“硬核”机制上却容易忽略一个同样至关重要的“软”层面——事务属性Transaction Attributes。这个标题“AXI—事务属性1”看似平淡但它指向的恰恰是决定系统行为、影响性能与正确性的深层语义规则。我见过不少项目接口时序都对数据也能传但一上复杂场景就出各种稀奇古怪的问题比如缓存一致性出错、访问权限混乱或者性能远低于预期追根溯源往往就是事务属性没配置对或者根本没理解透。简单来说AXI事务属性是一组附加在地址通道上的信号它们不直接参与数据的物理搬运而是告诉互联系统和从设备“这个传输请求是谁发起的”、“它想怎么用这个数据”、“系统应该以何种策略来处理它”。你可以把它想象成快递单上的“备注信息”收发货地址和物品信息对应AXI的地址和数据确保了物品能送到而“易碎品”、“勿压”、“到付”这些备注对应事务属性则决定了运输途中应该被如何对待最终影响到物品能否完好、高效、合规地送达。对于初学者可能会觉得这些属性信号如ARCACHE,AWCACHE,ARPROT,AWPROT等是可选的随便给个默认值就行。但事实上在稍微复杂一点的系统里比如多核处理器共享内存、带硬件加速器的异构计算平台事务属性的正确配置是功能正确的基石也是性能优化的关键杠杆。这篇文章我就结合自己踩过的坑和调优的经验把AXI事务属性这个“软”规则讲透。我们会从最根本的需求出发拆解每一类属性的设计意图、编码含义以及对系统行为的实际影响。无论你是正在学习AXI的新手还是希望深入优化系统性能的老手理解这些属性都能让你对芯片内部的数据流有更本质的把握。2. 事务属性整体设计与核心思路拆解2.1 为什么需要事务属性—— 超越物理连接的信息维度AXI协议定义了一个高效、高性能的互联结构但如果我们把它仅仅看作一个数据管道那就大大低估了它的能力。在一个典型的SoC中可能有多个发起者Masters如CPU、DMA、GPU访问多个目标Slaves如DDR内存、片上SRAM、外设寄存器。这些访问的目的千差万别CPU取指令希望预取对性能敏感但数据不会被修改。CPU写数据需要确保写入及时生效可能涉及缓存行分配与回写。DMA搬运数据通常是大量的顺序数据流关心吞吐量不关心缓存。外设配置寄存器访问必须严格按程序顺序且不能被缓存或合并。如果只用地址和数据互联网络Interconnect和从设备无法区分这些不同性质的访问只能采用一种“一刀切”的策略这必然导致效率低下或功能错误。事务属性的引入就是为了给每个传输请求打上丰富的“语义标签”让系统能够智能地处理它们。从设计思路上看AXI事务属性主要回答了以下几个关键问题如何缓存Cacheability这个访问的数据可以被缓存吗缓存策略是什么写通、写回、写分配这直接关系到系统的一致性和性能。如何分配Allocation当发生缓存未命中时是否需要分配新的缓存行这影响内存带宽的利用率。访问的权限与安全Protection这是一个安全的访问还是非安全的是特权指令访问还是用户级访问是数据访问还是指令访问这关系到系统的安全架构和内存保护单元MPU/MMU的行为。其他优化提示比如这个访问是设备类型Device的还是普通内存Normal Memory的这决定了访问是否可以被合并、提前应答或乱序执行。因此事务属性的配置绝不是一个简单的“赋值”操作而是需要设计者根据发起者访问的真实意图、目标内存区域的特性以及整个系统的架构要求进行深思熟虑的“声明”。2.2 事务属性信号组概览与关联性分析AXI协议中事务属性主要通过读地址通道AR和写地址通道AW上的一组信号来传递。我们需要像熟悉握手信号一样熟悉它们。主要包含以下几组信号组信号名读/写宽度核心作用关联模块缓存属性ARCACHE[3:0]/AWCACHE[3:0]4-bit定义内存类型、缓存策略、分配策略缓存控制器、互联、内存控制器保护属性ARPROT[2:0]/AWPROT[2:0]3-bit定义安全等级、访问权限、操作类型安全控制器、MPU/MMU、TrustZone用户自定义属性ARUSER/AWUSER可变传递设计特定的扩展信息如QoS、VMID自定义互联逻辑、监控模块其他ARQOS[3:0]/AWQOS[3:0]4-bit服务质量指示事务优先级AXI4新增仲裁器、服务质量控制器其他ARREGION[3:0]/AWREGION[3:0]4-bit区域标识用于单个物理接口复用多个逻辑接口互联、地址解码器注意ARQOS和ARREGION在AXI4中才成为强制信号在AXI3中是可选的。但现代设计普遍基于AXI4因此我们需要给予它们同等的重视。ARUSER/AWUSER的宽度和含义完全由设计自定义提供了极大的灵活性。这几组属性并非孤立工作而是相互关联、共同作用的。例如一个来自非安全世界AxPROT[0]1的写操作即使其缓存属性配置为可缓存的安全内存控制器也可能拒绝该访问。再比如一个标记为设备类型AxCACHE中定义的访问其AxQOS优先级提示可能会被互联忽略因为设备访问通常要求严格有序。理解这种关联性是正确配置属性的前提。3. 核心细节解析缓存属性Cache Attributes深度剖析3.1 内存类型Memory Type的基石Device vs NormalAxCACHE[3:0]的四个比特位中最高位AxCACHE[3]有时记为Bufferable位但更基础的是定义内存类型与其他位结合首先定义了目标内存区域是设备类型Device还是普通内存类型Normal。这是所有缓存策略讨论的起点理解错误会导致系统根本无法工作。设备类型Device对应外设寄存器、FIFO、硬件状态寄存器等。这类访问有严格的副作用Side Effects。读取一个状态寄存器可能清除其中的中断标志位向一个FIFO写数据是推进队列。因此系统必须保证访问次数准确不能因为性能优化而合并或拆分访问。读一次就必须发生一次物理读操作。访问顺序严格必须严格按照程序顺序执行不能乱序。写操作及时生效通常采用“写直达Write-Through”策略即写请求必须完成对最终设备的访问才算结束不能只写在中间缓冲里。 在AxCACHE编码中当AxCACHE[1]为0时表示Device类型。Device类型下AxCACHE[0]表示是否可缓冲BufferableAxCACHE[2]表示是否允许乱序Modifiable实际上对于Device通常不允许乱序该位有特殊解释。普通内存类型Normal对应DRAM、SRAM等主存。这类访问没有副作用多次读取同一地址返回相同数据写入数据只是改变存储内容。因此系统可以对其进行大幅度的性能优化访问合并多个相邻的访问可以被合并成一个更大的突发传输。预取可以提前读取后续可能用到的数据。缓存数据可以被缓存在更快的存储层次如Cache中。写缓冲与合并写操作可以先进入写缓冲再批量写入内存。 在AxCACHE编码中当AxCACHE[1]为1时表示Normal类型。此时AxCACHE[0],[2],[3]位共同定义了具体的缓存和分配策略。实操心得在给一个IP核设计AXI接口时首先要问自己我这个IP访问的是什么如果是配置寄存器、状态寄存器必须设置为Device类型例如AxCACHE4b0010表示Non-bufferable Device。如果是访问一片共享的DDR内存区域则通常设置为Normal类型。这是最容易出错的第一步一旦设错轻则性能低下重则功能异常。3.2 缓存策略与分配策略详解对于Normal类型内存AxCACHE[2:0]这三个比特位定义了具体的缓存行为。ARM架构AXI协议源自ARM的缓存模型是“写回Write-Back”和“写通Write-Through”等概念的来源。我们结合常见的编码来看AxCACHE[3:0]常用名称内存类型可缓存分配策略其他特性典型应用场景4‘b0011Non-cacheable BufferableNormal否-写操作可缓冲/合并用于共享内存区域如DMA缓冲区不需要硬件缓存一致性但允许互联进行写优化。4‘b0010Non-cacheable Non-bufferableDevice否-访问严格有序、无合并严格的外设寄存器访问。4‘b1010Device-nGnRnEDevice否-无聚集、无重排、无提前应答最严格的设备类型用于对顺序和时序极度敏感的设备。4‘b1110Device-nGnREDevice否-无聚集、无重排、允许提前写应答允许写操作在到达设备前提前应答提升写流水线效率。4‘b1011Write-Through No-AllocateNormal读可缓写直达不分配写操作直达内存读命中缓存CPU的指令缓存ICache配置或只读共享数据。4‘b1111Write-Through Read-AllocateNormal读可缓写直达读分配写操作直达内存读未命中可分配缓存行适用于需要与其他观察者如DMA保持简单一致性的可写数据。4‘b0111Write-Back No-AllocateNormal读可缓写回不分配写操作先入缓存脏行稍后写回较少使用可能用于特定的优化场景。4‘b0110Write-Back Write-AllocateNormal读可缓写回写分配写未命中时先分配缓存行再写入CPU数据缓存DCache的典型配置。性能最优但一致性管理最复杂。关键概念解析可缓存Cacheable数据可以被存入发起者本地的缓存如CPU的L1 Cache。这能极大提升重复访问的性能。分配策略Allocation当缓存未命中Cache Miss发生时是否在缓存中为这个地址分配一个新的缓存行Cache Line。读分配Read-Allocate仅在读未命中时分配。适用于写直达场景。写分配Write-Allocate在写未命中时分配。这是写回缓存的标准行为它把多次对小地址的写合并到缓存行最后一次性写回内存大幅减少内存写入次数。不分配No-Allocate任何未命中都不分配缓存行。数据直接穿透缓存访问内存。缓冲Bufferable对于写操作允许互联或中间节点在完成对主存的更新之前就向发起者返回写响应BRESP/RRESP。这解耦了发起者和内存的速度提升了写流水线的效率。但注意对于Device类型Bufferable意味着允许提前写应答但访问的其他限制如无合并依然存在。配置逻辑如何为你的IP选择AxCACHE值我通常遵循这个决策链目标是什么如果是外设寄存器 -Device类型。根据设备严格程度选nGnRnE或nGnRE。目标是内存-Normal类型。需要硬件缓存一致性吗如果该内存区域可能被多个带缓存的Master如多核CPU共享且需要硬件自动维护一致性通常配置为可缓存AxCACHE[3]1。如果只是简单的共享数据区如DMA缓冲区更常用Non-cacheable Bufferable依赖软件刷新来同步。写入模式是什么如果是频繁写入的工作数据集Write-Back Write-Allocate性能最好。如果是写入后立即需要被其他设备看到的数据如命令队列Write-Through更安全。如果是只读数据如代码Write-Through No-Allocate即可。4. 保护属性Protection Attributes与安全架构4.1 三位保护信号的精确含义AxPROT[2:0]这三个比特位虽然简单却直接挂钩到处理器的安全状态和内存保护单元在涉及TrustZone等安全技术的系统中至关重要。AxPROT[0]特权访问位1‘b0**特权Privileged**访问。通常对应于CPU处于EL1/EL2/EL3异常等级ARMv8或Handler模式ARMv7可以访问系统的全部资源。1‘b1**非特权Unprivileged**访问。通常对应于CPU处于EL0ARMv8或Thread模式ARMv7访问权限受MMU/MPU限制。实操影响互联或从设备可能根据此位过滤访问。例如一个配置为仅特权访问的外设寄存器如果接收到非特权访问应返回错误SLVERR或DECERR。AxPROT[1]安全访问位1‘b0**安全Secure**访问。请求来自处理器的安全状态Secure World。1‘b1**非安全Non-secure**访问。请求来自处理器的非安全状态Normal World。这是TrustZone技术的核心系统总线、互联和内存控制器会根据此位将访问路由到安全或非安全地址空间。一个非安全Master绝对不能访问标记为安全的内存或外设否则会产生访问错误。AxPROT[2]指令/数据访问位1‘b0**数据Data**访问。1‘b1**指令Instruction**访问。表示这是一个取指请求。关键作用对于支持指令缓存和数据缓存分离的哈佛架构系统如大多数CPU这个位用于区分访问流。它告诉缓存和MMU这个访问是用于指令提取还是数据加载/存储。MMU可以用不同的转换表TTBR0/TTBR1或属性来管理指令和数据的访问权限。4.2 保护属性的系统级联动与配置实践这三个保护位通常不是由IP设计者随意决定的而是由发起访问的Master通常是CPU或总线桥根据其当前的运行状态自动生成的。对于CPU当CPU执行一条加载/存储指令时它会根据当前的异常等级ELx、安全状态SCR_EL3.NS位以及指令本身是LDR/STR还是取指自动设置好AxPROT信号并通过总线发出。对于DMA或加速器它们通常被配置为运行在特定的安全域和特权级。例如一个用于加解密的安全DMA其所有访问的AxPROT[1]都应设为0安全。这需要在配置DMA时由软件设置好。配置陷阱当你设计一个从设备Slave时特别是内存控制器或外设必须考虑如何处理这些保护属性。基础检查你的从设备是否需要区分特权/非安全访问如果不需要可以忽略AxPROT[0]和AxPROT[1]。但更稳健的做法是实现一个简单的检查逻辑如果接收到非法的访问组合如非安全访问试图写安全配置寄存器则返回DECERR或SLVERR。指令访问的特殊处理如果你的从设备是只读内存如ROM或可执行的内存区域对于标记为指令访问AxPROT[2]1的读请求应该正常响应。但如果接收到一个标记为指令访问的写请求这很可能是错误的通常不会向代码区写数据可以考虑将其标记为错误。与系统安全策略对齐在集成阶段必须确保所有IP的AxPROT处理逻辑与系统整体的安全架构设计一致。例如非安全世界的外设总线桥应该将其下游所有Master发起的访问的AxPROT[1]位都强制设为1非安全防止下游设备意外发起安全访问。5. 扩展属性QoS、Region与User信号的应用5.1 服务质量QoS属性管理传输优先级AxQOS[3:0]在AXI4中成为强制信号用于指示事务的优先级数值越高表示优先级越高。这是一个“提示性”信号互联和从设备可以但不是必须利用它来优化调度。工作原理假设系统中有两个Master同时发起访问。一个是大数据量的后台DMA搬运低优先级QoS0另一个是CPU取指或触摸屏中断服务程序访问高优先级QoS15。互联中的仲裁器可以根据QoS值优先让高优先级的事务通过甚至可能对低优先级的事务进行节流以确保高优先级事务的延迟和带宽。典型赋值策略CPU取指和关键数据加载赋予最高优先级如15。实时性要求高的外设显示引擎、音频DMA赋予高优先级如12-14。普通的CPU数据访问赋予中等优先级如8-11。后台DMA、内存自刷新等赋予最低优先级如0-3。注意QoS仅在同一竞争资源如共享总线带宽、内存控制器入口队列时起作用。对于Device类型的访问由于其有序性要求QoS可能被忽略。不要指望用QoS来解决所有的性能问题它只是一个辅助优化手段。5.2 区域Region属性逻辑接口复用的利器AxREGION[3:0]用于支持单个物理从设备接口复用多个逻辑接口。这在地址解码灵活或虚拟化场景中非常有用。应用场景假设你设计了一个内存控制器它物理上只有一个AXI Slave接口但需要管理四个独立的内存区域比如四块不同的DDR Chip Select。你可以使用AxREGION来区分对这四块区域的访问。工作流程互联在将事务路由到该内存控制器时不仅传递地址还传递AxREGION值。内存控制器内部根据AxREGION的值选择不同的内部配置、时序控制器或物理芯片选择信号。这样从系统角度看好像有四个独立的内存从设备但实际上它们共享同一个AXI物理端口简化了互联结构。与地址解码的关系AxREGION通常和地址高位一起使用。互联先根据AxREGION将事务路由到正确的物理从设备再从设备内部根据地址低位进行最终寻址。它本质上是地址空间的扩展。5.3 用户User信号设计者的扩展画布AxUSER信号是协议留给设计者的“自留地”宽度和含义完全自定义。这为复杂系统设计提供了极大的灵活性。常见用途传递虚拟化IDVMID在虚拟化系统中用于标识发起访问的虚拟机以便进行地址转换两阶段地址转换和资源隔离。传递线程/进程ID用于调试和性能监控可以追踪是哪个软件实体发起了访问。传递自定义的QoS或优先级信息当标准的4-bitQoS不够用时可以用USER信号传递更丰富的优先级信息。传递原子操作类型对于支持AXI原子扩展的系统可以用USER信号传递原子操作的细节。使用建议定义明确在项目开始时就定义好USER信号每一位的含义并写入设计文档。端到端传递确保从Master发出经过互联最终到达Slave的整个路径上USER信号都能被正确传递不被中间节点修改或丢弃除非设计如此。谨慎使用不要滥用。每增加一位USER信号都会增加布线资源和功耗。只在标准属性无法满足需求时才使用它。6. 事务属性在系统集成中的实战配置与调试6.1 主设备Master侧属性生成策略作为Master的设计者你的任务是正确生成每一个事务请求的属性。这通常不是硬编码的而是由配置寄存器或上下文决定的。CPU Core属性由MMU根据页表描述符自动生成。页表项中的内存类型MT、缓存策略Inner/Outer Cacheability、安全位NS等会被翻译成对应的AxCACHE和AxPROT信号。软件程序员通过配置页表来间接控制这些属性。DMA控制器通常有一组配置寄存器如源地址、目标地址、传输长度其中应包含缓存属性、保护属性甚至QoS的配置字段。驱动程序在启动DMA前需要根据传输任务的性质如传输的是否是可缓存的数据缓冲区是否涉及安全内存来正确设置这些字段。自定义加速器你需要根据加速器访问的资源类型在RTL代码中合理设置这些属性。例如// 假设一个图像处理加速器读取一块输入图像缓冲区Non-cacheable Bufferable assign ARPROT 3b010; // 非安全、特权、数据访问典型值 assign ARCACHE 4b0011; // Normal Non-cacheable Bufferable assign ARQOS 4b1000; // 中等优先级 // 当它需要写入一个配置寄存器位于Device空间时 assign AWPROT 3b010; assign AWCACHE 4b0010; // Device Non-bufferable assign AWQOS 4b1111; // 高优先级希望配置尽快生效关键检查点在验证Master时必须创建测试用例覆盖各种属性组合的传输场景确保其行为符合预期特别是Device类型的访问是否严格遵守了有序性和无合并的要求。6.2 从设备Slave与互联Interconnect的属性处理Slave和Interconnect是属性的“消费者”和“执行者”。Interconnect的职责路由根据地址和AxREGION将事务路由到正确的Slave。仲裁与调度根据AxQOS和内部算法仲裁多个Master的访问请求。属性传递与转换通常需要将Master发出的属性原样传递给目标Slave。但在某些复杂互联如NIC-400中支持属性重写Attribute Remapping。例如可以将所有对某个地址区域的可缓存访问重写为非缓存访问或者提升/降低其QoS值。这是一个强大的功能但配置错误会导致灾难。错误响应如果发现非法访问如非安全Master访问安全地址空间应直接返回DECERR。Slave的职责属性解析根据接收到的属性决定内部行为。对于内存控制器AxCACHE决定是否启用内部预取器、读写调度优化。AxPROT可能用于安全检查。对于带缓存的一致性从设备如另一个CPU簇的缓存AxCACHE和AxPROT是维护缓存一致性协议如ACE或CHI的关键输入。对于简单外设可能只检查AxCACHE是否为Device类型以确保访问有序。生成响应根据处理结果生成正确的RRESP或BRESPOKAY,EXOKAY,SLVERR,DECERR。例如如果一个标记为Non-cacheable的访问请求被一个缓存类Slave接收它应该返回EXOKAYExclusive Access Okay表示该数据不会被缓存或者需要使其他缓存中的副本无效。6.3 系统级配置检查清单与常见问题排查在芯片集成和系统启动阶段事务属性配置错误是常见问题源。以下是一个实用的检查清单一致性检查确保所有访问同一物理内存区域的Master对该区域的缓存属性配置是一致的。如果CPU配置为Write-Back而DMA配置为Non-cacheable就会导致数据不一致CPU缓存中的数据DMA看不到。设备类型检查确认所有对外设寄存器的访问其AxCACHE都正确配置为Device类型通常是4‘b0010或更严格的类型。用逻辑分析仪抓取总线检查这些访问的AxCACHE值。安全域检查在启用TrustZone的系统中检查非安全Master的访问是否被错误地路由到安全外设或内存反之亦然。这通常表现为访问超时或返回DECERR。QoS有效性检查在存在高带宽、高实时性要求的场景下检查关键Master的AxQOS是否被正确设置并且互联的仲裁策略是否确实考虑了QoS。可以通过性能计数器监控不同QoS事务的延迟和带宽。仿真与调试在RTL仿真中可以添加断言Assertion来检查属性配置的合理性。例如断言“对地址范围0xA000_0000到0xAFFF_FFFF外设区的访问AxCACHE[1]必须为0Device”。常见问题与排查技巧实录问题一DMA传输的数据CPU读到的不是最新值。排查检查CPU对该内存区域的缓存属性。如果是Write-Back Cached而DMA配置为Non-cacheable则DMA写入的数据在内存中但CPU可能从自己的缓存中读取旧数据。解决方案A将CPU对该区域的映射改为Non-cacheable。方案B在DMA传输完成后由软件执行缓存维护操作Clean Invalidate将CPU缓存中的数据刷回内存并失效。技巧在软件中在DMA描述符或驱动代码里显式地注释出所操作内存区域的缓存属性要求避免遗忘。问题二访问某个外设寄存器时系统挂死或返回错误。排查首先检查地址映射是否正确。如果正确用调试工具或仿真波形查看该访问的AxCACHE属性。极有可能是被错误地配置为Normal类型导致互联或从设备尝试对其进行缓存优化如合并访问破坏了外设的副作用语义。解决确保外设驱动在配置Master如CPU通过SMMU或DMA控制器时将对应区域的属性设置为正确的Device类型。问题三系统在高负载时实时音频出现爆音。排查检查音频DMA引擎的AXI访问的AxQOS值。它可能被设置为默认的低优先级在与CPU或视频DMA竞争内存带宽时被“饿死”。解决在音频驱动中提升音频DMA传输描述符中的QoS字段值。同时在互联配置中确保仲裁算法确实实现了基于QoS的加权调度。问题四使能了某个加速器后系统整体性能反而下降。排查检查该加速器的内存访问模式。如果它大量发起低优先级、但带宽需求大的Non-cacheable访问可能会“污染”内存控制器的读写队列排挤掉CPU那些高优先级的可缓存访问导致CPU频繁等待内存。解决优化加速器的访问模式比如使用更大的突发长度Burst Size或者如果可能将其访问的内存区域配置为Write-Back让加速器也能利用系统缓存。同时合理设置其QoS避免过度占用资源。事务属性的配置是连接硬件架构师、软件驱动工程师和验证工程师的桥梁。它要求我们对整个数据路径从发起者的意图到互联的调度策略再到目标设备的特性都有一个全局的、清晰的认识。磨刀不误砍柴工花时间理清这些属性能在系统调试阶段为你省下无数个不眠之夜。

相关资讯