ZYNQ

ZYNQ系列是赛灵思公司(Xilinx)推出的行业第一个可扩展处理平台,旨在为视频监视、汽车驾驶员辅助以及工厂自动化等高端嵌入式应用提供所需的处理与计算性能水平。该系列四款新型器件得到了工具和IP 提供商生态系统的支持,将完整的 ARM® Cortex™-A9 MPCore 处理器片上系统 (SoC) 与 28nm 低功耗可编程逻辑紧密集成在一起,可以帮助系统架构师和嵌入式软件开发人员扩展、定制、优化系统,并实现系统级的差异化。

Zynq平台移植知识点

一、嵌入式Linux系统组成

zynq平台上的Linux系统由四部分组成:BOOT.bin、devicetree.dtb、uImage、uramdisk.image.gz。
(1)BOOT.bin:启动引导程序,包括第一阶段引导程序(FSBL)和第二阶段引导程序(SSBL),zynq平台上一般还需要一个system.bit文件,用于构建PL部分。
(2)uImage:linux系统核心部分,完成虚拟地址到物理地址的映射、驱动设备的初始化、内存管理、进程间通信等工作。
(3)devicetree.dtb:二进制格式的Device Tree描述,Device Tree是一种用来描述硬件的数据结构,包含了有关CPU、物理内存、总线、外部设备等信息。
(4)uramdisk.image.gz:ramfs格式文件系统。根文件系统,可以重复使用,不需要每次都编译。

二、BOOT.bin的制作

zynq平台上的BOOT.bin的制作需要三个文件:U-boot、fsbl、system.bit。

Xilinx Zynq 7000 FSBL启动分析(二)

前言
在上一次分析中,分析到了
HandoffAddress = LoadBootImage();

在分析这个函数之前,在从0地址运行之前,在复位(上电复位)之后会从bootROM这个位置开始执行代码,在bootROM中,程序会将QSPI(如果是从qspi启动的话)的前nK的数据拷贝到OCM中,然后跳转到OCM中执行。把生成的BOOT.bin文件用二进制程序打开,根据数据手册可以分析一下前面的数据含义。

BOOT.bin
在boot.bin中从地址0-0x8BF可以分成17个部分,每个部分都有一定的含义
1. 0x000 中断向量表
2. 0x020 固定值 0xaa995566
3. 0x024 固定值 0x584c4e58 ASCII: XLNX
4. 0x028 如果是0xa5c3c5a3或者0x3a5c3c5a为加密的
5. 0x02C bootrom头版本号,不用管
6. 0x030 从bootrom开始到app地址的总数(bytes)
7. 0x034 从loadimage拷到OCM的长度
8. 0x038 目的地址到哪儿拷贝FSBL
9. 0x03C 开始执行的地址
10. 0x040 同7
11. 0x044 0x01为固定值

Xilinx Zynq 7000 FSBL启动分析(一)

花了几天看完了FSBL的代码,在这里做个总结,分析一下zynq的启动过程。

众所周知,xilinx zynq 7000系列的芯片中包括两个部分,PS和PL,也就是FPGA的逻辑编程的部分跟嵌入式ARM的部分,ARM部分是双核的A9处理器。关于FPGA的部分在这里就不说了。其实说的简单点,可以吧这个芯片看成一个带有FPGA外设的ARM处理器,下面详细分析一下启动流程。

所有的芯片都是从0地址启动的,所以首先找到0地址的代码,在..xxxx.sdk\standalone_bsp_0\ps7_cortexa9_0\libsrc\standalone_v5_1\src\asm_vectors.S中的开头也就是0地址的地方有这样得一段代码:

其中71行B _boot就是一条跳转命令,跳转到_boot的地方继续运行,在boot.s文件中_boot结束的地方有

FPGA是嵌入式系统设计的理想选择

根据IEEE(国际电机工程师协会)的定义,嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置”(原文为devices used to control, monitor, or assist the operation of equipment, machinery or plants)。这主要是从应用上加以定义的,从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。

随着消费电子、物联网等领域的不断发展,用户需求也越来越复杂和多样,因此我们在嵌入式系统设计中必须选择合适的处理器(SoC)系统,当然我们也需要考虑成本、功耗、性能、I/O资源等方面,但是随着实践案例的增多FPGA越来越成为嵌入式系统设计的主流选择。

FPGA/SoC:最早我们都采用的是纯FPGA设计,利用FPGA的资源实现软核处理器比如Microblaze、Picoblaze等,现在Xilinx推出了Zynq SoC和Zynq UltraScale+ MPSoC系列,它们集成的是硬核处理器(双核ARM Cortex-A9 CPU或者Quad-A53+Dual-R5 GPU),这不仅带来了性能、功耗、性价比方面的改进,同时也减小的PCB尺寸;

您有没有想过电气驱动器的关键属性是什么? 成本优化、高性能和实现工业物联网?观看视频,寻找答案!

ZYNQ 的三种GPIO :MIO EMIO AXI_GPIO 小节

学了zynq一段时间,一上来的时候就被zynq的GPIO唬住了,实在没搞清楚zynq的GPIO怎么回事,一会这样,一会那样,最后才慢慢发现zynq至少有3种GPIO可以调用。难怪我觉得每篇介绍GPIO的博客说的有一些不一样呢。

我们先看有哪三种GPIO:MIO、EMIO、AXI_GPIO。其中MIO和EMIO是直接挂在PS上的GPIO。而AXI_GPIO是通过AXI总线挂在PS上的GPIO上。

我们先看一下MIO和EMIO:下图EMIO和MIO的结构。其中MIO分布在BANK0,BANK1,而EMIO则分布在BANK2、BANK3。注意一下几项:

首先、MIO在zynq上的管脚是固定的,而EMIO,是通过PL部分扩展的,所以使用EMIO时候需要在约束文件中分配管脚,所以设计EMIO的程序时,

需要生成PL部分的bit文件,烧写到FPGA中。

其次、由下图可以看出MIO共占54bit,而EMIO占64bit。其中MIO占用IO号为0-53。而EMIO占用IO号为54-117。

再者、无论是EMIO还是MIO都属于PS上的IO,直接由PS操作。在调用头文件,只调用#include "xgpiops.h"即可,而在调用AXI_GPIO时,则需要#include "xgpio.h"。

Zynq-7000能干什么?

作者:OpenS_Lee

1 背景知识

因为Zynq-7000 PS(Processing System)端嵌入了Cortex-A9 ARM 处理核以及PL(Programmable Logic)端为基于Kintex-7或者Artix-7的FPGA架构使得Xilinx Zynq-7000更加强悍,应用领域更加广泛。下面将从以下方面介绍Zynq-7000的应用领域:汽车、通信系统、机器人、控制和仪器 、图像和视频处理 、医药、工业控制和许多其他领域。

2 应用概述

考虑 Zynq、FPGA 和相关芯片的应用广泛,选择几个重要的领域给大家介绍。虽然有大量的可能性应用,但这里的只是选择一些有代表性的应用。

2.1 汽车

图1 汽车系统(左:辅助驾驶系统;右:道路标识识别 )

SDSoC开发流程探秘:简单背后的不简单

在上SDSoC系列文章的上一篇中,我们已经介绍了如何在SDSoC中构建硬件和软件平台,并使用SDSPFM工具生成客户应用开发平台(参见《SDSoC开发起步:构建硬件和软件平台》)。如果你已经完成了上述工作,恭喜你——现在你可以正式“起步”开始基于SDSoC在Zynq SoC上开发自己的应用了!

您的设计要求是否不断变化?

是否很难找到一款应用处理器来满足?

低成本嵌入式设计可以要求更高性能和更大的灵活性吗?

选择基于赛灵思 Zynq-7000S SoC 的 MiniZed 开发套件吧,现促销价 $89。助您的嵌入式设计更上一层楼!

时间:2018年6月7日(10:30 - 12:00)

扫描二维码赶紧注册研讨会吧,别着急分享,文末有福利哦

在本次网络研讨会中,我们将向您介绍配备 Xilinx Zynq-7000S SoC 的简单易用 Avnet MiniZed 开发套件,以帮助解决这些问题。在本次研讨会中,您会了解到:

● MiniZed 套件中包含的功能及其众多内置连接功能,如 Wi-Fi,蓝牙和 BLE;

● 使用 Zynq-7000S 可以做的很酷的事情,比如加速硬件中的 BSP 算法以及将 MiniZed 与移动设备接口;

● 可用于加快开发和未来设计的工具和资源。

专家介绍
周海天 | 赛灵思全球销售部大中华地区高级总监

ZYNQ GPIO 缓冲实现方法

在Vivado中,EMIO IP(system和AXI扩展部分)引出实际上有3个管脚,分别是gpio_i,gpio_o,gpio_t,

要把它们转化为标准的GPIO,要外加缓冲器,步骤如下

在顶层模块中,会生成如下代码
IOBUF gpio_0_tri_iobuf_0
(.I(gpio_0_tri_o_0),
.IO(gpio_0_tri_io[0]),
.O(gpio_0_tri_i_0),
.T(gpio_0_tri_t_0));
IOBUF gpio_0_tri_iobuf_1
(.I(gpio_0_tri_o_1),
.IO(gpio_0_tri_io[1]),

同步内容