【AXI】解读AXI协议原子化访问

芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球
四社区联合力荐!近500篇数字IC精品文章收录
【数字IC精品文章收录】学习路线·基础知识·总线·脚本语言·芯片求职·EDA工具·低功耗设计Verilog·STA·设计·验证·FPGA·架构·AMBA·书籍

在这里插入图片描述

一、写在前面

AXI协议相较于UART,SPI,I2C来说,无论是内容还是难度都上了一个层级,放在一篇文章中进行解读未免篇幅过长,因此,有关AXI一些共性的、通用的问题,作者单独以前缀为【AXI】的标题进行小范围的串联,最终再汇总为深入浅出解读AXI协议,与从零开始的Verilog AXI协议设计,此为作者所思所考的推进顺序,单看【AXI】的每一篇,可能很多读者未免感到有些管中窥豹的疑惑,但若等作者更完此专栏再行观看,从头到尾进行阅读,应该就会有有茅塞顿开的收获与领悟。

二、解读AXI协议的原子化访问

本次讨论的内容,原子化访问,其实是数字IC芯片设计中软硬件结合的一个很好的范例,如果读者是软件背景,那么对于这个概念一定不陌生,无论是NV的CUDA还是Intel的CPU,包括各类高级编程语言,如C#和JAVA中很多都会出现这个概念。理解原子化访问的最重要的部分就是对于 AXI协议中AxLOCK这组信号的理解,当然,原子化访问这一部分AXI3.0和AXI4.0的差异也很大,后文讨论的内容更多的是从AXI4.0的角度来进行的。

原子化访问的名字,其实很形象的描述了它的意义,原子通常不可分割,反映在原子化访问上,也是体现其不可分割的特性对于什么不可分割呢?

我们将一段32bit的地址,当成一个原子,那不就代表在执行原子化访问的这部分时间内,这部分的地址的对应的数据不能改变(比如跟着burst操作想单独改变它的高16位,或者单独改变它的低16位,不就相当于把原子拆开了),必须将它视为一个整体

2.1 AXI协议中原子的大小

多大的地址,能在AXI协议中作为最小的原子单位呢?协议中用“single copy atomicity size”来表示这个概念,外设的复杂程度不一样,因此针对于不同的外设“single copy atomicity size”的大小不一致也是显而易见的,对于复杂一点的设备,通常情况下使用的“single copy atomicity size”为64 bits,而对于简单一些的设备,使用的“single copy atomicity size”为32 bits即可。以下的图片可以很好的说明64bits与32bits的划分原则

在这里插入图片描述

2.2 信号列表

2.2.1 AXI3.0版AxLOCK信号列表
AxLOCK[1:0]Access Type
0b00Normal access
0b01Exclusive access
0b10Locked access
0b11Reserved
2.2.2 AXI4.0版AxLOCK信号列表
AxLOCKAccess Type
0b0Normal access
0b1Exclusive access

在AXI4.0中,ARM取消了对Locked access的支持,仅保留正常访问和排他性访问两种访问形式。因此后文中我们讨论的更多也是Normal access和Exclusive access这两种方式

2.2.3 反馈信号xRESP

这里出现的xRESP,实际上是指RRESP和BRESP这两个信号,RRESP[1:0]是对于AXI协议读操作的反馈信号(读数据通路),BRESP[1:0]是对于AXI协议写操作的反馈信号(写回复通路)。四种状态如下面的表格所示,不过在讨论原子化操作的过程中,其实仅需要理解OKAY和EXOKAY这两种状态即可

xRESP[1:0]ResponseDescription
0b00OKAY正常访问(Normal access)成功
0b01EXOKAY排他性访问(Exclusive access okay)成功
0b10SLVERR从设备错误
0b11DECERR解码器错误
2.2.3.1 解读OKAY信号

OKAY信号是对于绝大多数transaction操作的反馈信号,具体返回OKAY的可能有以下几种情况

  1. normal access成功
  2. exclusive access失败
  3. 针对于主设备向不支持排他性操作的从设备发送exclusive access访问的反馈
2.2.3.2 解读EXOKAY信号

若xRESP反馈EXOKAY这个信号,只存在一种可能,就是 排他性访问 (Exclusive access)成功。

2.3 排他性访问(Exclusive accesses)

2.3.1 排他性访问过程
  1. 主设备针对于某个地址,执行读取操作,其中AxLOCK设定为排他性访问,从设备在步骤一后就开始监测该地址信号了。
  2. 一段时间后,主设备针对于相同的地址,进行“写操作”,其中AxLOCK同样设定为排他性访问步骤二的AWID需要和步骤一的ARID相匹配
  3. 反馈信号:
    成功(EXOKAY)!意味着在这段时间内,没有其它的主设备企图去改变步骤一读取操作中锁定的地址,那么步骤二的排他性写操作可以更新memory
    失败(OKAY)!意味着在这段时间内,有其他的主设备改变了步骤一读操作中锁定的地址,那么memory不能更新
2.3.2 排他性访问要求

Exclusive accesses对于从设备的硬件提出了新的要求,一般情况下是新增加了一个monitor去监测来自主设备的transaction传输信号,假如在这段时间内其他主设备对地址没有操作,皆大欢喜,更新地址对应的数据即可,但是假如排他性访问失败,monitor会去阻挡主设备对这段地址的写入,并将反馈返回给主设备(比如CPU),这样,CPU根据自身的要求重新分配地址或者过一段时间再尝试,通过这种形式,我们保证了读写这一整个过程中,软件知道“是不是只有一个线程(Master)在写这段地址(其他线程在这个过程可以读)”,避免了线程之间的冲突。
当然对于排他性访问还有如下的要求

  • 1 ARID与AWID需要相同
  • 2 读和写的地址,burst size、burst length、其他控制信号需要保持相同
  • 3 排他性访问的burst lentgh transfer不能超过16
  • 4 排他性传输的地址需要对齐transaction的总字节数
  • 5 AxCACHE信号需要确保正处于监测状态的从设备可以接收到transaction(换言之AxCACHE不能是Cacheable的)

2.3 正常访问 (Normal accesses)

在正常访问的状态下,没有monitor,也没有监测,按照burst突发传输的机制,也就是最简单的状况去,读写memory数据即可。

2.4 为什么从AXI3到AXI4取消了Locked Type?

我们之所以讨论原子化操作,其实是为了避免多线程的冲突,那么用更为简单的方式,直接将这段地址锁定上,只允许一个固定的主设备去操作它,任何其它的设备的访问都被拒绝,在硬件层面上用更简单粗暴的方式实现线程互锁,可不可行呢?
肯定是可行的,这也就是AXI3中Locked Type所想实现的功能,只有当解锁信号到的时候,其他设备才可以访问这段地址,但是这种方式对性能影响很大(特殊地址的长时间占用,完全完成才解锁,对比只有写的时候去判断一下更新可不可行再给主设备反馈),所以取消了Locked Type

三、其他数字IC基础协议解读

3.1 UART协议

3.2 SPI协议

3.3 I2C协议

3.4 AXI协议

  • 20
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
要将 AXI(Advanced eXtensible Interface)协议转换为 AXIS(AXI Stream)协议,你需要进行一些逻辑转换和接口配置。下面是一种可能的实现方式: 1. 首先,你需要了解 AXIAXIS 协议之间的差异。AXI 是一种基于地址的协议,用于处理存储器访问和外设交互,而 AXIS 是一种基于流的协议,用于高速数据传输。 2. 在实现转换逻辑之前,你需要确定 AXI 接口的类型(AXI4、AXI4-Lite 等)和 AXIS 接口的宽度(数据位宽、有效位宽等)。 3. 接下来,你可以编写一个转换模块,该模块将 AXI 接口转换为 AXIS 接口。这个模块应该包括一个 AXI 接口和一个 AXIS 接口,并且在内部进行数据的转换和调整。 4. 在转换模块中,你需要根据 AXI 协议的读写信号(如 ARVALID、AWVALID、RVALID、WVALID 等)以及数据和地址信号(如 ARADDR、AWADDR、RDATA、WDATA 等)来生成相应的 AXIS 协议信号(如 TVALID、TREADY、TDATA 等)。 5. 在转换模块中,你还需要处理流控制信号,如 AXIS 协议中的 TKEEP(保持信号)和 TLAST(最后一个信号),以及 AXI 协议中的 ARBURST、ARBURST、RRESP、WRESP 等。 6. 最后,你需要在设计中实例化转换模块,并将其与其他模块连接起来。确保接口信号的连接正确,并根据需要进行时钟域和数据宽度的适配。 需要注意的是,这只是一种基本的实现方式,具体的转换逻辑和接口配置可能因应用场景和具体要求而有所不同。在实际应用中,你可能还需要考虑时序约束、数据流控制、错误处理等方面的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张江打工人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值