前进12

816 阅读46分钟

1 异步复位,同步释放描述下

复位是将寄存器恢复到默认值。一般复位的功能包括:同步复位,异步复位。

同步复位是指当上升沿检测到复位信号,执行复位操作,有效的时钟沿是前提。

复位信号的有效时长必须大于时钟周期,才能真正的被系统识别并完成复位任务,同时还要考虑诸多时钟偏斜,组合逻辑路径延时,复位延时等因素。

异步复位指的是无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。

缺点:

在复位信号释放(reset)的时候容易出现问题。具体来说:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致亚稳态

异步复位,同步释放:复位信号到来时,不受时钟信号的同步,而复位信号释放的时候的受时钟信号的同步。

所谓异步复位同步释放,就是在rst_n信号为低时,立刻进行复位,即复位信号与时钟相互独立;

而rst_n信号由低到高释放时,为了防止亚稳态的出现,将rst_n信号用DFF触发器向后延一周期,

外部复位信号不会在出现释放时与clk信号竞争,整个系统将与全局时钟clk信号同步

2 异步复位,同步释放的优点

  • 避免复位信号释放的时候造成亚稳态问题
  • 只要复位信号一有效,电路就处于复位状态,与时钟沿无关
  • 有效捕捉复位,即使是短脉冲复位也不会丢失
  • 有明确的复位撤销行为。复位的撤离是同步信号,因此有良好的的撤离时序和足够的恢复时间

3 其他

浮点数计算消耗大,为什么还要设计半精度浮点数计算,而不是移位来扩大数据,最后通过复原的方法。 前期使用的半精度浮点数运算,后期使用定点数。

cnn加速器控制流程

有控制模块解析PS端发的控制信息,发送控制字给数据模块。

门控电路

D触发器,时钟上升沿触发。D端输出到Q端。

网络模型量化

64位双精度浮点数到16位半精度浮点数的量化。

确定量化位数,保证量化后的的数据不会比原有数据失真太多。然后确定浮点数包含的位数,即量化精度。量化后的整数范围不能比原有数据小,尽可能提高浮点数所能表示的精度。

16位浮点数相比64位双精度浮点数,减小了3/4的存储量。

4 异步fifo深度计算

异步FIFO通常用于在两个时钟域间传输数据,并且通常情况下,写数据的速率是要比读数据的速率快的,因此,就存在FIFO最小深度的一个问题,以防止在数据传输时发生溢出,造成数据的丢失。

在计算FIFO最小深度时,我们一般考虑极端情况,即在一段时间内写速率达到最大,此时由于读数据慢于写数据,因此需要设置一个FIFO的最小深度,来保证数据不丢失。

最坏情况(背靠背)

、背靠背

之前的写入和读取,相当于 是均匀写入和读取,而当写入操作没有说每几个时钟周期写入一个数据,而是在几个时钟周期内写入多少数据;在几个时钟周期内读出多少数据的时候。

写数据时钟频率fa=50MHz
读数据时钟频率fb=40MHz
在写时钟周期内,每80个周期就有40个数据写入FIFO
在读时钟周期内,每10个周期可以有6个数据读出FIFO

在最坏的情形中,为了得到更安全的FIFO深度,我们需要考虑最坏情况,以防数据丢失,读写的速率应该相差最大,也就是说需要找出最大的写速率 和 最小的读速率,这样才能适配所有写入和读取的情况

写入的方式很多种,有均匀写入,有先写20再写20,方式很多。我们画出背靠背的情况

在背靠背(最坏)情况下,突发长度需要设置为 80,并且写速率设置为最大的50MHZ;而因为读时钟周期内,每10个周期可以有6个数

据读出FIFO,假设均匀读出,所以读速率设置为最小的40MHZ * 6/10 = 24MHZ

写入 80个数据需要的时间: 80 * 1/50MHZ = 1600ns

在1600ns内可以读出 1600 / 1/24MHZ = 38.4个数据

所以所以FIFO_DEPTH(min) = 80- 38.4 = 42。

5 AXI总线

ZYNQ将ARM处理器与FPGA在单芯片内紧密结合,两者之间通过高级可扩展接口AXI4总线进行交互,主机与从机之间的数据传输方式通过AXI协议完成。

片内总线具有分离的数据通道,控制通道,地址通道,支持不对齐传输与突发传输。

AXI4-Full: 最多256个数据。面向高性能。

AXI4-Lite: 轻量级低速吞吐通信。支持单次突传。

AXI4-Stream: 高速流数据接口通信。传输数据不受限制。

AXI协议包含5个独立的通道,即写地址通道、写数据通道、写响应通道、读地址通道以及读数据通道,独立式通道。

6 AXI接口

PS与PL之间通过AXI接口实现。 分为GP接口,ACP接口,HP接口。

PS与PL之间的交互接口支持AXI4-Lite 与AXI4-Full相连的接口,AXI4-Stream 只在PL端实现。

这里只是用了HP接口,GP接口。

图像采集模块的寄存器配置以及图像帧存储模块全部基于PS端实现,去雾算法模块以及显示模块则由PL端完成,两者通过AXI总线实现数据交互。

OV5640采集到的图像数据不能对其直接进行处理,需要将摄像头数据进行转化解码,以使得数据满足FPGA时序要求。图像数据进行去雾加速后,图像数据并不能满足VDMA输入接口对数据帧的存储,因此需要将数据转化为AXI4-Stream形式来通过VDMA。

通过Xilinx提供的Video in to AXI-Stream IP核进行数据转换。

VDMA支持将AXI-Stream数据转化成AXI-Memory Map格式从而实现数据地址的映射,通过HP接口高效的访问DDR3。

VDMA从DDR3中再将数据通过AXI-Stream to Video Out IP核将帧缓存的数据转化成视频输出的数据格式,视频数据再由RGB2DVI IP转化到HDMI支持的差分信号,从而显示图像去雾效果。

GP接口:AXI通用传输接口,数据总线宽度为32-bit,主端口的事务传输能力为8个读端口和8个写端口。AXI_GP接口仅用于通用目的,并不用于实现高性能。一般用于在PL-PS间传输低速的控制信息和少量数据,可通过AXI_Interconnect进行扩展连接。

HP接口:一般用于逻辑与挂载在CPU的DDR间高速数据交互,数据搬移一般通过PL的DMA完成。如,图像可由FPGA直接完成采集、预处理,然后通过 AXI_HP接口将数据传输到 DDR中以便CPU进一步处理。

其中AXI4-Memory Map为AXI4接口的内存映射。AXI4-Lite接口用于配置寄存器,AXI4-Stream用于连接数据流接口的IP核,AXI4-Memory Map用于连接ZYNQ端的HP接口,实现DDR3存储器的地址映射。为了满足流接口以及内存映射数据传输速度匹配,加入行缓存用于暂存数据。

7 平均池化层

pooling的结果是使得特征减少,参数减少,但pooling的目的并不仅在于此。

pooling目的是为了保持某种不变性(旋转、平移、伸缩等)

在池化操作的过程中,还使用改变步长大小的方法来控制输出特征图的维度。

8 CPU和fpga的特点

CPU与FPGA的根本区别在于软件与硬件的差异。CPU为 冯诺依曼结构,串行 地执行一系列指令;而FPGA可以实现 并行操作。

CPU擅长逻辑控制,串行的运算。

FPGA擅长并行操作。

FPGA的并行有两种:数据并行(GPU 也有)和流水线并行

9 FPGA的并行 处理图像的优势

并行体现在,每个时钟可以处理多个数据流任务。

FPGA的并行有两种:数据并行(GPU 也有)和流水线并行

FPGA相比于CPU,最大的优势在于速度,FPGA通过时钟来控制信号和寄存器传输,也就是说通过时钟来精确控制任务,而且FPGA是并行执行的,每个时钟可以处理多个数据流任务。

数据并行

数据并发处理

  CPU是一个数据一个数据进行处理的,而FPGA在一个时钟内可以同时并行处理多个数据,而且这个数据可以同时做很多个运算,比如乘加运算、比较运算。

流水线并行

流水线架构

FPGA进行图像处理,可以涉及到很多算法一起运行,比如图像进行预处理,灰度、算子、膨胀、腐蚀等,这个时候就可以用到流水线架构处理,FPGA对每一行进行处理时,可以实现同时前一行做灰度运算、后一行做算子运算,整个处理过程是并行的,互不干扰。

数据同时接收及处理

传统的软件处理流程可能是先将数据准备好,然后再进行处理,而FPGA可以做到边接收边处理,在接收数据的同时对数据进行处理。利用数据传输的间隙做数据处理可以节省大量的时间,外部的数据传输是会消耗掉大量时间的。

缓存

  FPGA内部有大量缓存单元,在进行图像处理时可以对图像的行数据进行缓存再处理,可以提高处理效率。

灵活性

 FPGA可以反复擦除和编程,可以通过设计不同逻辑完成各种电路功能。

延时低

FPGA同时拥有流水线并行和数据并行

cnn中的并行

多卷积核并行: 主要是数据并行,同一时钟内处理多个数据。

行缓存,开窗。这里行缓存涉及到了插入寄存器,缓存数据,流水线并行的思想。 5行数据缓存,只有第一行数据需要5个时钟周期,后续每一行只需要一个时钟周期。

流水线结构是把一个大的逻辑拆分成多个小逻辑,或者说将原本只需要一个时钟周期完成的逻辑操作分成用多个时钟周期来实现,以减少每个时钟周期的传播延迟。由于每个小逻辑的计算花费的时间较小,从而能使得设计的时钟速率加快
同时分成几个时钟周期完成就成为几级流水线。

首先流水线结构是将一个大操作分成更多的小操作
需要我们在各个计算之间插入寄存器,通过寄存器来暂存中间数据,尽管寄存器也会引入额外的小延迟,但相当于传播延迟来说可忽略

10 均值滤波

对高斯噪声具有较好的处理效果)
均值滤波在去噪声的同时会有如下缺点:边界模糊效应明显、细节丢失比较严重

中值滤波也是消除图像噪声最常见的手段之一,特别是消除椒盐噪声,中值滤波的效果要比均值滤波更好。中值滤波是跟均值滤波唯一不同是,不是用均值来替换中心每个像素,而是将周围像素和中心像素排序以后,取中值。

1.图像周围填0

举例:即将800×480的图像首先扩展成802×482

2.行缓存开窗

移位寄存器开窗

3.计算均值

均值滤波: 先求和再平均

中值滤波:

第一步: 分别求出 3 行中同一行的最大值、 最小值、 中间值

第二步: 3 行的最大值、 最小值、 中间值进行比较

比较最大的最小,最小的最大,中间值的中间值

第二步:得到中值

比较第二步得到的中间值为中值

11 OV5640

输入:

XVCLK 输入时钟,SCCB 用于对 OV5640 进行配置。输入时钟100MHZ.sccb的200khz。

SCCB 可以配置很多 OV5640 的关键特性,包括 XVCLK 输入后的 PLL,输出图像的格式(YUV/RGB),输出方式 MIPI/DVP,是否需要使用 ISP 进行处理,等等。

输出:

PCLK输出时钟,同样分辨率,不同帧率的输出体现在PCLK上。

VSYNC:场同步信号,由摄像头输出,用于标志一帧数据的开始与结束。

HREF/HSYNC:行同步信号,由摄像头输出,用于标志一行数据的开始与结束。

D[9:0]:数据信号,由摄像头输出,在RGB格式输出中,只有高8位D[9:2]是有效的;

tPCLK:一个像素时钟周期;

tPCLK(像素时钟)。以RGB565数据格式为例,RGB565采用16bit数据表示一个像素点,而OV5640在一个像素周期(tPCLK)内只能传输8bit数据,因此需要两个时钟周期才能输出一个RGB565数据;

12 Video In to AXI4-Stream

OV5460 进行输出图像数据,它输出的数据是 8bit + 8bits 的图像数据,

VDMA 管理的到内存的写入是通过 S2MM 接口进行的,输入端是 AXI-Stream 的数据流,输出端是 AXI HP 到 memory controller。

我们需要将图像数据转成为 AXI-Stream 数据,并接到 VDMA 的 S2MM 接口;

对 OV5640 的数据进行抓取,同时将数据传递到 Video In to AXI4-Stream IP ,利用 Video In to AXI4-Stream 进行输出 AXI-Stream 到 VDMA,在到 DDR

13 RGB565 - RGB888

我们采集到数据是 2 个 pclk 产生一个像素,像素是 16bits 的 RGB565,我们需要将 RGB565 -> RGB888,并输入到 Video In to AXI4-Stream.

assign r_8 = {rgb565[15:11],rgb565[15:13]};

assign g_8 = {rgb565[10:5],rgb565[10:9]};

assign b_8 = {rgb565[4:0],rgb565[4:2]};

14 VDMA+VTC+AXI4S-VideoOut 视频通路硬件搭建

视频数据的 Framebuffer 在 DDR 中

数据通过高带宽的 AXI4 接口(这里用到了 HP AXI,即 64bits 带 FIFO 的 AXI),将数据导入到 VDMA 中;

最右边的 Dynamic Clock Generator 负责生成对应分辨率的像素时钟 Pixel Clock;

像素时钟 Pixel Clock 同时输出到 Video Timing Controller、AXI4-Stream To Video Out、rgb2dvi 模块,作为像素时钟;

Video Timing Controller 在像素时钟下,同时配合软件通过 AXI4-Lite 的配置 VTC 协同工作,生成所需要的 VSync、HSync、VBank、HBank、Video Active等信号,输出到 AXI4-Stream To Video Out;

AXI4-Stream To Video Out 一端接收来自 DDR 的 AXI4-Stream 的视频数据,另一端在像素时钟 Pixel Clock 下进行 RGB[23:0] 的输出;

rgb2dvi 模块将 RGB[23:0] 数据转换成为 HDMI 的 TMDS 差分信号,进行输出到显示设备;

15 HP AXI Interface

为了使得视频数据传送带宽最大,我们需要使用 Zynq-7000 的 High Performance 的 AXI4,也就是 64bits 的并行数据。

16 PL时钟

PL 的时钟可以由 PS 端提供最多 4 路,这里我们只需要 2 路时钟,一路用于 AXI4-Lite 对寄存器的配置,另一路用于视频数据的传输;

将 FCLK_CLK0 配置为 100M,FCLK_CLK1 配置为 142MHz,这个 FCLK_CLK1 就用于视频流数据时钟,为何选 142MHz 呢,因为 1080p60 定义的时钟速率为 148.5MHz。而且包含消隐区的传递,我们的 AXI4-Stream 的时钟略低于它也可以满足高带宽的数据传送。

以上均为像素时钟。

17 VDMA

读通道,MM2S,将 DDR 的数据通过 VDMA 读出来,通过 AXI4-Stream 输出;

读通道 Memory Map Data 位宽设置为 64bit,也就是从 DDR 那边来的数据位宽,保证高带宽。

AXI4-Stream 输出位宽设置为 24bit,为何为 24bit 呢,因为我们的数据是 RGB888 的,一个像素就是 24bits。

Line Buffer 可以设置大一些,这里配置为 4096。

18 Video Timing Controller

只要 Generation,不要 Detection,Generation 用于生成时序并输出,也就是提供图像数据的设备,而 Detection 用于 Sink 设备:

配置分辨率,这里默认是是 720p:

19 AXI4-Stream To Video Out

配置 AXI 流转视频输出控制器参数,Clock Mode 选择 Independent,指的是 AXI4-Stream 和 Video Pixel Clock 的时钟是独立的,异步的,而 common 是同步的。我们选择异步。

Timing Mode 的 Slave mode 是指 VTC 是时序的 Slave,由 Video Out 模块通过 clock enable 控制时序的输出。Master Mode 指 VTC 是时序的 master,不由 Video Out 控制。我们选择 Master。

20 Dynamic Clock Generator

Digilent 设计的 IP模块,可以在 GitHub 上面找到

这个模块主要功能是根据不同的分辨率配置出不同的时钟输出,本质上是调用了锁相环,但要注意的是,此模块的参考时钟必须设置为 100MHz 这就是咱们将 FCLK0 配置为 100M 的原因。

21 rgb2dvi

IP 也是下载的 Digilent 设计的 IP模块,可以在 GitHub 上面找到。

它用于将 RGB 数据转化为 HDMI 的 TMDS 差分信号:

22 数据分类

数据流分两类,一类是视频的数据流,另一路是 AXI4-Lite 的配置数据流

Video Data Stream HP接口

1、DDR 通过 AXI4 HP 64bits Interconnect 到 VDMA;

2、VDMA 输出 AXI4-Stream 24bits 到 AXI4-Stream To Video Out;

3、从 AXI4-Stream To Video Out 输出 RGB 数据到 rgb2dvi;

4、rgb2dvi 到 TMDS 信号

AXI4-Lite Configure Data Stream 配置数据流 GP接口

配置数据流,统一由 PS 的 AXI GP 接口接出来到 Interconnect。

在分配到每个 IP 的 AXI Lite 接口,这样软件就可以寻址进行寄存器的读写控制,从而控制硬件。

Pixel Clock Connections 像素时钟连接

像素时钟的产生者是 Dynamic Clock Generator 的 PXL_CLK_O,它的参考时钟是 100MHz 来自 AXI GP CLK。

输出 2 路时钟:

PXL_CLK_O:像素时钟;

PXL_CLK_5X_O:5 倍像素时钟;

像素时钟用于连接 VTC 的 clk、AXI4-Stream To Video Out 的 vid_io_out_clk、以及 rgb2dvi 的 PixCLK;

5倍像素时钟直接输入到 rgb2dvi SerialClk: 串行时钟。

23 cordic

vivado ip核 cordic是一个实现通用坐标旋转计算的IP核,在进行数字信号处理时常常会用到。

  1. rotate 旋转 ——复数旋转
  2. translate 变换 ——复数转极坐标
  3. sin/cos
  4. arctan
  5. sinh/cosh
  6. arc tanh
  7. square root 平方根

24 OV5640_capture IP核

通过SCCB协议对OV5640进行初始化配置,将采集数据通过OV5640_capture IP核解码转化为RGB数据格式以及行、场同步信号。

25 VDMA

XILINX公司的VDMA(Video DMA)是一个专门的在ZYNQ内部(FPGA、ARM之间)搬运视频、图像等“大数据”的软核IP,刚好封装了AXI的三种协议。

ARM可以通过顶层的AXI-Lite协议完成VDMA内部的控制寄存器、状态寄存器的配置和访问,通过配置寄存器可以指定,数据搬运模块具体如何工作,数据搬运的过程需要经过行缓冲模块进行缓存;

AXI-Stream流协议,完成VDMA与其他的外部IP(比如FPGA的摄像头、HLS IP等)的数据流通信,换言之,只有在FPGA这个PL端,才有“流”的说法;

AXI4协议负责VDMA读写DDR的操作(ARM),所以VDMA在FPGA和ARM之间搬运视频图像数据,实际上是AXI4这个子协议完成的,而AXI-Stream负责在PL端的VDMA与其他FPGA模块的数据流通信。

26 DMA

DMA的英文拼写是“Direct Memory Access”,直接内存访问。DMA既可以指内存和外设直接存取数据这种内存访问的计算机技术。

27 VTC

Video Timing Controller

Video Timing Controller,XILINX提供的视频时序控制器,支持AXI-Lite接口协议,即支持ARM对内部寄存器的动态配置。

将视频数据传输到Video-Stream to Video Out IP。视频时钟控制器(Video Timing Controller, VTC)产生显示器所需要的时序信号,在两者配合下,将数据信号利用RGB-2DVI IP转化成HDMI差分信号。

AXI4-Stream to Video Out IP,该IP核与VTC协同工作,生成视频输出格式的时序信号。VTC用于控制AXI4-Stream接口和视频输出的时序参数,可将其视为一个时序发生器,用于对显示器输出所需的时序信号,从而无需考虑图像的行、场消隐区。

VTC: 视频流数据产生符合的行场同步信号

28 AXI4-Stream to Video Out

PL端调用rgb2dvi这个现成的IP,可以完成RGB888或其他颜色空间/数据格式的图像信号,到HDMI显示器的TMDS差分信号的输出。

VDMA通过AXI4协议,从ARM/PS的DDR搬运的帧图像数据,最终是以“流”的格式与PL端的其他模块进行通信的。

需要一个“中介”,完成VDMA输出的AXI-Stream流格式的图像、视频到rgb2dvi所要求的RGB888图像格式的转换。如下图所示,XILINX直接提供了现成的软核AXI4-Stream to Video Out,完成上述的AXIS到RGB的格式转换。

以保证AXI stream 到RGB输出,再到HDMI显示的同步。

软核的Timing Mode,有Slave、Master模式的选择,一般是“根据”视频时序控制器Video Timing Controller的配置,进行主从模式的选择。

Video Timing Controller配置了AXI-LITE接口,这意味着,可以在应用程序动态的改变视频时序(根据不同的显示分辨率),那么这时候,软核的Timing Mode选择Slave模式。

如果Video Timing Controller没有配置AXI-LITE接口,意味着,图像输出的是固定的分辨率,视频时序也就是固定的了,那么Timing Mode可以选择Master模式,这表示Video Timing Controller的运行,可以完全的脱离AXI4-Stream to Video Out。

VTC: 视频流数据产生符合的行场同步信号

由于RGB2DVI 需要RGB 输入和行场同步信号。 Video Timing Controller提供行场同步信号,RGB输入通过AXI4-Stream to Video Out。

29 Clocking Wizard

时钟管理模块,或是一个锁相环,可以输出倍频、分频、单端转差分的时钟,等等、

可以由ZYNQ IP输出100Mhz的时钟到clocking wizard的输入端,经过内部的配置转换之后,得到像素时钟以及HDMI编码要用到的串行时钟(40*5=200MHz)的输出。

30 Video In to AXI4-Stream

将视频输入数据转化为AXI4-Stream格式

31 浮点数和指数ip

Float-point这个IP核,用来计算浮点数。

cordic IP核做exp函数即e^x值

32 Float-point

通过配置Operation Selection界面,完成ip核配置,选择加减法还是定点数转浮点数, 乘法,除法,开方等操作。

33 对应到720P 1208x720

工作时钟为60hz。 60fps。 ov5640 74.25MHZ, 像素时钟100mhz。 通过异步fifo将74.25MHZ同步到100mhz时钟频率。 100mz定为工作时钟。

DDR读写时钟150MHZ. 先缓存再处理。处理完成再通过vdma写入ddr。

像素时钟100mhz。 串行时钟500mhz。

34 数字信号的处理

半精度加法器,半精度乘法器设计。

加法器: 对阶,尾数相加,规格化并舍入,溢出判断。

乘法器: 阶码相加,尾数相乘,规格化并舍入,溢出判断。

滤波器

均值滤波去除高斯噪声

中值滤波去除椒盐噪声

图像二值化

图像分类

卷积

时序电路和组合电路

组合电路,是任意时刻的输出仅仅取决于当前时刻的输入,与电路之前的历史状态无关。

常见的组合逻辑电路:多路选择器、编码器、译码器、移位器、比较器、

时序逻辑电路的 输出不仅取决于当前的输入,还取决于电路的历史状态。

  • 锁存器:锁存器在E的高(低)电平期间对信号敏感
  • 触发器:触发器在CP的上升沿(下降沿)对信号敏感

从电路行为上讲,不管输入如何变化,仅当时钟的沿(上升沿或下降沿)到达时(这就是信号在时序逻辑中延迟一个时钟周期的根本原因),才有可能使输出发生变化。

35 线性回归,最小二乘法

为尽量减小q和p之间的差异,并且保持线性模型,构建带有正则项的岭回归:

36 复原图像质量的评价

1 主观评价: 图像亮度,清晰度,对比度等。

2 客观评价:

峰值信噪比: PSNR越大,图像的失真程序越小。

平均梯度: 平均梯度反应图像细节反差及纹理变化。

对比度

37 三级流水线和五级流水线的区别

流水线级数越多,可使得单条指令流水线并行执行指令的能力更强。

每一级的处理时间更短,可以进一步提升处理器的工作频率。

但 流水线深度受限于流水线的延迟和额外开销。 需要使用高速锁存器作为流水线的缓冲寄存器。

流水线在本质上理解为以面积换性能,以空间换时间。

五级流水线,增加了五组寄存器,每一级流水线内部都有各自的组合逻辑数据通路,但提高了数据吞吐量。

每一级流水线都由寄存器组成,更多的流水线要消耗更多的寄存器,占用更多的芯片面积。

由于每一级流水线都需要握手,流水线最后一级的反压信号可能回一直串扰到最前一级,造成严重的时序问题,因此需要高级的技巧来解决此类反压时序问题。

根据应用背景做合理的选择。

越深(正面):主频越高,性能越高,吞吐率越高。

越深(负面):面积开销增大,反压时序问题,分支预测时的浪费和损失。

为什么是三级,执行阶段之后会有三种选择, 跳转指令的跳转,访存指令的访存,算术指令的写回。 所以要不就是五级流水线分开,要不就是三级流水线。

38 流水线中的反压

若流水线越深,由于每一级都需要握手,流水线最后一级反压信号可能会一直串扰到最前一级造成严重的反压时序问题。

反压信号处理解决方法:

取消握手:杜绝反压的发生,时序表现非常好,但流水线中的每一级并不会与其下一级进行握手,可能会造成功能错误或者指令丢失。

加入向前旁路缓存---前递:也是一种用面积换时序的方法。旁路缓存仅只有一个表项,由于增加了这一个额外的缓存表项,可以将后向的握手信号时序路径砍断,但是对前向路径不受影响,因此可以广泛使用于握手接口。

加入乒乓缓存:是一种用面积换时序的方法,也是在解决反压的最简单方法。通过使用乒乓缓存(有两个表项)替换掉普通的一级流水线(只有一个表项),

可以使得此级流水线向上一级流水线的握手接收信号仅关注乒乓缓存中是否有一个以上有空的表项即可,而无需将下一级的握手接受信号串扰至上一级。

39 rom中的指令,ram中的数据

通过txt文件进行testbench验证。通过readmemb,将文本中数据和指令赋值到存储器中。

通过display打印输出信息。

40  ROM

ROM是通过双端口RAM实现的,数组memory。线与的传递。

使用专门的总线访问。

ICB 供蜂鸟E203处理器核内部使用,同时可作为SOC的总线。

 41 DFF搭建二分频电路

将D触发器的D端连接D触发器的输出QN端,就构成了一个由D触发器形成的2分频电路。

 42 检查时序

FPGA中Tco、Tsu和Th是由FPGA的芯片工艺决定的。

Tcomb为数据延迟,包括组合逻辑延迟和走线延迟。

整个电路中,时钟频率由最差的一条时序路径决定。

我们所谓的时序约束,实际上就是对时钟延迟和Tcomb做一定的要求或者干预,其中Tcomb由组合逻辑(代码)及布局布线决定,这也决定了系统最高的工作频率。

时间裕量包括建立时间裕量和保持时间裕量。

一个FPGA工程在综合实现后,是否满足时序约束,其实就是看所有的捕获寄存器是否能正确稳定捕获到发起寄存器发出的数据。

也就是说到达捕获寄存器的数据输入端口D(regb/D)的数据要满足建立和保持时间要求,也就是说在Tsu之前,current data valid就要准备就绪,而在Th之后呢,current data valid还要多维持一段时间。

在Tsu之前以及Th之后多出的这部分时间,我们就称之为“裕量”,裕量越大,时序越宽松。

裕量的大小与时钟频率、代码设计以及布局布线有着紧密的联系

一个设计的时序报告中,裕量为负数时,表示时序约束出现违例,虽然个别违例不代表你的工程就有致命的问题,但是这是一个风险(时序报告是按照工艺、电压以及温度的上下限给出的结果)。当违例数较多,也就意味着设计在实际环境中出现问题的概率也会越大。

在综合之后,**我们需要特别关注的是建立时间的时序违例,因为可以通过增加布线长度来保证保持时间。**大多数保持时间违例在实现之后自然会被优化掉。

43 时序违例解决方法

Setup Time Violation的解决方案

  • 增大时钟周期Tcycle,即降低时钟频率
  • 减小 D->Q的传输延迟Tco,即更换更快的器件,使用更先进的器件库
  • 减小 Tcomb,即减小组合逻辑延时,主要是关键路径的处理。包括插入寄存器使其流水、重定时等。
  • 增大时钟歪斜Tskew=Tclkb-Tclka。如果时钟歪斜 Tskew 为正,对setup是有利的,对hold是有害。

Hold Time Violation的解决方案

  • 增加 Tcomb 延迟,增大数据的延迟具体表现为插入 Buffer,Xilinx 还提到可以插入 LUT1 增加延迟等方式来修复;

  • 增大 Tcomb,即增大组合逻辑延时,主要是关键路径的处理。可以增加Buffer,或者后端布局布线拉长布线以增加延时。

  • 减小时钟歪斜Tskew=Tclkb-Tclka。如果时钟歪斜 Tskew 为正,对setup是有利的,对hold是有害。

44 神经网络

通过卷积等运算提取特征,通过权重和偏置连接。 通过损失函数,去训练模型的输出,让模型的输出接近于期望的输出。

利用大量的数据,通过最小化损失函数,不断训练模型。找出输出和输出之间的权值关系。

45 DMA

直接存储器访问,DMA传输是将数据从一个地址空间复制到另一个地址空间,提供外设和存储器之间或者存储器和存储器之间的高速数据传输。

CPU有转移数据,计算,控制的功能。

通过DMA完成数据的传输,解决了过度消耗CPU资源的问题。

46 VDMA

VDMA作为一个数据搬运的IP,其本质就是将数据在AXI4 Memory Map 和 AXI4-Stream 之间进行格式的转换。

在Zynq芯片内部,PS和PL是共享DDR控制器的。PS访问DDR十分简单,只要操作DDR映射的虚拟地址即可。对于PL而言,要接入DDR,必须通过AXI_HP端口。

Zynq共有四个AXI_HP通道,通道数据宽度可以配置为32位或64位,这些接口通过FIFO控制器连接PL到存储接口上,其中有两条连接到DDR存储控制器上,还有一条是连接到双端口的OCM上的。

AXI_HP接口也是遵循AXI协议的,因此利用VDMA可以直接连接HP端口。除了使用VDMA,当然也可以自己开发出符合AXI协议的IP。

VDMA数据接口可以分为读、写通道,用户可以通过写通道将AXI-Stream类型的数据流写入DDR3,通过读通道可以从DDR3读取数据,并以AXI-Stream类型的格式输出。由此可知,VDMA本质上是一个数据搬运IP,为数据进、出DDR3提供了一种便捷的方案。

47 UDP 以太网数据帧格式  以太网MAC帧协议,

UDP数据报格式, UDP报文包括UDP报文头部和UDP报文数据。UDP数据报作为IP数据报的数据部分封装在IP数据报中。

以太网中传输的数据帧格式为:

前同步码,SFD标识帧开始,目的MAC地址,源MAC地址,长度/类型,数据和填充,FCS帧校验序列。

写入0800 则是 IP协议

长度/类型为0x0800.。 数据和填充由ip报头部和ip报文数据组成。ip报文数据由udp报文头部和udp报文数据组成。

UDP 以太网帧里面包括 3 个校验字段,IP 报文头部检验字段、UDP 头部校验字段和以太网报文的校验字段 FCS。

以太网报文的校验字段 FCS 的计算:CRC冗余循环校验

物理MAC地址:全球唯一的硬件地址,这种MAC地址标识了唯一的以太网的一
的一个终端。

48  TCP和UDP

TCP 是一种面向有连接的传输层协议,能够对自己提供的连接实施控制。适用于要求可靠传输的应用,例如文件传输。面向字节流,传输慢。三次握手四次挥手

UDP 是一种面向无连接的传输层协议,不会对自己提供的连接实施控制。适用于实时应用,例如:IP电话、视频会议、直播等。,以报文的方式传输,效率高。

 49 TCP/IP协议

即开放式系统互联(Open
System Interconnect)模型 -----OSI七层框架

物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

TCP/IP协议是Internet互联网最基本的协议,其在一定程度上参考了七层ISO模型。

应用层---传输层 -- 网络层 -- 链路层

TCP/IP协议主要由网络层的IP协议 和 传输层的TCP协议组成 。

TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

TCP协议是传输控制协议,工作在传输层。提供面向链接的,可靠的传输服务(三次握手,四次挥手)

UDP协议:用户数据报协议,提供的是不可靠的,面向无连接的传输服务(只有数据的发送方和接收方)

IP协议是TCP/IP协议的核心,所有的TCP,UDP等数据都以IP数据格式传输

50 IO电平标准

1 LVTTL电平标准即低电压三极管---3.3V电平标准

2 LVCMOS电平标准即低压互补金属氧化物半导体电平标准是JEDEC(JESD8-5)的一种通用电平标准,该标准在V5系列FPGA中包括LVCMOS12、LVCMOS15、LVCMOS18、LVCMOS25和LVCMOS33。

3 PCI电平标准即外设器件互联电平标准,该标准支持33MHz和66MHz的总线应用。

4 LVDS(Low-Voltage Differential Signaling ,低电压差分信号)

LVDS(Low-Voltage Differential Signaling ,低电压差分信号)是美国国家半导体(National Semiconductor, NS,现TI)于1994年提出的一种信号传输模式的电平标准, 它采用极低的电压摆幅高速差动传输数据,可以实现点对点或一点对多点的连接。

内部电压Xilinx简称VCC,Altera简称VCCINT;IO电压Xilinx简称VCCO,而Altera简称VCCIO。

5 SSTL,即Stub Series Termination Logic, 短截线串联终端逻辑,和普通SDRAM的接口相比,DDR SDRAM接口电路的设计提出了更高的要求,其接口电路设计复杂度大幅度增加。

6 HSTL,即High Speed Transceiver Logic 高速收发逻辑,其最主要用于高速存储器读写,传统的慢速存储器阻碍了高速处理器的运算操作,此标准所要求的I/O结构是差分放大输入。

除了TTL、COMS接口电平之外,LVDS、HSTL、GTL/GTL+、SSTL等新的电平标准逐渐被很多电子产品采用, 比如:

  • 液晶屏驱动接口一般都是LVDS接口 TMDS
  • 数字I/O一般是LVTTL电平
  • SDRAM、DDR电平一般是HSTL、SSTL的

51 HDMI显示

pixelclk根据显示分辨率确定,不同的分辨率使用不同的时钟频率,pixelclk5x的值则是pixelclk的5倍。例如显示分辨率为1280*720时,pixelclk为74.25MHz,pixelclkx5为371.25MHz;

TMDS——最小化传输差分信号 TMDS编码

液晶常用接口“LVDS、TTL、RSDS、TMDS”技术。

52 fifo深度计算的意义

FIFO通常用于在两个时钟域间传输数据,并且通常情况下,写数据的速率是要比读数据的速率快的,因此,就存在FIFO最小深度的一个问题,以防止在数据传输时发生溢出,造成数据的丢失。

在计算FIFO最小深度时,我们一般考虑极端情况,即在一段时间内写速率达到最大,此时由于读数据慢于写数据,因此需要设置一个FIFO的最小深度,来保证数据不丢失。

我们需要的FIFO深度是因为读取速率慢于写入速率而未能读取的数据量。

fifo最小深度一般是用来计算一次突发传输FIFO的最小深度。
fifo最小深度保证fifo不会被写满,如果fifo写满会导致数据溢出,溢出的话。会造成数据丢失。

53 毛刺问题

在FPGA的设计中,毛刺现象是长期困扰电子设计工程师的设计问题之一,是影响工程师设计效率和数字系统设计有效性和可靠性的主要因素。

由于信号在FPGA的内部走线和通过逻辑单元时造成的延迟,在多路信号变化的瞬间,组合逻辑的输出常常产生一些小的尖峰,即毛刺信号,这是由FPGA内部结构特性决定的。

毛刺现象在FPGA的设计中是不可避免的,有时任何一点毛刺就可以导致系统出错,尤其是对尖峰脉冲或脉冲边沿敏感的电路更是如此。

毛刺产生的原因

如果一个组合逻辑电路中有"毛刺"出现,就说明该电路存 在"冒险"。

毛刺产生的根本原因是信号在芯片内部走线时产生的延迟。

由于延迟的作用,多个信号到达终点的时间有先有后,形成了竞争,由竞争产生的错误输出就是毛刺。所以,毛刺发生的条件就是在同一时刻有多个信号输入发生改变。

消除毛刺的方法

1 利用冗余项法

利用冗余项消除毛刺有2种方法:代数法和卡诺图法,两者都是通过增加冗余项来消除

2 采样法

由于冒险多出现在信号发生电平跳变的时刻,即在输出信号的建立时间内会产生毛刺,而在保持时间内不会出现,因此,在输出信号的保持时间内对其进行采样,就可以消除毛刺信号的影响。

常用的采样方法有2种:

一种使用一定宽度的高电平脉冲与输出相与,从而避开了毛刺信号,取得输出信号的电平值。这种方法必须保证采样信号在合适的时间产生,并且只适用于对输出信号时序和脉冲宽度要求不严的情况。
另一种更常见的方法叫锁存法,是利用D触发器的输入端D对毛刺信号不敏感的特点,在输出信号的保持时间内,用触发器读取组合逻辑的输出信号。由于在时钟的上升沿时刻,输出端Q=D,当输入的信号有毛刺时,只要不发生在时钟的上升沿时刻,输出就不会有毛刺。这种方法类似于将异步电路转化为同步电路,实现简单,但同样会涉及到时序问题。

利用时钟上升沿时候,输出端Q=D,当输入的信号有毛刺时,只要不发生在时钟的上升沿时刻,输出就不会有毛刺。

--------采样法是在 输出信号的保持时间进行采样----类似于异步的同步处理

如果在输出信号的保持时间内对其进行“采样”,就可以消除毛刺信号的影响。

3 吸收法

由于产生的毛刺实际上是高频窄脉冲,故增加输出滤波,在输出端接上小电容C就可以滤除毛刺。但输出波形的前后沿将变坏,在对波形要求较严格时,应再加整形电路,该方法不宜在中间级使用。 -----滤波电容

4 延迟法

因为毛刺最终是由于延迟造成的,所以可以找出产生延迟的支路。对于相对延迟小的支路,加上毛刺宽度的延迟可以消除毛刺。但有时随着负载增加,毛刺会继续出现,而且,当温度变化,所加的电压变化或要增加逻辑门时,所加的延迟是不同的,必须重新设计延迟线,因而这种方法也是有局限性的。而且采用延迟线的方法产生延迟会由于环境温度的变化而使系统可靠性变差。

5 硬件描述语言

这种方法是从硬件描述语言入手,找出毛刺产生的根本原因,改变语言设计,产生满足要求的功能模块,来代替原来的逻辑功能块。

出处。

54 避免综合后仿真出现冒险问题。

1)时序电路建模时,用非阻塞赋值。

2)锁存器电路建模时,用非阻塞赋值。

3)用always和组合逻辑建模时,用阻塞赋值。

4)在同一个always块中建立时序和组合逻辑模型时,用非阻塞赋值。

5)在同一个always块中不要既使用阻塞赋值又使用非阻塞赋值。

6)不要在多个always块中为同一个变量赋值。

55 避免在综合时引入锁存器的注意点包括:

1)组合电路的每一个if-else语句要完整,即每一个if要对应一个else,时序电路if语句不完整不会出现锁存器问题。

   2)case语句要完整,即每一个case语句对应一个default。

56 为什么触发器需要满足建立时间和保持时间

由于数据传输到达触发器时会延时,那么需要在时钟有效沿来之前把数据准备好,以便采样到正确的数据;

数据被采样完毕后,到下一个触发器时还会延时,保持时间是为了在时钟有效沿到达之后,后一级的触发器也能正确采样。

如果不满足建立时间和保持时间就会进入亚稳态。

毛刺并不是对所有的输入都有危害,例如D触发器的D输入端,只要毛刺不出现在时钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害,我们可以说D触发器的D输入端对毛刺不敏感。

根据这个特性,我们应当在系统中尽可能采用同步电路,这是因为同步电路信号的变化都发生在时钟沿,只要毛刺不出现在时钟的沿口并且不满足数据的建立和保持时间,就不会对系统造成危害。 (由于毛刺很短,多为几纳秒,基本上都不可能满足数据的建立和保持时间)

57 处理毛刺的方法

常用三种方法: 1.组合逻辑输出加寄存器。 原理:用一个寄存器去读带毛刺的信号,利用寄存器对输入信号的毛刺不敏感的特点去除信号中的毛刺,寄存器一般只在时钟跳变沿对输入信号敏感。

2.信号同步法 由于大多数毛刺都比较端,大概几个纳秒,只要毛刺不出现在始终跳变沿,毛刺就不会对系统造成危害了。做到真正的“同步”去除毛刺信号的关键就是保证在时钟的跳变沿读取的数据是稳定的数据而不是毛刺数据。 (1)信号延时同步法(包括数据延迟或时钟延迟) (2)状态机控制

3.格雷码计数器 使用格雷码计数器将避免毛刺的出现,因为格雷码计数器的输出每次只有一位在跳变

58锁存器,触发器,寄存器

锁存器(latch)---对脉冲电平敏感,在时钟脉冲的电平作用下改变状态。

: 具有存储功能的逻辑电路,是构成时序电路的基本逻辑单元

锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,当锁存器处于使能状态时,输出才会随着数据输入发生变化。

不用锁存器的原因有二:

1、锁存器容易产生毛刺,

2、锁存器在ASIC设计中应该说比FF要简单,但是在FPGA的资源中,大部分器件没有锁存器这个东西,所以需要用一个逻辑门和FF来组成锁存器,这样就浪费了资源;

触发器: 具有存储功能的逻辑电路,是构成时序电路的基本逻辑单元

触发器(Flip-Flop,简写为 FF)---对脉冲边沿敏感,其状态只在时钟脉冲的上升沿或下降沿的瞬间改变 ;

触发器也叫双稳态门,又称双稳态触发器,是一种可以在两种状态下运行的数字逻辑电路。触发器一直保持它们的状态,直到它们收到输入脉冲,又称为触发。当收到输入脉冲时,触发器输出就会根据规则改变状态,然后保持这种状态直到收到另一个触发 ;

应用场合:时钟有效迟后于数据有效,这意味着数据信号先建立,时钟信号后建立,在CP有效沿时刻打入到寄存器 ;

寄存器:

寄存器(register):用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果,它被广泛的用于各类数字系统和计算机中。

其实寄存器就是一种常用的时序逻辑电路,但这种时序逻辑电路只包含存储电路。寄存器的存储电路是由锁存器或触发器构成的,因为一个锁存器或触发器能存储1位二进制数,所以由N个锁存器或触发器可以构成N位寄存器。

工程中的寄存器一般按计算机中字节的位数设计,所以一般有8位寄存器、16位寄存器等 ;

寄存器的应用

a)可以完成数据的并串、串并转换;

b)可以用做显示数据锁存器:许多设备需要显示计数器的记数值,以8421BCD码记数,以七段显示器显示,如果记数速度较高,人眼则无法辨认迅速变化的显示字符。在计数器和译码器之间加入一个锁存器,控制数据的显示时间是常用的方法。

c)用作缓冲器;

d)组成计数器:移位寄存器可以组成移位型计数器,如环形或扭环形计数器。

59 锁存器

锁存器(latch)是电平触发的存储单元,数据存储的动作(状态转换)取决于输入时钟(或者使能)信号的电平值,仅当锁存器处于使能状态时,输出才会随着数据输入发生变化。

对毛刺敏感(使能信号有效时,输出状态可能随输入多次变化,产生空翻,对下一级电路很危险),不能异步复位,因此在上电后处于不确定的 状态。

锁存器会使静态时序分析变得非常复杂,不具备可重用性。 (首先, 锁存器没有时钟参与信号传递,无法做 STA;其次,综合工具会将 latch 优化掉,造成前后仿真结果不一致)

时序逻辑电路:由锁存器、触发器和寄存器等单元组成,其某一时刻的输出状态不仅与该时刻的输入状态有关,而且与电路原来的状态有关,具有记忆功能。

60 锁存器的产生情况以及避免

组合逻辑中if语句中没有else

组合逻辑中case的条件不能够完全列举且没有default

组合逻辑中输出变量赋值给自己

在组合逻辑电路的always中,if-else语句中不能缺少else;case语句中条件不能够完全列举或缺少default;在if-else和case中均不能出现变量自己将值赋给自己。

61 fifo

同步fifo

双端口ram -----full和empty信号的产生

异步fifo

1 双口ram

2 控制地址自增

3 二进制码转格雷码

4 格雷码跨时钟域

5 对同步后的格雷码转二进制码

6 full和empty的产生

62 异步fifo格雷码

格雷码每两个相邻码字之间只有1bit的变化,将多bit的地址抓换成格雷码。然后进行跨时钟域的传递, 就可以直接使用两级寄存器 进行同步。由于只有1bit的变化,即使采样错误也只有一种错误的可能,最多也就是保持原来的状态,不会出现其他不稳定的状态,

由于异步fifo的读指针和写指针分别属于不同的时钟域,这样指针在进行同步的过程中容易出错,采用格雷码,相邻每位只有一位发生变化,这样在进行指针同步时候,就会产生同步正确。 即使同步出错,出错的结果也是写指针的跳变不变。

对于读空判断,最多导致fifo在不是真空的时候产生,而不会出现读空。 格雷码保证即使读写指针同步后出错,也不影响fifo功能的正确性

63 格雷码同步

异步FIFO通过比较读写地址进行满空判断,但是读写地址属于不同的时钟域,所以在比较之前需要先将读写地址进行同步处理,

将写地址同步到读时钟域再和读地址比较进行FIFO空状态判断(同步后的写地址一定是小于或者等于当前的写地址,所以此时判断FIFO为空不一定是真空,这样更保守)。

将读地址同步到写时钟域再和写地址比较进行FIFO满状态判断(同步后的读地址一定是小于或者等于当前的读地址,所以此时判断FIFO为满不一定是真满,这样更保守),这样可以保证FIFO的特性:FIFO空之后不能继续读取,FIFO满之后不能继续写入。\