AXI总线学习-------从零开始详细学-------------连载(7)读写处理架构,burst介绍,burst细节定义(burst type burst address)
AXI总线学习连载(7)
鲁迅曾经说过:
学硬件,不是学哪里查哪里,有一些东西是必须系统的学的,不管是嵌入式还是FPGA,硬件学习的积累一定要是系统的。
我也曾经说过:
英文手册非常重要,这是学习硬件标准的不二法门,没有捷径,我们这一行可以不说英语,英语也可以像我和我某些同事一样口语富有乡土气息,但是一定要能熟练看,内心看,做阅读理解一样看
跟着这篇博客,慢慢学习,对着官方文档,不仅可以学会这个协议,更能够学会硬件学习的方法,所谓举一反三。(我说的比鲁迅还多)
好了既然是axi,那么这么说,只要你使用arm架构的芯片,arm和fpga(pl 可编程逻辑)部分通信,或者外部设备通信,你都会用上这个协议。所以一起来学习,打工人!就该把自己的时间全部放在上面
好了不废话了,一起来探索吧!
不要厌烦枯燥,理论学习是在实践之前的必经过程,当学习完axi原型后,我也会专门贴出来一个axi协议使用开发的详细详细详细的n次方的接口解析。请学习过程中不要放弃,不要觉得枯燥!! (其实说给自己听的)
qq:2198187857 这里放出来一下,就是希望朋友们指导,有不足的地方批评教育一下,作为新手,还是很认真在学习
--------------------------------------------------------------分割线-----------------------------------------笨蛋看不见-----------------------------------------
上一个连载学习了burst size 和burst length 回忆一下,我们知道再一次burst的过程里,burst size 实际上是数据总线位宽,burst length 是拍数,两个的乘积就是数据的总量,但是数据总量不能超过4KB的
容量。
好了现在这一次我们学习burst size 和burst address
在AXI原型当中有三种类型的burst ,我们一个一个认识
还是放出官方的英语注解进行解析
第一种叫做fixed burst机制,这时候每一次都是重复的往这一个地址写东西,这个很好理解,这个其实就是FIFO的作用,往一个地址的地方重复的写入。这个很简单
第二种就是我们说的增长burst机制,顾名思义,这个方式是每一次传输都在上一次传输地址的基础上增长,地址到底增长多少取决于burst size ,其实就是要是burst size每次增加
多少个字节相应的做出变化,官方做了一个实例,假设每一次传输的burst size 都是32位即4个字节,由于是字节编址,所以下一次的传输地址会增加4,但是要记住地址通道
其实只传输首地址,至于后续地址怎么变化,其实就是取决于burst type。
这种方式,其实常用于一般的存储单元的有序访问,比如ram读写什么的
接下来倾斜模式,这个翻译对不对我也不知道,就这么叫吧,反正也是英文用的多,其实这个机制和刚才增长机制很像,除了一点不同就是当写到最高地址的时候
又回到了最开始的最低起始地址。当然有如下的要求
在wrapping模式里有以下的约束
开始地址必须和这个传输的burst size对齐,什么叫做对齐,其实就是,你存的数据是多少位,就必须给够,假设burst size 是32 那么第一次地址为0 则下一个为4
在下一个是8.这样堆积起来,自己可以画一个图看看。
第二个就是burst length 必须是2,4,8,16
其实就是不超过4KB的一个保证而已。
对于这种wrap的burst 有以下表现
常常最低地址是用来对齐这个最开始的burst size的,所以接下来的传输,如果我们要的到这种burst边界在哪里,我们可以想,burst size 决定了每一次需要占据
多少地址的字节,那么burst size 就表示单次transfer有多少个字节,然后乘以这个burst length 就是整个burst有多少字节,这样一来就知道了最后一个字节地址是
多少了,那么这个字节就是边界了。
在每一次传输之后,地址都会增长,按照incr模式一样,只是需要对齐,但是注意上限。如果有一次增长地址变成了边界地址加上burst size接下来则会倾斜回原来的
边界地址。
这种机制常常用来为cache 的访问。
当然在我们地址通道内肯定会需要一个信号先表示这种机制,所以如图
AXBURST 代表ARBURST 和AWBURST
--------------------------------------------------------------分割线-----------------------------------------笨蛋看不见-----------------------------------------
在介绍burst address之前我们必须要复习下我们学过的三个表示burst的指标
1.burst size 数据总线宽度
2,burst length 一次burst 一共多少拍
3,burst size 代表读写的方式,有三种方式可以选择
对应的信号线分别是
AXSIZE
AXLEN
AXBURST 请注意这些都是地址通道内部的控制信号。
下面开始介绍burst address 其实burst address是很多术语组成的用来决定这个burst当中涉及的地址和字节传输数,类似几个计算公式
第一个是起始地址 是由主设备发送的
第二个Number_bytes 每一次transfer中字节的最大数,其实和burst size差不多
第三个是每次传输的字节通路的个数,这个比较绕,其实就是说数据总线上有几个字节是用来传数据的
第四个对齐地址 也就是每一次传输,地址都按照对齐的方式,举个例子就是挨个挨个放好,画个图
灵魂画手作图。
第五个 burst length 就是burst内有多少拍
第六个 address_n 这个好理解就是第几次传输的地址,n如果是1就是第一次传输的地址
第七个 wrap_boundary 在一次wrap传输的最低的那个地址
第八个 lower_byte_lane 这个不好理解,其实这个就是说因为每次传输都是很多位,然后除以八就是字节,最低八位每次占据的地址,就是 lower_byte_lane
第九个upper_byte_lane 这个很像前面的,每次传输都是很多位,所以除以8就是多少个字节,这个表示最高的八位每一次传输所要去的地址
最后一个就是四舍五入的意思,int(x)就是代表对x四舍五入
好了光说不练假把式
现在我们开始一个实战!!!!把我们设计要用的真实量和这些概念合在一起
1.start_address=AXADDR 这个好理解其实就是AXADDR传递都是当前burst 的首个地址
2.number_bytes=2^AXSIZE 这个需要把表格拿出来,我们说的burst size 是指数据总线有多少个字节宽,但是对于AXSIZE是表示他的信号线是有区别的,其实是2^AXSIZE=burst size
我再把上一连载图放出来,你就知道了,这么说来就知道了。根据刚才的讲解number_bytes就是说数据总线上有多少字节,所以我之前说其实就是burst size。
3.burst _length 同样的是AXLEN+1
4.
这是对齐地址,其实就是对齐方式传输的地址,即每一次增加多少,这个其实没有必要按照这个计算,就按照我画的图来继续,图上这个公式
其实是从任意其实开始算,我们还是用刚才的图,假设start_address是5,然后burst size 就是number bytes是1(传一个字节),那么算下来
就是5。如果burst size 是16那么如果要对齐起始地址就是0;
用这么图去演算就可以。
5.Address_1=start_ADDRESS
第一次传输的地址就是起始地址嘛
6. 对一次增长burst和倾斜wrap,当还在地址增长阶段,就是说地址还没有回去的时候,这个公式决定了,第N
次传输地址是多少
ADDRESS_N=Aligned_Address+(N-1)xnumber_bytes其实就是其实的那个地址加上经过了传输多少个
字节,因为每一个字节就是一次地址加
7.对于一次wrap burst ,这个warp_boundary 按照如下定义
这个算起来太麻烦了。。。所以还是记住,还是按照我这个图算吧。。。你每次穿多少字节,burst length是多少
然后burst size 是多少,按照字节一个一个加吧,,,,,这个真的太麻烦了。。。。。验证一下起始结果是对的
好了 接下来的量其实都是很好推算的,只要清楚了概念,我就把剩余几个放在这里
其实我在使用这个访问cache的时候其实没有这么复杂,按照size length 还有总量一次次去算就可以了,不用太在意。
--------------------------------------------------------------分割线-----------------------------------------笨蛋看不见-----------------------------------------
接下来我会手工打一个书上的伪代码,表示的是数据transfer的逻辑,并且附上注释
//data transfer
//===========
data transfer(start_addr,number_bytes,burst_length,data_bus_bytes,mode.iswrite) 这一句其实体现整个transfer其实是受控于其中几个变量的,这些都是我们熟悉的
//这里两个我们需要注意下,mode其实是burst type
//iswrite是读写模式 true代表写模式,false代表读模式
assert mode in {fixed,wrap,incr} //这里是确定burst type
addr=start_addr//给起始地址
aligened_address=(int(addr/number_bytes)*number_bytes)//如果用对齐传输,则用这个作为起始地址
aligned=(aligened_address==addr)这个是判定条件,如果addr等于对齐地址则代表原来传输本来就是对齐,如果不等于则原来传输不是对齐,建议调整为对齐
dtsize=number_bytes*burst_length//代表一个burst内总的数据量单位是字节哈注意一下
if mode==warp then//这个情况是如果是wrap模式,接下来就需要低边界和高边界
lower_wrap_boundary=int(addr/dtsize)*number_bytes//这个看前面的表格,如果起始地址是0就直接为0
upper_wrap_boudary=lower_wrap_boundary+dtsize//这个好理解,全部字节如果都装满了就到了上边界
for n=1toburst_length //这表示第一次到第n次传输的循环
lower_byte_lane=addr-(int(addr/data_bus_bytes))*data_bus_bytes//这个很简单起始就是指每一次transfer最低字节所去的地址
if aligned then
upper_byte_lane=lower_byte_lane+number_bytes-1//这个更好理解了,对齐方式最高字节,就按照递增往上走就可以了,这是对齐模式
else//如果不是对齐模式,其实也不建议这么用
upper_lane_=aligned_address+number_bytes-1-(int(addr/data_bus_bytes))*data_bus_bytes//真不建议用不对齐的方式,,很混乱
//perform data transfer 好了确定了地址,但是还要说明这个地址是读的还是写的
好了后面的伪代码就没什么意思了。就是设置是读还是写,其实这些都在配置界面,创建ip核的时候会写好,但是
我们需要对此理解之后,往上面加我们自己的逻辑
--------------------------------------------------------------分割线-----------------------------------------笨蛋看不见-----------------------------------------
今天干货满满了,这就完完全全解析清楚了所有地址和地址控制信号了,接下来就是真正的读和写数据通道
我们会更细致理解transcation transfer 还有这个burst 还有对齐和非对齐
如果有遗忘回头来看就是了,一定记住,记住原理是最重要的,这是我们设计的基本功
!!!!!
强调一次,如果是设计一定要学好这节,地址通道的安排非常重要,虽然现在eda工具已经不需要我们自己写这个接口,但是我们会在这个接口基础上去
写各种新的逻辑,所以如果你想完全掌握你所写的axi接口的ip核 是必备的!!!!!!
今天九点15 昨晚肝到三点,今天打一把战地就休息了,好好的学习真知识,少内卷,安安心心追求真知就好
晚安!明天见!
AXI总线学习-------从零开始详细学-------------连载(7)读写处理架构,burst介绍,burst细节定义(burst type burst address)相关推荐
- AXI总线学习-------从零开始详细学-------------连载(9)读数据通中字节不变性
AXI总线学习连载(9) 鲁迅曾经说过: 学硬件,不是学哪里查哪里,有一些东西是必须系统的学的,不管是嵌入式还是FPGA,硬件学习的积累一定要是系统的. 我也曾经说过: 英文手册非常重要,这是学习硬件 ...
- AXI总线学习-------从零开始详细学-------------连载(8)读数据通中字节通路,narrow transfer
AXI总线学习连载(8) 鲁迅曾经说过: 学硬件,不是学哪里查哪里,有一些东西是必须系统的学的,不管是嵌入式还是FPGA,硬件学习的积累一定要是系统的. 我也曾经说过: 英文手册非常重要,这是学习硬件 ...
- AXI总线学习(AXI34)
AXI总线学习 AXI协议的主要特征 主要结构 通道定义 读写地址通道 读数据通道 写数据通道 写操作回应信号 接口和互联 寄存器片 基本传输 Read burst Overlapping read ...
- 基于 PYNQ 的 AXI 总线主从控制编写(ddr3的读写)
菜鸟一枚,最近也学习了关于 AXI 总线的相关知识.基于 PYNQ 编写了一个简单的 AXI 主从控制(牵涉到 DDR3 的读写). 设计目的 设计出以下一个通过 AXI 总线连接的简单片上系统.包含 ...
- AXI 总线学习记录
AMBAaxi的特点: 适合高带宽和低延迟的设计: 能够在不适用复杂桥的情况下确保高频操作: 满足广泛组件的接口需求: 适合于带有高初始化延迟的内存控制器: 为互联架构的实现提供灵 ...
- AXI 总线协议学习笔记(2)
引言 从本文开始,正式系统性学学习AXI总线. 如何获取官方协议标准? 第一步:登陆官网:armDeveloper 第二步:登录,无账号需要注册 第三步:点击文档 第四步: 第五步:浏览页面建议下载下 ...
- 《Python深度学习从零开始学》简介
#好书推荐##好书奇遇季#深度学习入门书<Python深度学习从零开始学>,京东当当天猫都有发售.从模型和实验入手,快速掌握深度学习技术. 业内大咖强力推荐!!!武汉大学信息管理学院教授 ...
- AXI 总线协议学习笔记(4)
引言 前面两篇博文从简单介绍的角度说明了 AXI协议规范. AXI 总线协议学习笔记(2) AXI 总线协议学习笔记(3) 从本篇开始,详细翻译并学习AXI协议的官方发布规范. 文档中的时序图说明: ...
- AXI 总线协议学习笔记(3)
引言 上篇文章主要介绍了 AMBA以及AXI协议的基本内容,本文接续前文,继续介绍AXI协议的 原子访问.传输行为和事务顺序等. AXI 总线协议学习笔记(2)https://blog.csdn.ne ...
- Xilinx-ZYNQ7000系列-学习笔记(10):AXI总线
Xilinx-ZYNQ7000系列-学习笔记(10):AXI总线 1.AXI总线概述 在ZYNQ中有支持三种AXI总线,拥有三种AXI接口,当然用的都是AXI协议.其中三种AXI总线分别为: AXI4 ...
最新文章
- 清华AI学堂班:姚期智担任首席教授,2019年首批招收30人
- 只因接了一个电话,程序员被骗 30 万!
- IDEA中添加类的创建者信息
- Linux 端口占用解决
- Json字符串和Json对象的简单总结
- jquery常用功能
- 如何编写java请求_如何避免将Java请求从Java Web服务器发送到自身?
- mysql+地图网格数据下载_echarts 中国各省市 echarts地图数据,含世界地图
- [置顶] 动软软代码生成器使用(127.0.0.1)无法看到 SQLServer2008 新附加数据库的 原因 以及 解决方案...
- Java编写程序时出现警告:Resource leak: 'xxx' is never closed 解决方案
- 【2021新版】一线大厂 Go 面试题合集
- LeetCode 237. 删除链表中的节点(Python3)
- Tengine(Nginx)动静分离简要配置
- 鸿蒙战略看点,鸿蒙OS四大看点详解!华为的野心不止手机,而是“一统江湖”...
- 选择物联网卡平台时需要重点考虑的标准
- Netty学习4—NIO服务端报错 远程主机强迫关闭了一个现有的连接
- ajax上传文件formData
- linux wps历史版本下载,WPS Office 2019 For Linux 11.1.0.9604版携新更新发布下载
- 项目管理系统TOP10,好用的产品研发项目管理系统都在这里了
- 统计学习模型——决策树
热门文章
- 攻防世界 ics-05
- ffmpeg用法及如何使用fluent-ffmpeg
- 39 What Determines the Kind of Person You Are ?是什么决定了你是哪种内型的人 ?
- mac废纸篓的如何还原?
- 计算机设备驱动选择,教你正确了解电脑硬件驱动程序型号
- javascript 判断为负数_JavaScript判断数字正负数
- CNN编辑:扯淡的WSJ,你们专黑Groupon三十年!
- sysfader iexplore应用程序错误
- 程序员教你不背单词学英语!流利英语一周成!!!
- ios键盘done中文_iOS键盘事件实现、控制