首页 > 其他分享 >AXI4-Full 接口

AXI4-Full 接口

时间:2024-10-15 13:48:09浏览次数:3  
标签:事务 Full 低功耗 接口 突发 地址 信号 AXI4 外设

AXI4-Full 接口


注:axi4-full 源码文件见附件!

简介

AXI4-Full 是 AMBA AXI (Advanced eXtensible Interface) 协议的完整版本,它是一种高性能、可扩展的接口协议,用于嵌入式系统中的片上总线。AXI4-Full 设计用于连接多个主设备(如处理器核心)和从设备(如内存控制器和外设接口),以实现高效的数据传输和系统控制。以下是 AXI4-Full 的一些关键特性和组成部分:

  1. 通道(Channels)
    • 读地址通道(Read Address Channel):用于传输读事务的地址和控制信息。
    • 读数据通道(Read Data Channel):用于从从设备向主设备传输数据。
    • 写地址通道(Write Address Channel):用于传输写事务的地址和控制信息。
    • 写数据通道(Write Data Channel):用于从主设备向从设备传输数据。
    • 写响应通道(Write Response Channel):用于从从设备向主设备传输写事务的响应。
  2. 信号(Signals)
    • 包括用于控制数据流的信号,如VALID/READY握手信号、地址信号、数据信号、响应信号等。
    • 支持突发传输(Burst Transfers),允许在一个事务中传输多个数据项。
  3. 突发传输(Burst Transfers)
    • 支持固定(FIXED)、增量(INCR)、包装(WRAP)和 reserved 突发类型。
    • 允许高效的数据传输,减少了主设备和从设备之间的握手次数。
  4. 事务属性(Transaction Attributes)
    • 通过ARCACHE和AWCACHE信号控制事务的缓存行为。
    • 支持不同的内存类型和事务类型,如内存事务、外设事务等。
  5. 质量服务(Quality of Service, QoS)
    • 通过AWQOS和ARQOS信号支持事务的优先级控制。
  6. 用户定义信号(User Signals)
    • 提供了用户定义的信号,以支持特定的应用需求。
  7. 支持乱序和流水线处理
    • 允许在不同的通道上并行处理多个事务,提高了系统的吞吐量。
  8. 支持多主设备和多从设备
    • 可以连接多个主设备和从设备,支持复杂的系统拓扑结构。
  9. 低功耗特性
    • 包括低功耗接口信号,如CSYSREQ和CSYSACK,用于控制设备的电源状态。
  10. 互操作性(Interoperability)
    • 设计了与旧版本AXI协议的兼容性,允许不同版本的AXI设备在同一系统中工作。

AXI4-Full 协议适用于需要高性能和复杂内存管理的系统,如高性能处理器、图形处理器、网络处理器等。它的设计目标是在保证高性能的同时,提供足够的灵活性和可扩展性,以适应不同的系统需求。

信号

AXI4-Full 是一种高性能的片上总线接口,它支持高带宽和低延迟的设计需求。AXI4-Full 协议定义了一系列独立的事务通道,包括读地址、读数据、写地址、写数据和写响应通道。以下是 AXI4-Full 协议中的主要信号及其功能:

全局信号(Global Signals)

  • ACLK: 全局时钟信号,所有 AXI 组件使用单一的时钟信号。

  • ARESETn: 全局复位信号,低电平有效。

    复位期间,除 ARVALID、AWVALID、WVALID、RVALID、BVALID 必须为低电平,其他信号可以为任何值

写地址通道信号(Write Address Channel Signals)

  • AWID[3:0]: 写地址 ID,用于标识写地址事务。

  • AWADDR[31:0]: 写地址,指定写事务的起始地址。

  • AWLEN[7:0]: 突发长度,指定突发事务中的传输数量。

    • 实际突发长度 = AxLEN + 1
    • AXI3 只支持 1-16 突发长度
    • AXI4 INCR 突发类型支持 1-256 突发长度,其他突发类型只支持 1-16 突发长度
    • AXI4 WRAPPING 突发类型只支持 2/4/6/8/16 突发长度
    • 突发不能跨 4KB 地址边界
  • AWSIZE[2:0]: 突发大小,指定每个突发传输的大小,每次传输的字节数为2^AxSIZE

  • AWBURST[1:0]: 突发类型,指定突发事务的类型(固定、增量或包裹)。

    • FIXED突发类型(2’b00):每次突发起始地址都一样,适用于对某个固定地址进行多次数据更新的情况,例如读写一个FIFO时,读写地址就是固定的。
    • INCR突发类型(2’b01):每次突发起始地址会自动加上 AxSIZE 大小,适合对于RAM等通过地址映射的存储介质进行读写操作。
    • WRAP突发类型(2’b10):地址超过设定边界会自动回卷,适合对cache的访问,因为它可以有效地处理数据的对齐和缓存行的填充。
  • AWLOCK: 锁定类型,提供事务的原子性信息,AxLOCK信号是AXI4协议中实现原子操作和同步机制的关键信号,它确保了在多主总线环境中数据的一致性和同步操作的原子性。

    • AXI3 AxLOCK 为 2bit
      • 0b00:Normal access
      • 0b01:Exclusive access,独占访问允许多个主设备同时访问同一从设备,但不允许它们访问相同的内存范围。
      • 0b10:Locked access,锁定访问会阻止其他任何主设备访问目标从设备,直到发起锁定访问的主设备完成其事务。
    • AXI4 AxLOCK 为 1bit
      • 0b0:Normal access
      • 0b1:Exclusive access
  • AWCACHE[3:0]: 缓存类型,指示事务如何通过系统。

    • AxCACHE[0]:可缓冲位(Bufferable bit),用于指示事务是否可以被缓存或缓冲。

      当该位为高(1)时,意味着互连体或任何组件可以延迟事务到达其最终目的地,延迟的周期可以是任意的。这通常仅与写入有关。如果该位为低(0),则不支持这种特性。

    • AxCACHE[1]:可修改位(Modifiable bit),用于指示事务是否可以修改其特性。

      当该位为高(1)时,表示事务的特性可以被修改,例如,单个事务可以被分解为多个事务,或者多个事务可以被合并为一个事务。当该位为低(0)时,表示事务是不可修改的(Non-modifiable),不能被分割或合并,且以下参数不能被改变:传输地址(AxADDR)、突发大小(AxSIZE)、突发长度(AxLEN)、突发类型(AxBURST)、锁定类型(AxLOCK)和保护类型(AxPROT)。

    • AxCACHE[3:2]:读分配(RA)和写分配(WA)位,用于控制读和写事务的分配行为。

      这些位提供了关于事务访问地址的数据是否可能已经在缓存中的信息。这些信号影响缓存的行为,例如,是否需要在缓存中查找数据,或者是否需要将数据写入缓存。

  • AWPROT[2:0]: 保护类型,指示事务的特权和安全级别。

    • AxPROT[0] (Privilege):标识访问是普通(Unprivileged)还是特权(Privileged)。
      • 1表示特权访问,通常用于操作系统或需要更高权限的操作。
      • 0表示普通访问,通常用于普通的数据处理。
    • AxPROT[1] (Security):标识访问是安全(Secure)还是非安全(Non-secure)。
      • 1表示非安全事务,可能用于一般的数据处理。
      • 0表示安全事务,通常用于处理敏感或保密的数据。
    • AxPROT[2] (Instruction/Data):指示事务是指令访问还是数据访问。
      • 1表示指令访问,通常用于处理器获取执行的指令。
      • 0表示数据访问,用于数据的读取和写入操作。
  • AWQOS[3:0]: AxQOS(Quality of Service,服务质量)信号是用来指示每个读写事务的相对优先级的可选信号,通常情况下,数值越大表示事务的优先级越高。

  • AWREGION[3:0]: 区域标识符,允许单个物理接口在从设备上用作多个逻辑接口。

  • AWUSER(up to 16 bits): 用户定义信号,在写地址通道中使用。

  • AWVALID: 写地址有效,表示通道上有有效的写地址和控制信息。

  • AWREADY: 写地址准备就绪,表示从设备已准备好接受地址和相关控制信号。

写数据通道信号(Write Data Channel Signals)

  • WID[3:0]: 写数据 ID 标签(AXI3 特有)。用于支持乱序(out-of-order)写事务。WID信号允许多个写事务同时进行,这些事务可以被乱序处理和完成。每个写数据突发(burst)都会与一个唯一的WID相关联,以确保数据的完整性和顺序,每个事务都有唯一的 WID,BID,ARID,RID与之对应。
  • WDATA (32, 64, 128, 256, 512, or 1024 bits): 写数据。
  • WSTRB (4, 8, 16, 32, 64, 128, or 256 bits): 写使能信号,指示哪些字节是有效的。
  • WLAST: 写最后一个信号,表示突发事务中的最后一个传输。
  • WUSER (up to 16 bits): 用户定义信号,在写数据通道中使用。
  • WVALID: 写数据有效,表示有有效的写数据和使能信号。
  • WREADY: 写数据准备就绪,表示从设备可以接受写数据。

写响应通道信号(Write Response Channel Signals)

  • BID[3:0]: 响应 ID 标签,用于标识写响应,说明同 WID
  • BRESP[1:0]: 写响应,指示写事务的状态。
    • OKAY(00):表示写事务正常完成。如果事务是独占访问但失败了,也会返回OKAY。OKAY是用于大多数事务的响应,表示正常访问已经成功。这个响应还可以表示独占访问失败,即当多个主机可以访问一个从机,但这些主机不能访问相同的内存范围时,如果独占访问失败,也会返回OKAY。
    • EXOKAY(01):表示独占访问事务成功完成。独占访问是一种特殊的事务类型,其中总线不会被其他事务抢占。EXOKAY响应表明读或写部分的独占访问已经成功。
    • SLVERR(10)(Slave Error):表示从设备在接收到事务后,由于某些原因(如FIFO溢出、不支持的传输大小、写入操作试图访问只读位置等)无法完成该事务。这表示事务的失败。
    • DECERR(11)(Decode Error):通常由互联组件发出,表示没有找到与事务地址匹配的从设备。这通常意味着地址解码过程中出现了错误,例如,试图访问一个不存在的从设备
  • BUSER(up to 16 bits): 用户定义信号,在写响应通道中使用。
  • BVALID: 写响应有效,表示通道上有有效的写响应。
  • BREADY: 写响应准备就绪,表示主设备可以接受写响应。

读地址通道信号(Read Address Channel Signals)

  • ARID[3:0]: 读地址 ID,用于标识读地址事务,说明同 WID
  • ARADDR[31:0]: 读地址,指定读事务的起始地址。
  • ARLEN[7:0]: 突发长度,指定突发事务中的传输数量,说明同 AWLEN
  • ARSIZE[2:0]: 突发大小,指定每个突发传输的大小,说明同 AWSIZE
  • ARBURST[1:0]: 突发类型,指定突发事务的类型,说明同 AWBURST
  • ARLOCK[1:0]: 锁定类型,提供事务的原子性信息,说明同 AWLOCK
  • ARCACHE[3:0]: 缓存类型,指示事务如何通过系统,说明同 AWBURST
  • ARPROT[2:0]: 保护类型,指示事务的特权和安全级别,说明同 AWPROT
  • ARQOS[3:0]: AxQOS(Quality of Service,服务质量)信号是用来指示每个读写事务的相对优先级的可选信号,通常情况下,数值越大表示事务的优先级越高。
  • ARREGION[3:0]: 区域标识符,允许单个物理接口在从设备上用作多个逻辑接口。
  • ARUSER(up to 16 bits): 用户定义信号,在读取地址通道中使用。
  • ARVALID: 读地址有效,表示通道上有有效的读地址和控制信息。
  • ARREADY: 读地址准备就绪,表示从设备已准备好接受地址和相关控制信号。

读数据通道信号(Read Data Channel Signals)

  • RID[3:0]: 读数据 ID 标签,用于标识读数据事务,说明同 WID
  • RDATA (32, 64, 128, 256, 512, or 1024 bits): 读数据。
  • RRESP[1:0]: 读响应,指示读事务的状态,说明同 BRESP
  • RLAST: 读最后一个信号,表示突发事务中的最后一个传输。
  • RUSER(up to 16 bits): 用户定义信号,在读取数据通道中使用。
  • RVALID: 读数据有效,表示通道上有有效的读数据。
  • RREADY: 读数据准备就绪,表示主设备可以接受读数据。

低功耗接口信号(Low-Power Interface Signals)

  • CSYSREQ: 系统退出低功耗状态请求信号。
  • CSYSACK: 系统进入低功耗状态确认信号。
  • CACTIVE: 外设时钟激活信号。
  1. 信号定义CSYSREQ是一个单向信号,从系统时钟控制器发出,外设接收。它用于请求外设进入低功耗状态(当信号为低电平时)或请求外设退出低功耗状态(当信号为高电平时)。
  2. 操作模式:在正常操作期间,CSYSREQ信号通常保持高电平,表示外设处于正常工作状态。当系统时钟控制器需要外设进入低功耗状态时,它会将CSYSREQ信号驱动为低电平。外设在识别到这个请求后,可以执行掉电功能,并取消激活CACTIVE信号,以表明它可以移除时钟。
  3. 确认信号:外设使用CSYSACK信号来确认对CSYSREQ信号的请求。当外设准备进入低功耗状态时,它会将CSYSACK信号驱动为低电平。当系统时钟控制器请求外设退出低功耗状态时,外设在完成上电序列后,会将CSYSACK信号驱动为高电平,以确认它已经退出低功耗状态。
  4. 时钟有效信号CACTIVE信号表明外设需要它的时钟信号。在低功耗状态期间,CACTIVECSYSREQ信号均为低电平。驱动这两个信号之一为高电平会启动退出低功耗状态的序列。
  5. 请求与确认握手CSYSREQCSYSACK之间的握手是AXI协议的要求。外设可以接受或拒绝系统时钟控制器提出的进入低功耗状态的请求。当外设通过将CSYSACK置为低电平来确认请求时,CACTIVE信号的电平表示接受或拒绝该请求。
  6. 低功耗状态的退出:系统时钟控制器或外设都可以请求退出低功耗状态并恢复时钟。根据定义,CACTIVECSYSREQ在低功率状态期间均为低电平,驱动这两个信号之一为高电平会启动退出序列。

总结来说,CSYSREQ信号是AXI4-FULL协议中用于控制外设时钟状态的重要信号,它与CSYSACKCACTIVE信号一起工作,以支持外设的低功耗操作。

握手机制

3种握手情形

数据在 TVALID 和 TREADY 同时有效时进行传输,常见几种握手情况如下所示;

  1. TVALID 先于 TREADY 有效

在这里插入图片描述

  1. TREADY 先于 TVALID 有效

  2. TVALID 和 TREADY 同时有效(Slave 判断到 TVALID 有效,立即置位 TREADY)

在这里插入图片描述

握手信号及默认状态

各通道的握手信号如下表所示:

在这里插入图片描述

  • AWREADY 默认状态可以为高电平或者为低电平,建议默认为高电平,若默认为低电平,则每次传输至少需要两个周期(1拉高AWVALID, 2 拉高 AWREADY),有效带宽降低。但前提是 Slave 端可以立即接受地址数据
  • WREADY 同理建议默认为高电平,但前提是 Slave 端可以立即接受写数据
  • BREADY 同理建议默认为高电平,但前提是 Master 端可以立即接受写响应数据
  • ARREADY 同理建议默认为高电平,但前提是 Slave 端可以立即接受读地址数据
  • RREADY 同理建议默认为高电平,但前提是 Master 端可以立即接受读数据

信号间关系

AXI 协议要求:

  • 写响应数据必须跟在最后一个写数据后面

  • 读数据必须根据相应读地址后面

  • 写数据可以先于写地址进行传输

  • 写数据可以和写地址同时出现

  • VALID 信号不能等 READY 信号置位才有效

  • READY 信号可以先于 VALID 信号有效或者等 VALID 信号有效后才有效


下图注释:

  • 单箭头表示箭头指向的信号可以先于或后于箭头起始的信号有效
  • 双箭头表示箭头指向的信号必须后于箭头起始的信号有效

读信号

  • Master 的 ARVALID 不能等待 ARREADY 置位后才拉高
  • Slave 的 ARREADY 可以先于或者等待 ARVALID 置位后才拉高
  • Slave 的 RVALID 必须等待 ARVALID 和 ARREADY 均置位后才能拉高
  • Slave 的 RVALID 不能等待 RREADY 置位后才拉高
  • Master 的 RREADY 可以先于或者等待 RVALID 置位后才拉高

在这里插入图片描述

写信号

  • Master 的 AWVALID 或 WVALID 不能等待 AWREADY 或 WVALID 置位后才拉高
  • Slave 的 AWREADY 或 WREADY 可以先于或者等待 AWVALID 或 WVALID 置位后才拉高
  • Slave 的 BVALID 必须等待 AWVALID、AWREADY、WVALID、WREADY 、WLAST 都置位后才能拉高
  • Slave 的 BVALID 不能等待 BREADY 置位后才拉高
  • Master 的 BREADY 可以先于或者等待 BVALID 置位后才拉高

在这里插入图片描述


Note:AXI3 的写响应与 AXI4 的写响应条件不同,将 AXI3 转换为 AXI4 需要修改代码,确保 Slave 在接收适当地址前不提供写响应。

Xilinx 官方源码生成

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标签:事务,Full,低功耗,接口,突发,地址,信号,AXI4,外设
From: https://blog.csdn.net/qq_38695100/article/details/142952118

相关文章

  • 双十一将近,如何解决API接口调用数据超量及报错问题?
    随着双十一的临近,电商平台的API接口面临着巨大的挑战,尤其是在数据超量和报错问题上。以下是一些解决方案和最佳实践,可以帮助你一站式解决这些问题。1.性能测试在大促期间,如双十一,流量会大幅增长,因此进行性能测试是必要的。性能测试包括负载测试、基线测试、冒烟测试、浸泡......
  • 智能AI对话绘画二合一源码系统 内置所有大模型的接口 带完整的安装代码包以及搭建部署
    系统概述人工智能技术的飞速发展,越来越多的创新应用正在改变着我们的生活。本文将向大家介绍一款集成了智能对话与创意绘画功能的开源项目——“智能AI对话绘画二合一源码系统”。它不仅融合了最新的自然语言处理(NLP)和计算机视觉技术,还为开发者提供了从零开始构建自己专属AI服......
  • 身份证实名认证API集成-二要素实名认证-实名认证接口-身份认证
    身份证实名认证接口是当下互联网服务用于验证用户真实身份的重要手段之一。在互联网金融、电子商务、社交网络等众多领域中,实名认证可以帮助平台更好的了解和服务在线用户,以做到防范欺诈行为的发生,保障交易资金与信息安全,该接口功能一般由第三方平台(如翔云、阿里云)来提供。......
  • Golang中接口和结构体之间转换的方法
    目录接口转结构体结构体转接口使用ok-idiom进行安全的类型断言在Golang中,接口和结构体之间的转换涉及到类型断言和类型断言的操作符。接口转结构体如果我们有一个接口变量,并且我们知道它的内部具体类型,我们可以使用类型断言来将其转换为该具体类型的结构体。packagemain......
  • 淘宝商品详情API接口信息获取指南
    淘宝商品详情API接口,作为我国电商巨头淘宝开放平台的重要组成部分,为广大开发者提供了一种便捷、高效的方式,以获取淘宝商品详细信息。该接口的推出,不仅满足了开发者对商品数据的需求,也为消费者带来了更加丰富的购物体验。一、淘宝商品详情API接口具有以下特点:数据丰富:该接口......
  • 淘宝商品关键词API接口:关键词数据智能分析
    淘宝商品关键词API接口是淘宝开放平台(TaobaoOpenPlatform,TOP)提供的一项服务,它允许第三方开发者通过编程方式访问淘宝的商品信息数据库。这个接口的主要功能是根据开发者提供的关键词,检索淘宝平台上的商品列表及相关信息。一、功能和特点数据检索:可以检索特定关键词下的......
  • VU9P处理板设计原理图:412-基于单XCVU9P+双DSP C6678的双FMC接口 100G光纤传输加速计算
    基于单XCVU9P+双DSPC6678的双FMC接口100G光纤传输加速计算卡一、板卡概述板卡包括一片Xilinx FPGA  XCVU9P,两片 TI 多核DSP TMS320C6678及其控制管理芯片CFPGA.设计芯片满足工业级要求。FPGA VU9P 需要外接4路QSFP+(100Gbps)及其两个FMC HPC接口。DS......
  • 用python、JavaScript、JAVA等多种语言的实例代码演示教你如何免费获取股票数据(实时数
    ​近一两年来,股票量化分析逐渐受到广泛关注。而作为这一领域的初学者,首先需要面对的挑战就是如何获取全面且准确的股票数据。因为无论是实时交易数据、历史交易记录、财务数据还是基本面信息,这些数据都是我们进行量化分析时不可或缺的宝贵资源。我们的核心任务是从这些数据......
  • 苍穹外卖 实现新增菜品及其口味接口
        DishControllerpackagecom.sky.controller.admin;importcom.sky.dto.DishDTO;importcom.sky.result.Result;importcom.sky.service.DishService;importio.swagger.annotations.Api;importio.swagger.annotations.ApiOperation;importlombok.extern.......
  • npm uninstall screenfull --legacy-peer-deps
    下面是解决此错误的几种方法:1.清空缓存在终端中运行下面的命令清空npm缓存:npmcacheclean--force然后重新安装依赖包。2.使用--force在安装或更新命令后面加上 --force 选项,强制解析依赖树并安装依赖包。npminstall--force请注意,这种方法可能会引入不兼容......