草庐IT

AXI协议(4):AXI通道上的信号

呆呆象呆呆 2024-01-17 原文

7 通道上的信号

7.1 全局信号

AXI 总线中有两个全局信号:

  • ACLK,全局的时钟信号,所有的传输操作都发生在 ACLK 的上升沿
  • ARESETn,全局复位信号,低电平有效。在复位问题上,AXI 规定了一些细节,会在后续的文章中讨论。注意:ARESETn 一般是一个同步复位信号,A 代表 AXI,而不是 Async。

7.2 写地址通道

信号Source描述
AWID[3:0]Master写入地址的ID。该信号是信号写入地址组的标识标签。
AWADDR[31:0]Master写入地址。写入地址总线给出写入burst事务中第一次事务的地址。相关控制信号用于确定突发中剩余事务的地址。
AWLEN[3:0]Master突发长度。突发长度给出了突发中事务的确切数量。此信息同时也确定与事务相关的地址。
AWSIZE[2:0]Master突发大小。该信号表示突发中每次事务的大小。字节通道选通准确指示要更新的字节通道。
AWBURST[1:0]Master突发类型。突发类型以及大小信息详细说明了如何计算突发内每次传输的地址。
AWLOCK[1:0]Master锁类型。该信号提供了有关事务的原子特性的附加信息。
AWCACHE[3:0]Master缓存类型。该信号表示事务的可缓冲、可缓存、直写、回写和分配属性。
AWPROT[2:0]Master保护类型。此信号表示事务的正常、特权或安全保护级别,以及事务是数据访问还是指令访问。
AWQOSMaster服务质量。为每个写事务发送的QoS标识符。仅在AXI4中实现。
AWREGIONMaster区域标识符。允许从设备上的单个物理接口用于多个逻辑接口。仅在AXI4中实现。
AWUSERMaster用户信号。写入地址通道中的可选用户定义信号。仅在AXI4中受支持。
AWVALIDMaster写入地址有效。该信号表示有效的写入地址和控件信息可用:高电平代表地址和控制信息可用,低电平地址和控制信息不可用。地址和控制信息保持稳定,直到地址确认信号AWREADY变高。
AWREADYSlave写入地址就绪。该信号表示从机已准备好接受地址和相关控制信号:高电平salva就绪,低电平slave未就绪。

写地址通道的信号可以分为 3 部分:

  • 经常用到的基础信号(AWADDR,AWVALID,AWREADY)
  • 突发传输的控制信号(AWLEN:突发传输的长度,即在一次突发传输中数据传输的个数。AWSIZE:每次突发传输中的数据传输的位宽。AWBURST:突发传输的类型。),突发传输指的是传输一次起始地址后,进行多次地址上连续的读写操作。
  • 内存访问相关以及其他的在基础阶段不是很常用的信号,其他信号包括和内存原子操作有关的 AWLOCK,AWCACHE,AWPROT 以及用于用户自定义的 AWUSER 信号,都将在以后的文章涉及。

7.3 写数据通道

信号Source描述
WID[3:0]Master写入ID标记。该信号是写入数据传输的ID标签。WID值必须与写入事务的AWID值匹配。
WDATA[31:0]Master写入数据。写入数据总线可以是8、16、32、64、128、256、512或1024位宽。
WSTRB[3:0]Master写入选通。该信号指示要在内存中更新的字节通道。写入数据总线的每八位有一个写入选通。因此,WSTRB[n]对应于WDATA[(8×n)+7:(8×n)]。
WLASTMaster最后写入。该信号表示写入突发中的最后一次事务。
WUSERMaster用户信号。写入数据通道中的可选用户定义信号。仅在AXI4中受支持。
WVALIDMaster写入有效。该信号表示有效写入数据和选通可用:高电平写入数据和选通可用,低电平写入数据和选通不可用。
WREADYSlave写就绪。该信号表示从机可以接受写入数据:高电平slave就绪,低电平slave未就绪

值得注意的是 AXI4 不再支持 WID 信号,这和 AXI4 的乱序机制有关,AXI4 规定所有数据通道的数据必须顺序发送。

WDATA 与常见的握手信号不再赘述,WDATA 的可使用位宽可以见上文。WSTRB 信号用于标记传输数据中有效的字节,每个 WSTRB 位对应一个字节的位宽,比如数据位宽为 64 位,那么 WSTRB 信号的位宽就是 1 个字节,共 8 位。

WLAST 标识一次突发传输中最后一次数据传输,如果没有正确的 WLAST 的信号,就会造成写入地址的混乱,导致slave无法正确接收写数据,从而造成slave不再拉高 READY 信号的现象。

7.4 写回复通道

信号Source描述
BID[3:0]Slave响应ID。写入响应的标识标签。BID值必须与slave响应的写入事务的AWID值匹配。
BRESP[1:0]Slave写入响应。该信号指示写入事务的状态。两位编码,允许的响应为OK、EXOKAY、SLVERR和DECERR。
BUSERSlave用户信号。写回复通道中的可选用户定义信号。仅在AXI4中受支持。
BVALIDSlave写入响应有效。该信号表示有效的写入响应可用:高电平写入响应可用,低电平写入响应不可用。
BREADYMaster响应就绪。该信号表示主机可以接受响应信息。高电平master就绪,低电平master未就绪。

与写数据通道不同,写回复通道支持 BID,即支持乱序的写回复,关于乱序的问题,我们稍后再谈。BRESP 回复上一次的写状态。

7.5 读地址通道

信号Source描述
ARID[3:0]Master读取地址ID。该信号是信号读取地址组的识别标签。
ARADDR[31:0]Master读取地址。读取地址总线提供读取突发事务的初始地址。只提供突发的起始地址,与地址一起发出的控制信号详细说明了如何为突发中的其余传输计算地址。
ARLEN[3:0]Master突发长度。突发长度给出了突发中传输的确切数量。此信息确定与地址相关的数据传输数量。
ARSIZE[2:0]Master突发大小。该信号指示突发中每次传输的大小。
ARBURST[1:0]Master突发类型。突发类型以及大小信息详细说明了如何计算突发内每次传输的地址。
ARLOCK[1:0]Master锁类型。该信号提供了有关传输的原子特性的附加信息。
ARCACHE[3:0]Master缓存类型。该信号提供了有关传输的可缓存特性的附加信息。
ARPROT[2:0]Master保护类型。该信号为事务提供保护单元信息。
ARQOSMaster服务质量。为每个读事务发送的QoS标识符。仅在AXI4中实现。
ARREGIONMaster区域标识符。允许从设备上的单个物理接口用于多个逻辑接口。仅在AXI4中实现。
ARUSERMaster用户信号。读地址通道中的可选用户定义信号。仅在AXI4中受支持。
ARVALIDMaster读取地址有效。当该信号为高时,表明读取地址和控制信息有效,并将保持稳定,直到地址确认信号ARREADY为高。高电平表示地址和控制信息有效,低电平表示地址和控制信息无效。
ARREADYSlave读取地址就绪。该信号表示slave已准备好接受地址和相关控制信号:高电平slave就绪,低电平slave未重新启动

读地址通道和写地址通道的信号十分类似。

7.6 读数据通道

信号Source描述
RID[3:0]Slave读取ID标签。该信号是信号读取数据组的ID标签。RID值由从属服务器生成,并且必须与它所响应的读取事务的ARID值匹配。
RDATA[31:0]Slave读取数据。读取数据总线可以是8、16、32、64、128、256、512或1024位宽。
RRESP[1:0]Slave读取响应。该信号指示读取事务的状态。允许的响应为OK、EXOKAY、SLVERR和DECERR。
RLASTSlave最后阅读。该信号表示读取突发中的最后一次事务。
RUSERSlave用户信号。读取数据通道中的可选用户定义信号。仅在AXI4中受支持。
RVALIDSlave读取有效。该信号表示所需的读取数据可用,并且读取传输可以完成:高电平表示读取数据可用,低电平表示读取数据不可用。
RREADYMaster读取准备就绪。该信号表示master可以接受读取的数据和响应信息:高电平表示master就绪,低电平表示master未就绪

读数据通道与写数据通道类似,区别有两点:

  • 支持 RID 信号
  • 因为读回复信息在读数据通道上传递,所以集成了 RRESP 信号,用于返回读状态,值得注意的是读回复信号和读数据一样,发送方(source)为从机(slave)。

7.7 通道间的关系

首先,再次声明一般情况下 AXI 的五个通道之间是独立的。但是 AXI 的通道间需要保证以下三种联系(relationship):

  • 写回复必须在其所属事务的最后一个写数据完成后(write response must follow the last write transfer in the transaction)
  • 读数据必须在接收到读地址信号后产生
  • 通道间的握手需要满足通道间的握手依赖性(handshake dependencies)

除了这三种联系外,通道之间保持独立关系。

有关AXI协议(4):AXI通道上的信号的更多相关文章

  1. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  2. ruby - HTTP POST 上的 SSL 错误(未知协议(protocol)) - 2

    尝试通过SSL连接到ImgurAPI时出现错误。这是代码和错误:API_URI=URI.parse('https://api.imgur.com')API_PUBLIC_KEY='Client-ID--'ENDPOINTS={:image=>'/3/image',:gallery=>'/3/gallery'}#Public:Uploadanimage##args-Theimagepathfortheimagetoupload#defupload(image_path)http=Net::HTTP.new(API_URI.host)http.use_ssl=truehttp.verify

  3. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  4. Verilog使用inout信号的方法 - 2

    目录一、inout在设计文件中的使用方法1.1、inout的第一种使用方法1.2、inout实现的第二种使用方法1.3、inout使用总结 二、inout在仿真测试中的使用方法一、inout在设计文件中的使用方法在FPGA的设计过程中,有时候会遇到双向信号(既能作为输出,也能作为输入的信号叫双向信号)。比如,IIC总线中的SDA信号就是一个双向信号,QSPIFlash的四线操作的时候四根信号线均为双向信号。在Verilog中用关键字inout定义双向信号,这里总结一下双向信号的处理方法。1.1、inout的第一种使用方法  实际上,双向信号的本质是由一个三态门组成的,三态门可以输出高电平,低电

  5. ruby - 在 Ruby 中使用 GTK3 自定义信号 - 2

    我想从gtk3中的Widget发出自定义信号。在GTK2中,有一个名为signal_new的函数来创建一个新信号。您可以在此处查看示例:https://github.com/ruby-gnome2/ruby-gnome2/blob/ec373f87e672dbeeaa157f9148d18b34713bb90e/glib2/sample/type-register.rb在GTK3中,这个功能似乎不再可用。那么在ruby​​的GTK3中创建自定义信号的新方法是什么? 最佳答案 GTK3更改为使用define_signal方法而不是si

  6. ruby - QtRuby 使用参数/参数连接信号和槽 - 2

    我想知道如何连接到带参数的信号(使用Rubyblock)。我知道如何连接到一个不带参数的:myCheckbox.connect(SIGNAL:clicked){doStuff}但是,这不起作用:myCheckbox.connect(SIGNAL:toggle){doStuff}它不起作用,因为切换槽采用参数voidQAbstractButton::toggled(boolchecked)。我怎样才能让它与参数一起工作?谢谢。 最佳答案 对您的问题的简短回答是,您必须使用slots方法声明要连接的插槽的方法签名:classMainGU

  7. ruby - 发送信号时运行代码,但不要在 Ruby 中捕获信号 - 2

    我有在服务器上运行的代码,在服务器硬关闭之前,发送了一个信号SIGTERM让我的代码知道它需要清理。我想在发生这种情况时运行代码并将信号发送回同一个程序,以便任何其他需要清理的代码都可以这样做。我不想捕获信号或改变信号行为,我只需要在我的程序的其余部分解释SIGTERM之前运行一些东西。目前我可以做类似的事情Signal.trap('TERM')doputs"Gracefulshutdown"exitend但如果同一个应用中的多段代码试图做同样的事情,它就不起作用了。例如:Signal.trap('TERM')doputs"Gracefulshutdown"exitendSignal.

  8. 网络实验之RIPV2协议(一) - 2

    一、RIPV2协议简介  RIP(RoutingInformationProtocol)路由协议是一种相对古老,在小型以及同介质网络中得到了广泛应用的一种路由协议。RIP采用距离向量算法,是一种距离向量协议。RIP-1是有类别路由协议(ClassfulRoutingProtocol),它只支持以广播方式发布协议报文。RIP-1的协议报文无法携带掩码信息,它只能识别A、B、C类这样的自然网段的路由,因此RIP-1不支持非连续子网(DiscontiguousSubnet)。RIP-2是一种无类别路由协议(ClasslessRoutingProtocol),支持路由标记,在路由策略中可根据路由标记对

  9. ruby - 如何测试 RSpec 中的信号处理,特别是 SIGTERM 的处理? - 2

    Heroku可能会出于各种原因向您的应用程序发送SIGTERM,因此我创建了一个处理程序来处理一些清理工作,以防发生这种情况。一些谷歌搜索没有给出任何关于如何在RSpec中测试它的答案或示例。这是基本代码:Signal.trap('TERM')docleanupenddefcleanupputs"doingsomecleanupstuff"...exitend当程序收到SIGTERM时,测试调用此清理方法的最佳方法是什么? 最佳答案 使用Process.kill'TERM',0将信号发送到RSpec并测试调用处理程序。确实,如果信号

  10. ruby - 我怎样才能告诉 unicorn 理解 Heroku 的信号? - 2

    也许你已经看到了这个......2012-03-07T15:36:25+00:00heroku[web.1]:StoppingprocesswithSIGTERM2012-03-07T15:36:36+00:00heroku[web.1]:StoppingprocesswithSIGKILL2012-03-07T15:36:36+00:00heroku[web.1]:ErrorR12(Exittimeout)->Processfailedtoexitwithin10secondsofSIGTERM2012-03-07T15:36:38+00:00heroku[web.1]:Proces

随机推荐