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)相关推荐

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

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

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

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

  3. AXI总线学习(AXI34)

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

  4. 基于 PYNQ 的 AXI 总线主从控制编写(ddr3的读写)

    菜鸟一枚,最近也学习了关于 AXI 总线的相关知识.基于 PYNQ 编写了一个简单的 AXI 主从控制(牵涉到 DDR3 的读写). 设计目的 设计出以下一个通过 AXI 总线连接的简单片上系统.包含 ...

  5. AXI 总线学习记录

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 清华AI学堂班:姚期智担任首席教授,2019年首批招收30人
  2. 只因接了一个电话,程序员被骗 30 万!
  3. IDEA中添加类的创建者信息
  4. Linux 端口占用解决
  5. Json字符串和Json对象的简单总结
  6. jquery常用功能
  7. 如何编写java请求_如何避免将Java请求从Java Web服务器发送到自身?
  8. mysql+地图网格数据下载_echarts 中国各省市 echarts地图数据,含世界地图
  9. [置顶] 动软软代码生成器使用(127.0.0.1)无法看到 SQLServer2008 新附加数据库的 原因 以及 解决方案...
  10. Java编写程序时出现警告:Resource leak: 'xxx' is never closed 解决方案
  11. 【2021新版】一线大厂 Go 面试题合集
  12. LeetCode 237. 删除链表中的节点(Python3)
  13. Tengine(Nginx)动静分离简要配置
  14. 鸿蒙战略看点,鸿蒙OS四大看点详解!华为的野心不止手机,而是“一统江湖”...
  15. 选择物联网卡平台时需要重点考虑的标准
  16. Netty学习4—NIO服务端报错 远程主机强迫关闭了一个现有的连接
  17. ajax上传文件formData
  18. linux wps历史版本下载,WPS Office 2019 For Linux 11.1.0.9604版携新更新发布下载
  19. 项目管理系统TOP10,好用的产品研发项目管理系统都在这里了
  20. 统计学习模型——决策树

热门文章

  1. 攻防世界 ics-05
  2. ffmpeg用法及如何使用fluent-ffmpeg
  3. 39 What Determines the Kind of Person You Are ?是什么决定了你是哪种内型的人 ?
  4. mac废纸篓的如何还原?
  5. 计算机设备驱动选择,教你正确了解电脑硬件驱动程序型号
  6. javascript 判断为负数_JavaScript判断数字正负数
  7. CNN编辑:扯淡的WSJ,你们专黑Groupon三十年!
  8. sysfader iexplore应用程序错误
  9. 程序员教你不背单词学英语!流利英语一周成!!!
  10. ios键盘done中文_iOS键盘事件实现、控制