ZYNQ

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

PYNQ系列学习(五)——Jupyter Notebook介绍

在前面几期的学习中,我们对于PYNQ的环境配置做了较为详细的介绍,并对PYNQ与ZYNQ的异同点做了较为深入的探究。我们知道,PYNQ = Python + ZYNQ,即将ZYNQ部分功能的Python化,直接调用Python库和FPGA硬件库进行功能的开发,典型的例子便是PYNQ_z2开发板。

这种开发方式极大加快开发进程、缩短开发周期、降低开发难度,更方便、快捷。而此种开发方式所用到的在线编辑工具为Jupyter Notebook 。

一. Jupyter简介
Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。

Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视和 markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等。

二. Jupyter组件
Jupyter结合了三个组件:

1. 笔记本Web应用程序:交互式Web应用程序,用于交互式编写和运行代码以及编写笔记本文档。

PYNQ上手笔记(4)——Zynq中断应用

作者:Mculover666

在实际玩Zynq中断之前,先扯一扯中断这个神奇的东西~

实时性是一个嵌入式系统很重要的性能,实时性体现在一个系统对外部事件的响应能力和处理能力上,而CPU对一个事件的响应及处理主要依托于 —— 中断。

通俗的来说,中断的一个基本过程就是:当一个事件发生时(比如按键按下),产生一个可以发送到CPU的中断信号(上升沿或下降沿无所谓,是个信号就行),当CPU接收到这个中断信号后,对这个中断信号所表示的事件进行处理(跳转去执行中断服务程序,对按键按下这个事件进行处理)。

对这个基本过程抽象出来一个中断系统模型如图所示:

在上图中只是一个中断信号,那么当这个系统中存在很多中断信号时,群龙无首,整个系统就会乱套,CPU会像一只无头苍蝇一样到处去执行中断服务程序,结果可想而知,最后CPU肯定什么也干不了~

PYNQ上手笔记(2)——PL端和PS端的独立开发

作者:Mculover666

在上一篇中提到,Pynq是为了降低开发人员的门槛,但是作为一个学习嵌入式开发的学生,当然要一步一个脚印打好基础,所以选择从Zynq入手学习,等跑起来Linux系统再运用Python开发也不迟,知其然也知其所以然,开发效率更高,所以接下来的几篇都是关于Zynq的,如果想直接玩Pynq可直接跳过,毫无影响。

1.Zynq的架构
在开始实验之前对Zynq芯片有一个基本的认识,如果想深入了解关于Zynq的理论部分,推荐参考The Zynq Book,有英文版和中文版,在此对于Zynq的理论浅尝辄止,不做深究,重点放在实验应用上。

Zynq中包含两大功能块:PS部分和PL部分。

  • PS部分指Processing System,一个基于双ARM Cortex A9内核的处理系统,其中集成了内存存储器和外部存储器接口,大量的外设:GPIO、UART、SD/SDIO、IIC、SPI、以太网、CAN等等接口;
  • PL部分指Programmable Logic,基于Xilinx 7系列架构的可编程逻辑单元,通过PL部分可以为ARM定制很多外设,这也是Zynq的一大优点。
  • Zynq™-7000 All Programmable SoC在单个器件上实现了ARM处理功能与FPGA逻辑独特的组合,因此需要双重的配置过程,同时需要考虑处理器系统和可编程逻辑。工程师会发现,其配置顺序与传统的赛灵思FPGA稍有差别。尽管如此,方法仍是相似的,生成引导镜像和完成配置存储器编程的难度不大。

      虽然标准的FPGA配置实践一般只需要FPGA bit文件,但是如果您想最大限度地利用Zynq SoC的优势,还需要添加另一种配置文件,即软件可执行与可链接格式(ELF)文件。FPGAbit文件用于定义设计中可编程逻辑部分的行为,而ELF文件则是处理系统将要执行的软件程序。

    下面让我们来看看如何在Zynq SoC上实现裸机(无操作系统)软件应用。

      配置概览
      在Zynq SoC中,处理系统(PS)处于主控地位,因此负责配置器件的可编程逻辑(PL)侧。(唯一例外的情况是在使用JTAG接口进行配置时。)这就是说,如果需要,您可以在可编程逻辑侧不加电的情况下给处理系统加电并使之运行,从而降低系统的总功耗。当然如果需要使用Zynq SoC的PL侧,您也需要给它加电。

    【视频】Zynq开发工具简介

    了解可用于 Zynq-7000 可编程 SoC 的不同开发工具。从愿景到部署,Xilinx 开发工具着重端到端开发,包括:系统设计、软件和固件开发、硬件设计、协仿真和调试以及图像生成。

    【视频】Zynq-7000 SoC 动态功耗管理演示

    该低功耗模式 (LPM) 演示将讨论并展示 Xilinx Zynq-7000 SoC 动态电源管理功能的实例。LPM 演示可清楚地展示 Zynq-7000 SoC 在通过可扩展动态电源管理 (DPM) 提供极低待机功耗时有多强大。

    PYNQ系列学习(三)——pynq与zynq对比(二)

    上一期的学习中,我们系统性地介绍了PYNQ与ZYNQ地区别与联系。PYNQ = Python + ZYNQ,即将ZYNQ部分功能的Python化,直接调用Python库和FPGA硬件库进行功能的开发。

    Pynq降低了开发人员的门槛,但知其然也知其所以然,开发效率将会更高。因此,在进入PYNQ的python开发之前,我们先来学习ZYNQ的PL与PS开发,为接下来的学习提供良好的基础。

    本部分的学习,我们依旧借助PYNQ_z2来完成。

    1. ZYNQ功能块
    ZYNQ中包含两大功能块:PS部分和PL部分。

    PS部分指Processing System,一个基于双ARM Cortex A9内核的处理系统,其中集成了内存存储器和外部存储器接口,以及如GPIO、UART接口等大量的外设。

    PL部分指Programmable Logic,基于Xilinx 7系列架构的可编程逻辑单元,通过PL部分可以为ARM定制很多外设,这也是ZYNQ的一大优点。

    PYNQ系列学习(二)——pynq与zynq对比(一)

    Zynq可扩展处理平台是赛灵思新一代 FPGA的可编程技术的产品系列。与采用嵌入式处理器的FPGA不同,Zynq产品系列的处理系统不仅能在开机时启动,而且还可根据需要配置可编程逻辑。采用这种方法,软件编程模式与全功能的标准ARM处理SoC毫无二致。

    与之相关和不同的是,PYNQ = Python + ZYNQ,即将ZYNQ部分功能的Python化,直接调用Python库和FPGA硬件库进行功能的开发。

    1. 实例图片
    下面是ZYNQ系列与PYNQ系列中两款具有代表性的开发板:

    ZYNQ系列——ZYNQ7000

    PYNQ系列——PYNQ_z2


    2. ZYNQ优点

    本演示介绍了 Zynq-7000 SoC 及其利用 NEON 引擎或硬件加速功能实现软件加速的能力。敬请查看 Zynq-7000 SoC 在面向数据采集和加速数字信号处理 (DSP) 的单芯片参考设计中的灵活性优势,其不仅可对软件进行加速,还能充分利用处理器和可编程逻辑之间的低延迟和高性能数据传送功能。

    十分钟开发自己的AI

    在本教程的带领下,你将在十分钟内学会在PYNQ-Z2板卡上使用二值化神经网络开发自己的AI应用!

    1. AI初学者入门第一步:分类
    AI入门第一步就是对输入的图片进行分类。首先我们需要初始化一个分类器,根据最终实现分类目标的不同需要选择不同的数据集。我们可以在‘road-signs','streeview'和‘cifar10’三个数据集中选择其一,这里选择的是'road-signs'交通标志数据集。

    import bnn
    print(bnn.available_params(bnn.NETWORK_CNVW1A1))

    classifier = bnn.CnvClassifier(bnn.NETWORK_CNVW1A1, 'road-signs', bnn.RUNTIME_HW)

    ['road-signs', 'streetview', 'cifar10']

    2. 一个“训练好”的分类器可以识别多少种目标呢?
    我们上面选择的'road-signs'数据集可以识别42种不同的路标标记

    print(classifier.classes)

    42个Class类别详细请参考阅读原文源代码

    3. 接下来我们将用如下几张图片来测试刚刚选择的分类器
    from PIL import Image
    import numpy as np

    同步内容