AXI总线的DMA数据高速传输


学习论文:基于AXI总线的DMA高速通道及驱动的设计与实现[D]

1 基于AXI总线的DMA高速通道及驱动设计与实现[D]

背景:随着arm嵌入式系统和SoPC的不断发展,以及IP核的复用技术,使得系统中的数据交互量大大提高,系统存储器和外部设备之间的数据交互不仅数据量极大而且对数据传输速度的要求越来越高。----大背景
专注点:高速数据传输中的 读写操作–DMA。—DMA的重要性意义
该论文工作:基于 Zynq 7000 SoPC 平台,在分析 AXI 总线接口和 DMA 工作原理的基础上,设计并实现四种不同应用下的高速数据传输方案,并将各个方案封装成可复用的 IP 核。
①Linux OS 下基于 AXI-HP DMA 传输 ②基于 AXI-HP DMA 裸机传输 ③基于 AXI-HP CDMA 裸机传输 ④基于 AXI-ACP CDMA 裸机传输。

设计验证方案,搭建验证平台:1.测试上行数据通路,2.验证各方案中数据传输的正确性与可靠性,3.测试各个方案的数据传输速率,并进行分析与总结。

1 绪论

1.1 背景

嵌入式系统是一种专用的计算机应用系统,其形式多样、体积小、配置较为精简,设计人员可根据需要进行软硬件裁剪和定制。嵌入式系统大多以ARM处理器为核心,集成 USB、UART、AD/DA、IIC 以及网口等多种外围设备和接口。
一个典型的计算机系统在硬件上由中央处理器、总线系统、存储系统、输入输出系统这几个部分构成:

1.中央处理器:主要由程序计数器(Program Counter, PC)、寄存器文件、算术逻辑单元(Arithmetic and Logic Unit, ALU)和总线接口组成,主要关注工作频率、字长、指令集、缓存等几个重要参数。
2.存储器用于存储程序、数据和文件,由主存储器和磁盘等外部存储器组成,往往采用多级存储结构。
3.系统总线(System Bus)用来规范 CPU、系统存储器和外部设备之间的通信标准,是系
统中各个功能模块之间进行通信的公共通道,包括传输地址的地址总线,传输数据的数据总线以及传输控制信息的控制总线。
4. 输入输出系统(Input/Output System)由输入输出控制器和外部设备构成,CPU 通过 I/O 总线和输入输出系统连接并与鼠标、键盘、显示器等外部设备通信

1.2 DMA意义

数据传输带宽是影响计算机整体性能的重要参数。
传统一般进行一次数据传输,CPU 需向控制总线和地址总线发送相关指令,通过数据总线将数据传输到系统存储器或某个外部设备端口,这种 CPU 控制数据传输的方式速度较低,而且导致 CPU 无法及时进行其他的指令处理。
DMA意义:是指外部设备和系统存储器之间或者存储器与存储器之间直接进行数据传输交易的传输方法,DMA技术使得 CPU 不需要在读写数据上消耗时间,可以将工作主要集中在数据运算上,从而减轻了 CPU 传输数据的负担,不仅加快了系统的运算速度,也提升了整个系统的运行效率。
片上系统上的的各 IP 核通过片上总线与系统中的其他模块进行通信

1.3 Zynq 7000介绍

Zynq 7000系列芯片将ARM公司的高性能双核Cortex A9 硬核处理器嵌入到 Xilinx 7 系列的 FPGA 架构中,构成全可编程处理平台,之间通过一组高度定制的 AXI 互联和接口将两个 ARM Cortex-A9 处理器和 Xilinx 7 系列 FPGA 整合到一起。
不仅拥有 ASIC 在能耗、性能和兼容性方面的优势,而且具备 FPGA 硬件可编程性、灵活性、可扩展性的优点。
PS:代表处理器 PL:代表可编程

1.3.1 Zynq开发

1.在 Zynq 中,PS 和 PL 部分均可独立运行,互相不受控制,将可编程逻辑部分和处理器部分当成对等的主设备
2.可以将 PS 当做主设备,将 PL 看做从设备,PL 作为 PS 的一个可配置的外设受 ARM 处理器控制,比如 ARM 接口不足时可使用 PL 来扩展接口。
3.PL 也可以作为主设备从应用处理单元的存储器中读写数据,并对处理器系统进行控制。当 PL 作为主设备时,系统无法通过启动 PS对 PL 进行配置,所以需通过 JTAG 接口连接板卡并对 PL 进行配置。
一般情况下,是处理器系统首先启动,故一般以 PS 为核心进行 PL 启动和配置。PL 可以配置为整个系统启动过程中的一部分,也可在 ARM 启动后配置

1.3.2 开发套件与设计资源

Zynq-7000 系列提供完备的开发套件与设计资源,Vivado 开发工具为软硬件工程师和系统级设计人员提供简单方便的开发环境。还有大量软 IP 模块、板级支持包(Board Support Package, BSP)和来自第三方合作伙伴的其他操作系统。
Zynq 7000 综合了处理器和可编程逻辑两种优点,适合进行软硬件协同设计
开发软件:Xilinx Design Suite Vivado 2017.4。 共使用到两个核心软件:Vivado IDE 和 软件设计的软件开发套件
Vivado 用于搭建硬件架构,实现硬件数据处理通道,使用 Verilog HDL 语言实现硬件设计,SDK 用于完成裸机的驱动
Vivado IDE 用于搭建系统设计中硬件方面的互联结构及数据通路。设计人员可编写硬件代码,可在图形化界面使用 Xilinx Zynq 7000 提供的 IP 核,可自由配置、实现、验证、集成和封装 IP 核,如对 ARM 处理器核、存储器接口、外设接口、扩展接口及总线等等进行配置与互联。

1.3.3 下载bit文件

Vivado IDE 搭建的硬件工程最终会生成一个 BIT 类型文件,称作这个工程的比特流,它包含整个硬件工程的所有信息
若要使用板载的 QSPI Flash 或者 SD 卡运行开发板,无论基于裸机还是 Linux 操作系统,均需要将比特流和一级启动文件、裸机下软件应用
程序的 ELF 文件或者 Linux OS 下的 uboot.elf 文件一起生成 BOOT.bin,将 BOOT.bin烧写至 QSPI Flash 或者存入 SD 卡相应分区,才能实现板载启动。

1.3.4 Linux下开发环境

SDK 是基于 Eclipse 平台开发的软件设计工具,内部包括 Xilinx IP 核的部分驱动、板级支持包、GNU 编译链接器、支持 ARM 和 NEON 扩展的 GCC 库以及程序的调试器,支持使用 C/C++语言。
使用 SDK 完成裸机工程的软件部分开发,主要用于设计 DMA 驱动程序、测试程序,并进行板载调试。
在带 Linux 操作系统的情况下,需使用 SDK 生成 FSBL,加载设备树资源包,生成设备树工程以及使用 BOOTGEN 生成板载启动文件 BOOT.bin
安装交叉编译器环境,用于对驱动及测试程序进行交叉编译,生成在目标板上可执行的文件。
还需准备 GDB 调试工具、二级启动程序 uboot 和Linux 内核源码并进行编译、编译设备树工具 DTC 等。

2 相关原理

2.1 AXI总线协议

Zynq-7000 SoPC 有三种 AXI4 总线类型.Zynq 7000 中 PS 和 PL 两者之间通信的桥梁主要是 AXI 互联和接口. 握手机制

  • AXI4 是最高性能的接口,主要面向高性能地址映射通信的需求。
  • AXI4-Lite 是一个轻量级、单次传输的地址映射接口,每次传输单个数据和这个数据相对应的一个地址,占用的逻辑资源很少。
  • AXI-Stream 支持面向高速流式数据的传输,没有地址机制,支持批量突发传输无限大小的数据。
    该论文关注的 AXI4-Stream 总线协议中主要的时序信号如下:
    (1)ACLK: 总线时钟;
    (2)ARESETN:总线复位;
    (3)TDATA: 数据,可选位宽有 32/64/128/256 位;
    (4)TREADY: 从机通知主机已经做好传输准备;
    (5)TLAST: 在批量传输的最后一个数据处拉高;
    (7)TVALID: 主机通知从机传输的数据有效[

2.2 DMA技术

在嵌入式系统中,CPU 针对不同设备可以使用轮询、中断控制和 DMA 等方式控制外部设备的访问。

  • 轮询方式
    轮询方式是指CPU 不断查询外设的状态,如果外部设备准备好,就可以向其发送数据或者读取数据,这种方式虽然非常简单,但不断查询总线而导致 CPU 无法执行其他指令,系统效率低下。
  • 中断处理方式
    中断控制方式克服了 CPU 轮询外部设备的缺点,外部设备准备好数据之后,向 CPU 发起中断信号,CPU 收到中断信号后停止当前的工作,根据中断信号指定的设备号处理相应的设备。种处理方式既不影响 CPU 运行,也能保证外部设备的数据得到及时的处理,但对于大量的数据传输的情况,中断方式会不断地向 CPU 发起中断。
    *DMA方式
    使得大量的数据传输可以不通过 CPU 而直接传送到系统存储器,外部设备在准备好数据之后只需要向 DMA 控制器发送一个命令,把数据的地址和大小传送过去,由DMA 控制器负责把数据从外部设备直接存放到系统存储器。
    DMA工作过程:向DMA控制器初始化–>向CPU申请总线控制权–>CPU仲裁—>DMA处理完成,发出中断交还总线控制权。

上行通道和下行通道 是代表着传输方向。

3 三种数据传输通道的硬件实现

三种数据传输方案的硬件部分实现,即基于 AXI-HP DMA、AXI-HP CDMA、AXI-ACP CDMA 的硬件实现。
详情见文章,但没给出具体代码。

4 数据传输通道的驱动实现

AXI-HP DMA基于 Linux 操作系统完成的软件设计。
Linux 内核负责管理系统的进程、内存、设备驱动、文件系统和网络系统。Linux 设备驱动分为字符设备、块设备和网络设备三种。Linux 操作系统将设备驱动大致分成总线、驱动和设备三个部分。

4.1 Linux系统架构

DMA 驱动是用户空间应用程序和硬件层的 DMA IP 核的中间层,此驱动需向上层提供一系列应用程序接口(Application Programming Interface, API)函数,屏蔽底层硬件的操作细节,向下需了解 DMA 的实现原理以及寄存器状态。

4.2 Linux程序

一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader),Linux 内核,文件系统,应用程序 。

  • Bootloader
    将系统的软件和硬件联系在一起,是启动之后的第一段执行代码,主要用来初始化硬件,提供硬件信息,然后装载操作系统,应用最为广泛的为 uboot。
  • Linux 内核
    Linux 内核包含 Linux 操作系统最核心、最基本的功能,包括内存管理、基本设备驱动、系统初始化等代码,内核文件一般较小。
  • 文件系统
    内核启动之后会挂载根文件系统(Root Filesystem),根文件系统是 Linux 系统的数据和文件存储区域,包括应用程序、库文件和系统配置文件等等,通常挂载在某种存储介质的一个分区上。
  • 应用程序
    应用程序是嵌入式系统的功能载体,代表系统设计想要达到的目标。
    在没有外部 JTAG 的情况下,Zynq-7000 SoPC 首先启动处理器系统(PS),然后通过处理器启动并配置可编程逻辑部分(PL)

4.3 启动方式

  • JTAG,基于裸机的方案采用这种方式,软硬件设计好之后,通过 JTAG 连接线连接开发板和计算机,在 IDE 中将软硬件加载到板子中进行调试。
  • SD卡,基于 Linux OS 的方案采用这种启动方式,将硬件比特流、Linux 内核、AXI DMA 驱动、应用程序等文件存入 SD 卡相应分区,将板子上的跳线设置为 SD 卡启动方式,上电即可启动系统。
    硬件调试信息通过逻辑分析仪抓取相应的信号,在 Vivado 窗口中查看抓取的信息,软件调试信息通过 UART 打印出来或采用存储相关信息到板卡的方式进行调试与验证。

5 验证与测试

总结与收获

  • 了解Zynq的配置及开发过程
  • 了解AXI总线和DMA控制
  • 了解ARM上Linux os的开发
  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值