AXI总线学习连载(8)

鲁迅曾经说过:

学硬件,不是学哪里查哪里,有一些东西是必须系统的学的,不管是嵌入式还是FPGA,硬件学习的积累一定要是系统的。

我也曾经说过:

英文手册非常重要,这是学习硬件标准的不二法门,没有捷径,我们这一行可以不说英语,英语也可以像我和我某些同事一样口语富有乡土气息,但是一定要能熟练看,内心看,做阅读理解一样看

跟着这篇博客,慢慢学习,对着官方文档,不仅可以学会这个协议,更能够学会硬件学习的方法,所谓举一反三。(我说的比鲁迅还多)

好了既然是axi,那么这么说,只要你使用arm架构的芯片,arm和fpga(pl 可编程逻辑)部分通信,或者外部设备通信,你都会用上这个协议。所以一起来学习,打工人!就该把自己的时间全部放在上面

好了不废话了,一起来探索吧!

不要厌烦枯燥,理论学习是在实践之前的必经过程,当学习完axi原型后,我也会专门贴出来一个axi协议使用开发的详细详细详细的n次方的接口解析。请学习过程中不要放弃,不要觉得枯燥!! (其实说给自己听的)

qq:2198187857  这里放出来一下,就是希望朋友们指导,有不足的地方批评教育一下,作为新手,还是很认真在学习

--------------------------------------------------------------分割线-----------------------------------------笨蛋看不见-----------------------------------------

上一个连载我们学习了数据地址通道当中传输方式,包括首地址,对齐地址,burst size burst length等关键概念,其实这些东西就是我们说的读写控制信息和控制信息,上一讲我们细致分析了机制。回过头来我们

定性看,其实不就是规定了,接下来数据往哪个地址写,地址后续怎么变化,然后有加上了一系列的规范限制。

这一个连载我们将要学习,有了这些控制信号以后,读写数据在数据通道内的架构。说白了,前面的连载先学习握手机制,再学习读写地址通道操作,这一次就是读写数据通道的操作。

这个部分可能会持续两到三个连载,主要会讲解,在不同的burst size和burst length 和burst type的约束下,AXI原型在读和写数据总线上是如何进行传输的,并且也向我们展示了混合字方式和不对齐方式传输。

这里有两个新概念什么叫做混合字方式,什么叫做不对齐方式。后续我们会拿出来专门讲解。这个专题大致目标就是如上叙述,包含的流程概念如下:

这四个概念,我也不知道怎么翻译为好,很多书上有不同的叫法,大概就这么叫吧:

write strobes :叫做写字节通路

narrow TRANSFER:狭窄传输

BYTE invariance :字节不变性

unaligened  transfer:不对齐传输

这四个大概念,就是我们接下来会讲解的,加上刚才说的混合字模式和不对齐方式

mixed-endian 混合字模式

unaligened transfer 不对齐传输

--------------------------------------------------------------分割线-----------------------------------------笨蛋看不见-----------------------------------------

第一个概念    write strobes 写字节通路。

同样先放出官方英文定义,在进行解析,我们可以看见上面出现了三个信号,根据连载2当中给出的信号列表,我们翻回去查阅,这里我就单独拿出来

这两个信号是在写数据通道内(W通道),先看第一个WDATA很好理解就是写入的数据,第二个WSTRB叫做写选通,这个信号表示的是,在WDATAD的数据哪一些字节是有效的,这就是理解为哪几个八位有效,

后一句翻译就是WSTRB每一位的1,表示WDATA内每一个八位,这里可能还是有点模糊,我们回到第一张图。

第一张图翻译说WSTRB信号如果哪一位是高电平,则代表数据通路上WDATA哪八位是有效。他说的太冗长举个例子。假设WSTRB是1001,则代表WDATA最高八位和最低八位有效。这个类似于mask的效果。

这里指出了,只有WDATA中数据有用,即WVALID高电平,才能够说字节通路开始有用,如果说WVALID为低电平,也就是说数据没有用,则这个时候字节通路即WSTRB可以为任意值,但是建议如果WVALID

为低电平,还是建议WSTRB维持上次的值或是低电平,这个很好理解,从代码风格讲,逻辑更清晰更完善,从电路角度看,WSTRB的所拓扑的电路结构,不存在更多电平变化,对于系统更加稳定。我们知道如果

电路是cmos电路,或者是FinFET型的,电平转换意味着动态功耗大幅增加,如果电路能够维持稳定,则基本保持一个静态工作的模式,更能降低能耗。

--------------------------------------------------------------分割线-----------------------------------------笨蛋看不见-----------------------------------------

第二个概念  narrow transfer

根据官方定义,当主设备发起的一次传输,比总线宽度更窄,其实就是burst size 比总线宽度小,那么地址和控制信息(burst的type size length)决定了到底是哪几位在传,也就是哪几个字节通路在传送

注意在增长和倾斜传输这两者模式里面,每一拍的传送用的是不同的字节通路

在固定模式下,固定了字节通路。

怎么理解这个呢,把官方图拿出来就可以了

其实可以看见WDATA是32位,然后有五次transfer,每次传送8bit,这样说也不详细。

我们看第一次传输,地址总线是32,字节通路选择的是第0到第7位,这时候WSTRB其实是0001,对于第一次传输。

第二次传输,由于是INCR模式,地址从0到4,但是WSTRB其实是0010,所以只有中间第8到第15位的WDATA写进去

第三次地址通路变成0100,第四次1000,第五次0001,所以这个就很好理解什么是NARROW transfer,其实就是,字节通路

存在然后总线上只有一部分是传输的,但是都是字节为单位哈。

还有一个narrow的例子

这个就更好理解了,作为读者思考吧。根据我自己的结论第一次传输wstrb是11110000,第二次00001111,第三次11110000

md,其实我第一次看的时候半天也没弄明白,这里就提示一下!!!这种传输,传输的数据为什么少,是因为字节通路存在,然后和size type length 共同决定的!!!!!

所以再一次强调不要觉得这东西简答,其实很连贯的,总线协议计算机组成原理讲的很简单,这是一个实际的总线,而且是广泛用,当前前沿或者成熟的总线技术,学懂了,就真的

明白什么是总线了,就像都喜欢美女,都知道美女,但是都没有见过,突然有一天,你找了个美女了!你就真懂了。。。。。。

--------------------------------------------------------------分割线-----------------------------------------笨蛋看不见-----------------------------------------

总结

这次讲的两个概念,字节通路,狭窄传输。

这两个其实是互相相关的概念,字节通路是数据通道内的一个开关,狭窄传输是由burst size length type 和字节通路,还有axi总线规则制定的一种transfer方式。

这两个概念一方面是新知识,一方面也是复习前面。好了现在我做一个自我检测习题。用于梳理概念。也当一个中期总结。

首先我们定义一次burst ,机制是incr 起始地址我们就安排在0x0,定义WDATA是32位,那么假设我的wstrb一直在变化

第一拍   1011

第二拍   1100

第三拍   1011

第四拍    0011

然后起始地址0x0 burst size 设置32 ,字节通路已经有了,burst length就是4吧(因为这里就用了四拍),然后传输开始

画一个表格,

画出来就是这样的是不是很简单。但是别忘了 记得4kB地址边界,然后tpye不同,造成的对齐影响,还有上一次讲的,我们建议对齐

那么我给一个命题

如果我希望每一次都传一个16位的定点数(好吧这其实就是我现在做的,笔者自己写的一个接口,作为练习去替代这个axi bram controller)

这时候从设备起始就是这个bram,那么bram配置是32位位宽,然后深度1024,有人问不是说传输burst不能超过4kB,你这32bit*1024都多少KB,再一次强调,这是说单次burst不超过4KB

你可以第二次burst 调整起始位置就可以了,在AW通道内改就可以了。

好了继续问题,现在我说了建议对齐传输,这样读取好读取,现在我们知道,数据位宽是32位,但是我只传16,也就是WSTRB是0011了,然后继续,一共16个数,虽然一个32位我每次只用了

16,但是还是耗费了资源,所以其实我这个行为传了32*16也就是64BYTES,并没超过边界4KB,这样我们就有了参数

来统计一下

WDATA 32bit

burst size 4

burst type incr

start 0x0

burst length 16

对了这里补充一下,就是地址增长怎么算,其实我们在嵌入式里面写,其实是用offset 偏移量来表示,比如这里就要偏离4,即第一次地址为0第二次就应该是4,这个其实就是burst size。

好了这样我们就可以开始传数据了。

逻辑就是

AW通道握手完毕,好了传START地址,然后size length type都传过去,分别用AWSIZE AWLEN AWBURST这三个信号线写,记得给这些信号线赋值的时候要注意加不加1,或者减1,

此时 AWSIZE 是4代表四个字节

AWLEN 是1111 提醒一下length=AWLEN+1;!!!!!

AWBURST 01 代表burst类型为增长型

好了这时候控制信息和起始地址完毕,可以开始写W通道了

因为我们size是32位,但是我们其实只需后16位数据,所以W握手开始了,则WSTRB则变成0011

这时候数据在写进来,好了就完成了!!!!撒花!!!!!

当然写完了还需要响应这就之后讲解了。这一次是写数据通道的东西,提醒一下这仅仅是对于写行为,不是读哈!!!读是没有这个字节通路这一说的。所以如果你是不对齐写进去,读起来会

很麻烦呢。。。。。。

最后把这个图画出来,刚才讲的这个传输模式,虽然原理简单,但是涉及的逻辑不简单,然后在编程环节,笔者也花了很多时间,由于工作环境限制,所以就不放细节代码了。

学会了这个逻辑就大胆尝试! 这是我的老师告诉我的,不要怕错!错了按着学过的逻辑去调节就好了。

成功的时候是很快乐的呢

AXI总线学习-------从零开始详细学-------------连载(8)读数据通中字节通路,narrow transfer相关推荐

  1. AXI总线学习-------从零开始详细学-------------连载(9)读数据通中字节不变性

    AXI总线学习连载(9) 鲁迅曾经说过: 学硬件,不是学哪里查哪里,有一些东西是必须系统的学的,不管是嵌入式还是FPGA,硬件学习的积累一定要是系统的. 我也曾经说过: 英文手册非常重要,这是学习硬件 ...

  2. AXI总线学习(AXI34)

    AXI总线学习 AXI协议的主要特征 主要结构 通道定义 读写地址通道 读数据通道 写数据通道 写操作回应信号 接口和互联 寄存器片 基本传输 Read burst Overlapping read ...

  3. AXI 总线学习记录

    AMBAaxi的特点: ​ 适合高带宽和低延迟的设计: ​ 能够在不适用复杂桥的情况下确保高频操作: ​ 满足广泛组件的接口需求: ​ 适合于带有高初始化延迟的内存控制器: ​ 为互联架构的实现提供灵 ...

  4. AXI 总线协议学习笔记(2)

    引言 从本文开始,正式系统性学学习AXI总线. 如何获取官方协议标准? 第一步:登陆官网:armDeveloper 第二步:登录,无账号需要注册 第三步:点击文档 第四步: 第五步:浏览页面建议下载下 ...

  5. 《Python深度学习从零开始学》简介

    #好书推荐##好书奇遇季#深度学习入门书<Python深度学习从零开始学>,京东当当天猫都有发售.从模型和实验入手,快速掌握深度学习技术. 业内大咖强力推荐!!!武汉大学信息管理学院教授 ...

  6. AXI 总线协议学习笔记(4)

    引言 前面两篇博文从简单介绍的角度说明了 AXI协议规范. AXI 总线协议学习笔记(2) AXI 总线协议学习笔记(3) 从本篇开始,详细翻译并学习AXI协议的官方发布规范. 文档中的时序图说明: ...

  7. AXI 总线协议学习笔记(3)

    引言 上篇文章主要介绍了 AMBA以及AXI协议的基本内容,本文接续前文,继续介绍AXI协议的 原子访问.传输行为和事务顺序等. AXI 总线协议学习笔记(2)https://blog.csdn.ne ...

  8. Xilinx-ZYNQ7000系列-学习笔记(10):AXI总线

    Xilinx-ZYNQ7000系列-学习笔记(10):AXI总线 1.AXI总线概述 在ZYNQ中有支持三种AXI总线,拥有三种AXI接口,当然用的都是AXI协议.其中三种AXI总线分别为: AXI4 ...

  9. 从零开始单排学设计模式「UML类图」定级赛

    阅读本文大概需要 3.5 分钟. 本篇是设计模式系列的开篇,虽然之前也写过相应的文章,但是因为种种原因后来断掉了,而且发现之前写的内容也很渣,不够系统. 所以现在打算重写,加上距离现在也有一段时间了, ...

最新文章

  1. Python中*args和**kwargs的区别
  2. python3.5.2-python升级 (2.6升级到3.5)
  3. YUMI~~强大的USB启动盘制作工具!!
  4. 英伟达账号登录邮箱验证收不到_【硬核教学】解决登录230锁定
  5. SVN中忘记上传自己写的工程,但是IP已经变了的解决方案
  6. 7.定义一个有80个元素的字符数组,从键盘输入一串字符,将其中的大写字母转换为小写字母,而将原来为小写的字母转换为大写字母,其他字符不变。
  7. java 异常继承体系_1、异常概述和继承体系 2、原因及处理方式 3、运行时异常 4、重写异常处理 5、Throwable类常见方法 6、自定义异常...
  8. 【NLP】毕设学习笔记(七)前馈神经网络代表者——卷积神经网络无公式理解
  9. 11.2.0.3 实例启动现在提供Large Pages Information大内存页信息了
  10. 小虾米的求助Massage
  11. 人民币大小写格式转换
  12. Android:将鼠标右键点击事件设置为返回功能
  13. 脉冲宽度调制(PWM)和DAC转换练习
  14. git生成SSH秘钥
  15. 中兴U880手机删除系统自带软件
  16. matlab典型环节性能仿真,实验一典型环节的matlab仿真
  17. 全球及中国酸性成纤维细胞生长因子行业投资前景与发展战略规划分析报告2022-2028年
  18. IntelliJ IDEA安装教程
  19. 大众文艺杂志大众文艺杂志社大众文艺编辑部2022年第9期目录
  20. 2017广州两日游(提高组总结)

热门文章

  1. python中字符串索引_Python字符串的索引与访问字符串中的字符
  2. 关于宽带ADC前端设计考虑ΙΙ:用放大器还是用变压器驱动ADC?
  3. SpringBoot+SOCKET服务端客户端
  4. 禁用 Windows 远程桌面连接(mstsc)快捷键
  5. 【业务模型】AARRR模型(海盗模型)
  6. C51的UART 串口通信
  7. js 取两个值之差的绝对值
  8. Windows鼠标移到图标上图标变黑,以及点击刷新背景变黑屏如何解决?
  9. 使用=React.PropTypes进行类型检测
  10. Asp.Net母版页的相关知识