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

1、AXI总线概述

在ZYNQ中有支持三种AXI总线,拥有三种AXI接口,当然用的都是AXI协议。其中三种AXI总线分别为:
AXI4:(For high-performance memory-mapped requirements.)主要面向高性能地址映射通信的需求,是面向地址映射的接口,允许最大256轮的数据突发传输;
AXI4-Lite:(For simple, low-throughput memory-mapped communication )是一个轻量级的地址映射单次传输接口,占用很少的逻辑单元。
AXI4-Stream:(For high-speed streaming data.)面向高速流数据传输;去掉了地址项,允许无限制的数据突发传输规模。

1.1 AXI4总线和AXI4-Lite总线具有相同的组成部分:
  • 读地址通道,包含ARVALID, ARADDR, ARREADY信号;
  • 读数据通道,包含RVALID, RDATA, RREADY, RRESP信号;
  • 写地址通道,包含AWVALID,AWADDR, AWREADY信号;
  • 写数据通道,包含WVALID, WDATA,WSTRB, WREADY信号;
  • 写应答通道,包含BVALID, BRESP, BREADY信号;
  • 系统通道,包含:ACLK,ARESETN信号。
1.2 AXI4总线和AXI4-Lite总线的信号也有他的命名特点:

读地址信号都是以AR开头(A:address;R:read)
写地址信号都是以AW开头(A:address;W:write)
读数据信号都是以R开头(R:read)
写数据信号都是以W开头(W:write)
应答型号都是以B开头(B:back(answer back))

1.3 AXI4-Stream总线的组成有:
  • ACLK信号:总线时钟,上升沿有效;
  • ARESETN信号:总线复位,低电平有效
  • TREADY信号:从机告诉主机做好传输准备;
  • TDATA信号:数据,可选宽度32,64,128,256bit
  • TSTRB信号:每一bit对应TDATA的一个有效字节,宽度为TDATA/8
  • TLAST信号:主机告诉从机该次传输为突发传输的结尾;
  • TVALID信号:主机告诉从机数据本次传输有效;
  • TUSER信号:用户定义信号,宽度为128bit。

对于AXI4-Stream总线命名而言,除了总线时钟和总线复位,其他的信号线都是以T字母开头,后面跟上一个有意义的单词,看清这一点后,能帮助读者记忆每个信号线的意义。如TVALID = T+单词Valid(有效),那么读者就应该立刻反应该信号的作用。

2、AXI接口介绍

三种AXI接口分别是:
AXI-GP接口(4个):是通用的AXI接口,包括两个32位主设备接口和两个32位从设备接口,用该接口可以访问PS中的片内外设。
AXI-HP接口(4个):是高性能/带宽的标准的接口,PL模块作为主设备连接。主要用于PL访问PS上的存储器(DDR和On-Chip RAM)。
AXI-ACP接口(1个):是ARM多核架构下定义的一种接口,中文翻译为加速器一致性端口,用来管理DMA之类的不带缓存的AXI外设,PS端是Slave接口。

3、AXI协议

总的来说,AXI总线协议的两端可以分为分为主(master)、从(slave)两端,他们之间一般需要通过一个AXI Interconnect相连接,作用是提供将一个或多个AXI主设备连接到一个或多个AXI从设备的一种交换机制。当我们添加了zynq以及带AXI的IP后再进行自动连线时vivado会自动帮我们添加上这个IP。
AXI Interconnect的主要作用是,当存在多个主机以及从机器时,AXIInterconnect负责将它们联系并管理起来。由于AXI支持乱序发送,乱序发送需要主机的ID信号支撑,而不同的主机发送的ID可能相同,而AXI Interconnect解决了这一问题,他会对不同主机的ID信号进行处理让ID变得唯一。
AXI协议将读地址通道,读数据通道,写地址通道,写数据通道,写响应通道分开,各自通道都有自己的握手协议。每个通道互不干扰却又彼此依赖。这也是AXI高效的原因之一。

3.1 握手协议

AXI4 所采用的是一种READY,VALID 握手通信机制,简单来说主从双方进行数据通信前,有一个握手的过程。传输源产生VLAID 信号来指明何时数据或控制信息有效。而目地源产生READY 信号来指明已经准备好接受数据或控制信息。传输发生在VALID和READY 信号同时为高的时候。VALID 和READY 信号的出现有三种关系。
(1) VALID 先变高READY 后变高。

(2) READY 先变高VALID 后变高。

(3) VALID 和READY 信号同时变高。

3.2 突发式读写

读时序:

当地址出现在地址总线后,传输的数据将出现在读数据通道上。设备保持VALID 为低直到读数据有效。为了表明一次突发式读写的完成,设备用RLAST 信号来表示最后一个被传输的数据。
写时序:

这一过程的开始时,主机发送地址和控制信息到写地址通道中,然后主机发送每一个写数据到写数据通道中。当主机发送最后一个数据时,WLAST 信号就变为高。当设备接收完所有数据之后他将一个写响应发送回主机来表明写事务完成。

4、AXI-Lite详解




当PS那边向AXI4-Lite总线写数据时,PS这边负责将数据接收到寄存器slv_reg。而slv_reg寄存器有0~3共4个。至于赋值给哪一个由axi_awaddr[ADDR_LSB+OPT_MEM_ADDR_BITS:ADDR_LSB]决定,根据宏定义其实就是由axi_awaddr[3:2] (写地址中不仅包含地址,而且包含了控制位,这里的[3:2]就是控制位)决定赋值给哪个slv_reg。
PS调用写函数时,如果不做地址偏移的话,axi_awaddr[3:2]的值默认是为0的,举个例子,如果我们自定义的IP的地址被映射为0x43C00000,那么我们Xil_Out32(0x43C00000,Value)写的就是slv_reg0的值。如果地址偏移4位,如Xil_Out32(0x43C00000 + 4,Value) 写的就是slv_reg1的值,依次类推。

其中,C_S_AXI_DATA_WIDTH的宏定义的值为32,也就是数据位宽,S_AXI_WSTRB就是写选通信号,S_AXI_WDATA就是写数据信号。
存在于for循环中的最关键的一句:
slv_reg0[(byte_index8) +: 8] <= S_AXI_WDATA[(byte_index8) +: 8];
当byte_index = 0的时候这句话就等价于:
slv_reg0[7:0] <= S_AXI_WDATA[7:0];
当byte_index = 1的时候这句话就等价于:
slv_reg0[15:8] <= S_AXI_WDATA[15:8];
当byte_index = 2的时候这句话就等价于:
slv_reg0[23:16] <= S_AXI_WDATA[23:16];
当byte_index = 3的时候这句话就等价于:
slv_reg0[31:24] <= S_AXI_WDATA[31:24];
也就是说,只有当写选通信号为1时,它所对应S_AXI_WDATA的字节才会被读取。

和前面分析的一样此时通过判断axi_awaddr[3:2]的值来判断将那个值给reg_data_out上,同样当PS调用读取函数时,这里axi_awaddr[3:2]默认是0,所以我们只需要把slv_reg0替换成我们自己数据,就可以让PS通过总线读到我们提供的数据。

当我们想读AXI4_Lite总线上的数据时,只需关注slv_reg的数据,我们可自行添加一段代码:

如果我们想对AXI4_Lite信号写数据时,我们只需修改对reg_data_out的赋值

PL这边的AXI-Stream的接口是不能直接与PS对接的,需要经过AXI4或者AXI4-Lite的转换。

Xilinx-ZYNQ7000系列-学习笔记(10):AXI总线相关推荐

  1. Xilinx-ZYNQ7000系列-学习笔记(27):AXI时序分析

    Xilinx-ZYNQ7000系列-学习笔记(27):AXI时序分析 一.AXI基本知识 此部分之前的博客写过,大家请参考Xilinx-ZYNQ7000系列-学习笔记(10):AXI总线 下面将AXI ...

  2. 【Xilinx AX7103 MicroBalze学习笔记6】MicroBlaze 自定义 IP 核封装实验

    目录 实验任务 实验框图 创建自定义 IP 封装 IP IP 封装界面配置 硬件设计(Vivado部分) Block Design搭建 添加 IP 库 约束文件 软件设计(SDK部分) 往期系列博客 ...

  3. xilinx srio ip学习笔记之srio example

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 xilinx srio ip学习笔记之srio example 前言 IP的配置 例程 前言 前面对SRIO的理论有了初步的理解,现在 ...

  4. Xilinx-ZYNQ7000系列-学习笔记(1):用XADC测外部温度值

    Xilinx-ZYNQ7000系列-学习笔记(1):用XADC测外部温度值 一.XADC简介 Zynq器件XADC模块包括2个12比特1 MIPS的模数转换器和相关的片上传感器,内置温度传感器和功耗传 ...

  5. 基于Xilinx Zynq-7000系列XC7Z035/XC7Z045/XC7Z100高性能SoC处理器设计的高端核心板

    核心板简介 创龙SOM-TLZ7xH是一款基于Xilinx Zynq-7000系列XC7Z035/XC7Z045/XC7Z100高性能SoC处理器设计的高端核心板,处理器集成PS端双核ARM Cort ...

  6. Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程

    Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程 一:前言 最近手上压了一块米联客的Miz7035,一块xilinx zynq-7000系列的开发板,想着正好学习一下linu ...

  7. HALCON 20.11:深度学习笔记(10)---分类

    HALCON 20.11:深度学习笔记(10)---分类 HALCON 20.11.0.0中,实现了深度学习方法. 本章解释了如何在训练和推理阶段使用基于深度学习的分类. 基于深度学习的分类是一种对一 ...

  8. Xilinx-ZYNQ7000系列-学习笔记(3):系统复位与启动

    Xilinx-ZYNQ7000系列-学习笔记(3):系统复位与启动 一.复位 ZYNQ-7000 SoC系统中的复位可以由硬件.看门狗定时器.JTAG控制器或软件产生,可用于驱动系统中每个模块的复位信 ...

  9. xc7z100 linux移植,Xilinx Zynq7000系列XC7Z035/XC7Z045/XC7Z100

    CPU CPU为Xilinx Zynq-7000 SOC,兼容XC7Z035/XC7Z045/XC7Z100,平台升级能力强,以下为Xilinx Zynq-7000特性参数: 创龙TLZ7xH-EVM ...

最新文章

  1. 如何手撸一个较为完整的RPC框架
  2. 云原生思想 — 云原生的微服务架构
  3. Tool之curl:curl的简介、安装、使用方法之详细攻略
  4. sklearn自学指南(part13)--贝叶斯回归
  5. 查找数组是否有重复元素
  6. 应用程序标准输入输出、Shell、程序界面的关系
  7. linux的硬件系统管理,Linux 系统硬件管理的基础知识(四)
  8. 51nod 1130 N的阶乘的长度 V2(斯特林近似)
  9. jquery中has方法
  10. Mathematics Base - 期望、方差、协方差、相关系数总结
  11. 如何选择机器人的电机
  12. 浏览器控件打开PDF文件时文件内容不显示的解决方法
  13. MES管理系统这5个模块,可保障板式定制家具的生产需求
  14. Word - 修改界面语言和校对语言
  15. 前台请求报:ERR_EMPTY_RESPONSE错误
  16. 用HTML加css做成的新年特效,使用css3和html给网站添加上春节灯笼特效的源码分享...
  17. 墙面有几种装修方法_家里的墙面不知道怎么装?6种装饰方法任你选
  18. CART分类回归树算法
  19. UBT14:ubuntu安装Drawing
  20. ZAFU_2021_2_17_2021寒假个人赛第四场题解

热门文章

  1. 第五章、首次登陆与在线求助 man page
  2. linux glog 0.50版本 设置交叉编译器生成静态库
  3. SketchUp模型组件【iMod · 精选243 —— 现代轻奢卧室SU模型】
  4. 国际WTI原油价格日、周、月、年度数据(1986.01-2019.02)
  5. php判断客户端是否为手机移动设备,php怎么判断客户端是pc还是移动设备
  6. 日语视频翻译中文软件哪个好?分享日语视频翻译软件给你
  7. python中的各种作用域
  8. 谷歌浏览器打不开开发者模式问题解决办法
  9. mysql死锁如何释放_mysql 死锁:如何解决mysql死锁
  10. C 语言编程 — pthread 用户线程操作