Zynq

ZYNQ的Linux开发--使用SDK生成设备树

开发环境:
Windows下的Vivado套件
Linux ubuntu

Step1:首先从Xilinx GitHub上下载Device Tree Generator(设备树生成器)的BSP https://github.com/Xilinx/device-tree-xlnx/pulls 并将其复制到SDK的安装目录下

Step2:配置SDK开发环境,Xilinx Tools->Repositories,在Local Repositories 中点击New,将在github中下载的文件夹路径添加进去。


Step3:使用Device Tree Generator生成设备树
File->New->Board Support Package

一、前言

  利用FPGA设计算法一直以来都是热点,同样也是难点。将复杂的数学公式 模型通过硬件系统来搭建,在低延时 高并行性等优势背后极大提高了设计难度和开发周期。Xilinx公司的sysGen(system generator)工具扩展了MATLAB的simulink,提供很多IP Catalog中没有的基础模块和针对DSP应用的硬件模型。工程师利用丰富的模块和MATLAB强大的数据处理及可视化能力能够更快速完成设计与仿真验证工作。

二、sysGen算法系统设计

  本文以个最简单的例子讲述利用sysGen搭建算法IP核,并集成到IP Integrator中作为ZYNQ PS端CPU的“定制外设”。仅用于测试目的。设计需求:在sysGen中搭建系统,将输入定点整数数据*2后输出,输入位宽为8bit。

一、AXI DMA介绍

  本篇博文讲述AXI DMA的一些使用总结,硬件IP子系统搭建与SDK C代码封装参考米联客ZYNQ教程。若想让ZYNQ的PS与PL两部分高速数据传输,需要利用PS的HP(高性能)接口通过AXI_DMA完成数据搬移,这正符合PG021 AXI DMA v7.1 LogiCORE IP Product Guide中介绍的AXI DMA的应用场景:The AXI DMA provides high-speed data movement between system memory and an AXI4-Stream-based target IP such as AXI Ethernet.

  如图,AXI DMA主要包括Memory Map和 Stream两部分接口,前者连接PS子系统,后者则连接带有流接口的PL IP核。

 上篇该系列博文中讲述W5500接收到上位机传输的数据,此后需要将数据缓存起来。当数据量较大或者其他数据带宽较高的情况下,片上缓存(OCM)已无法满足需求,这时需要将大量数据保存在外挂的DDR SDRAM中。

  最简单的方式是使用Xilinx的读写地址库函数Xil_In32()和Xil_Out32(),当然不仅支持32bit位宽,还包括8 16和64bit。但这种方式每次读写都要占用CPU,无法在读写的同时接收后续数据或者对之前的数据进一步处理,也就无法形成类似FPGA逻辑设计中的“流水线结构”,此时前段数据缓存过程中,后段数据会被丢弃。所以,需要利用PS端CPU子系统内的专用硬件DMA完成高速的批量数据搬移工作。

在Xilinx SDK的system.mss页面下直接导入ps_dma示例工程。
#include
#include
#include "sleep.h"

在上一篇该系列博文中讲解了MATLAB待处理数据写入.bin二进制数据文件的过程,接下来需要将数据通过以太网发送到ZYNQ验证平台。之前了解过Xilinx公司面向DSP开发的System Generator可以通过硬件协仿真的方式,进行算法板级验证。一个是本人不熟悉这种方式,再一个缺乏通用性,也无法在系统层面进行硬件验证。当然方案有很多,熟悉上位机的朋友完全可以自己写个软件完成数据传输和算法结果对比等功能。

  这里选择最简单的方案:在上位机通过网络调试助手将数据打包并发送至以太网端口,ZYNQ端利用W5500硬件协议栈芯片解析数据。有人可能会说用ZYNQ这么高端的设备还使用外接协议栈芯片连接以太网真是浪费,这里就算是开个头吧,只能说根据能力和现有条件选择传输方案。如果数据量较大的场合,可考虑用LWIP开源协议栈或直接利用verilogHDL编写UDP/IP协议和MAC控制器的方式实现1000Mbps速率传输。

  本文主要总结内容包括:TCP协议基础 网络调试助手应用事项,以及W5500的驱动移植。为了保证数据正确性,选用TCP这一可靠传输协议。以下介绍两个比较浅显易懂的博文,供没有网络和TCP协议基础的朋友参考。(见参考链接1 2)

  有了以上基础知识,我们就可以正确配置网络参数了。查看W5500驱动中网络参数配置部分代码:

ZYNQ 高速接口系列(一) PCIe接口

PCIe 学习笔记

一、PCIe概况
随着现代处理器技术的发展,使用高速差分总线替代并行总线已是大势所趋。与单端并行信号相比,高速差分信号可以使用更高的时钟频率,从而可以使用更少的信号线达到更高的通讯速度。PCIe总线解决了PCI总线的不足,它的发展将取代PCI成为新型的数据总线,其提供了更加完善的性能,更多的功能,更强的可扩展性和更低的成本 。

在PCIE中有两种数据传输方式:
1>DMA(Direct Memory Access)模式:直接内存访问,该模式下数据传送不是由CPU负责处理,而是由一个DMA控制器来完成,占用较少的CPU资源
2>PIO(Programmed Input-Output)模式:可编程IO,该模式下数据传送由CPU执行I/O端口指令来处理,占用大量的CPU资源,数据传输速度也大大低于DMA模式
使用DMA模式时,计算机的运行速度会比使用PIO模式快很多

二、PCIe层次结构

作者:没落骑士

最近本人一直在学习ZYNQ SOC的使用,目的是应对科研需要,做出通用的算法验证平台。大概思想是:ZYNQ PS端负责与MATLAB等上位机数据分析与可视化软件交互:既可传输数据,也能通过上位机配置更新硬件算法模块配置寄存器内容,同时可计算分析PL端算法实现性能指标。PL端的FPGA逻辑则负责算法的硬件实现,以探索高效并行硬件架构。为此本人后续会持续编写《利用ZYNQ SOC快速打开算法验证通路》系列专题博文,在各个阶段进行些基础性总结。

  MATLAB中数据为双精度浮点型,因此打开算法验证通路的第一步即为MATLAB中浮点数与定点二进制补码之间的相互转换。在之前的博文:《FPGA与MATLAB数据交互高效率验证算法——仿真阶段》中提到过两种数值表示方式之间的转换,但为了便于testbench仿真,MATLAB写和读的文件均为txt文本文件。在算法板级验证中,数据应以未经过ASCII码编码的二进制数据方式被处理。这里涉及到MATLAB函数fscanf和fprintf以及函数fread和fwrite的区别,前两个分别为读和写文本文件,后两个则是读写二进制文件。

  以下给出浮点定点转换以及读写二进制文件代码:

Zynq中纯PL编程

没接触zynq之前,只用过FPGA,在FPGA中用verilog编程简单明了,后来稍微学习过一点nios ii,就在FPGA中也用过一点点nios ii。所以在刚接触zynq的时候,我就感觉zynq跟altera的FPGA和nios ii的编程肯定会有一些相似的地方。学习zynq的时候,一开始我就想弄清楚三个问题,第一zynq中怎么使用纯PL(programmable logic)部分?(就是把zynq当做普通FPGA用)第二zynq中怎么使用纯PS(process system)部分?(就是把zynq当做一个纯arm使用)第三自然而然就是zynq的PS和PL部分怎么协调工作,谁是主谁是从?

刚接触的时候好多教程都是教你怎么用PS部分,我捉摸了一段时间弄清楚了怎么使用纯PL部分了。希望大家在初学的时候能把PS和PL部分的关系弄清楚,对学习也会更有帮助的~

使用纯PL部分的时候,就把zynq当做一个FPGA使用,使用FPGA的时候,有一个引脚是时钟输入引脚,这个特别重要,这个是源头,一般在FPGA中用verilog编程会使用同步操作,也就是在一个主时钟信号下编程。

Vivado及Zynq使用经验

1.添加debug核的合理方法是在源代码中添加(*mark_debug="true"*),综合后,打开综合结果,set debug内这些标记的信号全部在网标内,不会被优化掉。如果不在代码里加这些标记,直接在综合结果里添加net,很多感兴趣的信号会被优化掉,且残缺不全。

2.若果debug核使用的时钟是zynq ps端输出的时钟,那么烧录完bit文件后,是不会自动弹出debug界面的,需要在软件工程里,debug软件工程,让cpu跑起来,产生时钟信号,再回vivado内refresh device,即可弹出debug界面。

3.自定义IP内代码被改动后,Block Design内会提醒刷新IP路径,然后在窗口下方勾选改动的IP,点击UPDATE IP按钮,即可更新IP核。

4.重新生成bit文件后,建议关闭eclipse软件工程,vivado内file-> export hardware,重新输出.hdf等硬件信息文件,然后重新打开eclipse软件工程,eclipse会自动更新硬件信息,并重新编译整个工程。

ZYNQ之uboot,kernel,设备树,文件系统生成

Vivado:2016.4

  Linux:Ubuntu16.4

  ZYNQ:xc7z020

  下载文件名称

  2016.4-zed-release.tar.xz

  device-tree-xlnx-xilinx-v2016.4.zip

  linux-xlnx-xilinx-v2016.4.zip

  u-boot-xlnx-xilinx-v2016.4.zip

  arm_ramdisk.image.gz

一、环境搭建

  请参考博客:https://blog.csdn.net/flyingforever_wl/article/details/8097059

  环境搭建好后在.bashrc 中设置环境变量:

  export ARCH=arm
  export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
  export PATH=/root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/:$PATH

二、编译u-boot

同步内容