中级知识库

为有一定FPGA开发基础的工程师提供进阶所需的设计知识、方案分析以及深度技术介绍。

卷积神经网络(CNN)学习笔记2:模型训练

上篇博文主要对CNN的基本网络结构及连接方式做了简单的介绍,还介绍了一个界内经典的LeNet-5模型。下面重点介绍CNN模型的训练过程/参数学习,在阅读本文之前,最好需要有以下方面的预备知识:

  • 神经网络基础(网络结构,前向/后向传播方式,激活函数等);
  • 基础的最优化求解方法(梯度法,牛顿法等);
  • 机器学习基础
  • 神经网络模型常用于处理有监督学习的问题,例如分类问题,CNN也不例外。模型需要一些有标注的数据进行训练,训练过程中主要涉及到网络的前向传播和反向传播计算,前向传播体现了特征信息的传递,而反向传播则是体现误差信息对模型参数的矫正。

    CNN前向传播
    与普通的神经网络的前向传播过程一样。用 l 表示当前层,xl 表示当前层的输出,Wl 和 bl 分别表示当前层的权值和偏置,则前向传播可以用下面的公式表示:

    其中 f() 函数为激活函数,可以选择sigmod或者tanh等函数。

    对于卷积层,其前向传播如下图:

    FPGA为什么越来越受重视了?

    FPGA 有一个响亮的别名——“万能芯片”,它是一种能够通过软件更改、配置器件内部连接结构和逻辑单元,完成既定设计功能的数字集成电路。虽然FPGA问世的时间不长,但发展非常迅猛,远超出了业界的预想。

    FPGA 在汽车电子领域的应用尤为广泛,MINIEYE 正是选用了 FPGA 作为硬件架构的平台。

    让我们从 ADAS 产品出发,从多个角度来看,FPGA 为什么得到了越来越多的关注与重视?

  • 首先,从计算需求适应性能来看:
  • MINIEYE 研发的ADAS产品涉及大量计算密集型算法,这个类型的算法有计算量大,数据规整、适合并行三个特点。

    虽然 FPGA 研发难度高,但只要设计精良,就可以适应算法,将深度学习算法做到全并行,高 I/O 复用和数据吞吐,并像软件一样直接升级,满足越来越高的算法需求。

    相反,其他硬件架构则各有缺点,ASIC 流片成本高且周期长,流片后也无法进行修改;CPU 并行度低,处理相关算法则相对低效,功耗高;GPU 并不符合视觉计算模型的特点,并行度有限,而且效率低,功耗与成本较高。

  • 从产品需求来看:
  • PCI总线的三种传输模式

    本文来简单地介绍一下PCI Spec规定的三种数据传输模型:Programmed I/O(PIO),Peer-to-Peer和DMA。

    三种数据传输模型的示意图如下图所示:

    三种数据传输模型的示意图

    首先来介绍一下Programmed I/O(PIO)

    PIO在早期的PC中被广泛使用,因外当时的处理器的速度要远远大于任何其他外设的速度,所以PIO足以胜任所有的任务。举一个例子,比如说某一个PCI设备需要向内存(SDRAM)中写入一些数据,该PCI设备会向CPU请求一个中断,然后CPU首先先通过PCI总线把该PCI设备的数据读取到CPU内部的寄存器中,然后再把数据从内部寄存器写入到内存(SDRAM)中。

    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"。

    Vivado一项全新项目功能——可配置的报告

    作者:Brian Lay

    对设计的合并可能会很棘手。通常当你需要解决一个问题时,变化会影响设计的其他部分,从而不可避免地会出现其他问题。在2017.3我们推出了一项新功能可以帮助您解决这个问题。该功能被称作可配置报告。

    可配置的报告是一项全新的Vivado项目功能,可让您在流程的任何步骤运行任何报告。例如,假设您在实现后出现一个关键路径,而且您不确定如何解决它。为了理解这条关键路径如何在流程间“演变”,可配置的报告使得您可以在完成逻辑优化,布局设计,布线设计以及这之间的任何步骤报告那条确切路径的时序情况。图1显示了被添加到每个实现流程步骤的报告时序总结。了解每个步骤的时序可以帮助您理解问题是综合问题,利用率问题,时钟分配问题还是布线拥塞问题。

    图 1. 在运行实现属性选项卡中配置时序统计报告在三个流程运行完成之后再生成

    问题描述

    最近发现的被称为 Spectre 和 Meltdown 的安全漏洞影响整个半导体行业的各种处理器架构。

    本文试图搞清楚在 Xilinx 基于 ARM 的 Zynq-7000、Zynq UltraScale+ MPSoC 和 Zynq UltraScale+ RFSoC 器件中是否存在任何漏洞。

    这是一项持续的工作,Xilinx 正在与 ARM 紧密合作,了解相关信息并将其传递给相关领域以及可能会担心对其系统安全性有影响的 Xilinx 客户。

    本答复记录将是主要的通信方式,并随更多信息的提供保持更新。

    解决方案

    我们根据 ARM 的初步信息,做出了如下的当前评估:

  • ARM Cortex-A53 和 Cortex-R5 处理器对 Spectre 或 Meltdown 漏洞没有任何已知的敏感性。 因此,Zynq UltraScale+ MPSoC 和 Zynq UltraScale+ RFSoC 器件对 Spectre 和 Meltdown 也没有任何已知的敏感性。
  • ARM Cortex-A9 处理器对 Meltdown 漏洞没有已知的敏感性。
  • 如何防止系统受损?从电源排序入手

    诸如电信设备、存储模块、光学系统、网络设备、服务器和基站等许多复杂系统都采用了 FPGA 和其他需要多个电压轨的数字 IC,这些电压轨必须以一个特定的顺序进行启动和停机操作,否则 IC 就会遭到损坏。

    LTC2924 是一款简单且紧凑的电源排序解决方案,采用16引脚SSOP 封装(见图1和图2)。

    “图1:
    图1: 采用外部 N 沟道 MOSFET 的典型应用

    “图2:
    图2: 采用停机引脚的 4 个电源排序器

    工作原理

    Xilinx FPGA的GTx

    作者 XCZ

    Xilinx的针对Gigabit应用的FPGA基本都会集成一些高速串行接口,统称为
    Gigabit Transceiver(GTx),包括GTP、GTR、GTX、GTH、GTZ、GTY、GTM(传输速率不断增加)等,不同系列的FPGA集成的GTx不同,详见表1。

    表1 不同系列FPGA集成的GTx及性能

    “”

    GTx transceiver支持如下高速接口(不同系列,集成度不一样,有些只有在高端系列中才有):
    PCI Express, Revision 1.1/2.0/3.0;
    10GBASE-R;
    Interlaken;

    一文看懂ARM里的RAM和SDRAM有什么区别

    RAM介绍
      
    RAM:随机存取存储器。

    在计算机的组成结构中,有一个很重要的部分,就是存储器。存储器是用来存储程序和数据的部件,对于计算机来说,有了存储器,才有记忆功能,才能保证正常工作。

    存储器的种类很多,按其用途可分为主存储器和辅助存储器,主存储器简称内存,内存在电脑中起着举足轻重的作用,一般采用半导体存储单元。因为RAM是内存其中最重要的存储器,所以通常我们直接称之为内存。

    “”

    内存就是存储程序以及数据的地方,比如当我们在使用WPS处理文稿时,当你在键盘上敲入字符时,它就被存入内存中,当你选择存盘时,内存中的数据才会被存入硬盘。
      
    RAM就是既可以从中读取数据,也可以写入数据。当机器电源关闭时,存于其中的数据就会丢失。我们通常购买或升级的内存条就是用作电脑的内存,内存条(SIMM)就是将RAM集成块集中在一起的一小块电路板,它插在计算机中的内存插槽上,以减少RAM集成块占用的空间。

    一文总结学习 Python 的 14 张思维导图

    本文主要涵盖了 Python 编程的核心知识(暂不包括标准库及第三方库,后续会发布相应专题的文章)。

    首先,按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字符串,列表,元组,字典,集合),条件&循环,文件对象,错误&异常,函数,模块,面向对象编程;

    接着,结合这些思维导图主要参考的资料,分享一下我的学习体验,一方面可供初学者参考,另一方面,也便于大家结合思维导图深入学习、理解、思考;

    最后,提供几篇文章链接,方便希望从 Python 2.x 迁移到 3.x 的朋友理解。

    注意事项

    本篇笔记原先基于 Python 2.x,经历多次改版,目前最新版本基于 Python 3.x,由于参考资料多来源于 2.x,可能有部分知识没有完全更新,欢迎提出意见,笔者会定期汇总修改。

    如需基于 Python 2.x 版本的笔记,可移步博客:

    https://woaielf.github.io (详见「总览」思维导图)。

    本文是笔者在个人学习过程中总结的学习笔记,难免有疏忽&错误之处,望大家提出宝贵意见。

    思维导图

    默认阅读顺序:从右→左,顺时针方向。

    思维导图软件:XMind

    总览

    同步内容