1 ZYNQ初始

1.1 PL简介

这里PL就是指的FPGA(Field Programmable Gate Array,现场可编程门阵列),一种可以通过编程来修改其逻辑功能的数字集成电路 (芯片)。

1.1.1 CLB介绍

为什么它能通过编程改变硬件电路呢,是因为它有CLB(可配置的逻辑块),如上图所示,CLB由“片0”和“片1“组成(在赛灵思中片就是Slice)。在这个FPGA芯片当中是有很多的这个CLB组成了一个二维的矩阵,图中只是其中一个CLB的一个内部结构,那么它是由两个片组成,然后一个开关矩阵进行一个连接。这个开关矩阵你可以把它理解成一个布线资源,CLB呢可以通过这个开关矩阵跟其他的这个PL端的资源进行一个连接,或者是连接CLB内部的一些资源。

这个片Slice是由四个LUT加上这八个FF组成。其中LUT(Look UP Table,查找表)它主要的功能是对一个输入的逻辑函数,我们可以通过这个查找表来去配置各种不同的功能,比方说配置成一个存储器了、或者是定时器等等。FF(Flip-Flop,触发器)这个触发器就像我们在大学里面学的数字电路里面的DQ触发器,主要是实现对单个比特数据的寄存。

总之CLB是FPGA能可编程的基础。

1.1.2 FPGA架构

  • 可编程的IO单元

    • 它主要是跟这个物理的焊盘进行连接,可以实现一些可编程的一个IO的一些特性,比方说我们可以将这个IO呢配置成输入或者输出等等。
  • 可编程的逻辑单元

    • 赛琳斯给这个可编程的逻辑单元就叫CLB。
  • 底层的嵌入功能单元

    • 一般的这个FPGA芯片里面它都会有这个单元来去实现一些特定的功能,比方说有这个PLL来去实现一个对时钟的一个倍频、分频等,或者是用DSP来去做一些算法处理和运算等。
  • 嵌入式块RAM(BRAM)

    • 顾名思义这个RAN那就是存储数据。
  • 布线资源

    • 布线资源这个图里面并没有给它画出来,我们要知道这个布线资源它就是来去实现各个不同的功能模块的一个连接,从而去实现我们的一个功能。
  • 硬核

    • 这个硬核呢要区别于这里的底层嵌入功能单元,像什么PLL锁相环、DSP这些FPGA芯片里面基本上都有的,但是这个硬核它里面就是存在一个这样的一个专用的电路来去实现特定的功能并不是每个FPGA芯片里面都有这些硬核;
    • 比方说赛里斯的七系列的FPGA它有这个XADC这个硬核,这个硬核它可以实现什么功能呢,顾名思义ADC那就是模拟到数字的一个转换,那么它除了实现这个模拟到数字的转换之外呢它还能够监测这个芯片上面的一个啊温度、各个不同的电压等等。
    • 对于7系列它是具有这个硬核,但是其他的FPGA可能就没有这个硬核了,所以说要根据FPGA手册来去查看它有哪些硬核。

    上面我们是介绍了FPGA的一个通用的架构,那么我们下面呢就再来看一下针对我们所使用的这个ZYNQ系列,它的PL端的一个架构是什么样子的。下图是ZYNQ的PL端的一个架构(或者说内部结构图):

    图中左上部这里缺失的一部分呢就是PS了,因为这里只介绍PL的架构,所以说这里只呈现了一个PL端的一个图。好我们就从上面往下面看吧。

    首先,最上方标注了CLB,就是一个可配置的一个逻辑块,可以发现这种不同颜色的这种矩形框在整个的占比非常多,它呈现水平和垂直的一个排列,组成了一个二维的矩阵,那么这个呢也是这个FPGA它能够实现可编程电路的一个重要的构成要素,就是这个CLB。

    然后,再往右侧就是一个输入输出块(Input/Output Blocks,IOB),主要跟这个物理的焊盘呢进行一个连接,其实就是对应我们芯片的引脚。这个IOB是指这种可编程的输入输出单元,其可编程的特性就体现在我们可以配置它是输入输出或者是双向的,亦或者我们配置它的一个驱动电流,包括各种不同的电平标准等等都可以来去配置,所以说它的IO非常灵活。

    然后,下面有Block RAM,它就是用来实现存储数据,其实在这个它的开发工具当中呢会提供好多XXX(没听清视频说的什么),比方说提供了这个RAM、ROM或者是FIFO,这些我们后面在开发的时候可能会频繁用到,那这些的一个存储相关的XXX(没听清视频说的什么)它底层使用的基本上都是这个BRAM。它非常适合存储一些比较大的一些数据量。

    然后,BRAM的左侧有一个时钟的一个单元,主要是对时钟进行一个管理用的,比方说我们就可以通过这个时钟单元对输入的时钟进行一个倍频和分频等等,包括呢调整它的相位,都可以通过这个时钟单元的来去实现

然后再往这边呢就是这个浅蓝色的一个数

12:32

这个矩形框呢就是指这个DSP

12:37

大家可以发现这个DSP跟这个block ram

12:40

它其实是紧挨着的

12:41

离得很近

12:42

那这个DSP呢主要适合做一些啊这个算法类的

12:48

就是做一些相对来说复杂一点的算法

12:51

那么你要做各种算法计算

12:54

那么肯定可能是需要这个存储资源呢

12:57

来做一个缓存的

12:59

所以说他们俩呢可以说是紧密连在一起

13:02

你真正在使用的时候呢

13:04

可能这两个资源呢都会去用到

13:07

那这个DSP呢它主要是做一些算法的运算

13:11

但其实我们也可以通过这个

13:14

它的一个可编程的逻辑块实现一个计算

13:18

只不过呢嗯这个可编程的这个逻辑块

13:22

它适合做一些这种简单点的计算

13:25

比方说你的这个这个字节比较比较小

13:28

或者说你的数据量比较小

13:30

但是如果说你的这个算法比较复杂

13:33

那么你如果是用这个可编程的逻辑块实现的话

13:36

那么可能会占用非常多的资源

13:39

所以说这种的话呢就适合用这种DSP呢来去实现

13:45

并且呢它的这个运算的一个性能呢也比较强

13:50

我们下面呢再来看一下这个硬核

13:53

就是这个差ADC

13:57

那么这个ink的P2端呢

13:59

它是具有这个差ADC的硬核的

14:02

那么它可以实现一个模拟到数字量的一个转换

14:06

当然了

14:07

他这个自带的这个XIC可能转换速率不高

14:10

应该是只有个一兆

14:16

如果说你是需要一个更高速率的转换的话呢

14:19

那么肯定可能需要一些高速的AD或DM模块

14:23

类似于这种了

14:25

好除了具有这个插ADC硬核之外呢

14:28

它还有这个GTX和PCI这样的一些功能模块

14:36

这个呢主要是做一些高速的一个串行收发了

14:41

这个呢因为是硬核

14:43

我们前面也说了

14:43

他并不是所有的这个APP呢都具有这些硬核

14:47

那么对于我们所使用的ZK

14:49

7010和ZK7020来说呢

14:52

它是没有这个GTX和PCIE这个模块的

14:56

那么它是有这个差ADC硬核

15:00

就是针对这个7010和7020来说好

15:05

那么我们这里呢

15:09

针对这里的这个P2端的一个架构呢

15:12

就介绍完了

15:13

那么最后呢我们这里再来补充一点

15:16

就是说我们这里呢只是说简单了解一下

15:20

它的一个结构

15:21

并不是说我们在写代码的时候

15:24

就特别要关注它的这个底层结构

15:27

我们了解它的这个底层结构之后呢

15:29

对我们后面对芯片一个资源的评估呢

15:33

比较有好处

15:34

比方说我们的这个IP间呢

15:36

它的资源毕竟是有限的对吧

15:38

但是我们要实现不同的功能

15:40

都是通过他的这个可配置的逻辑块呢来去实现

15:45

那么这个了解了这个底层结构之后呢

15:48

有助于我们去实现某个功能

15:50

对它的一个资源消耗的一个评估

15:53

其实我们真正在写代码的时候

15:55

那么这个开发工具它会帮我们去映射

15:59

它需要哪些LVT

16:01

需要你需要多少DSP等等

16:03

那么工具呢会帮我们来完成这个呢需要注意好

16:09

那这里呢我们再来看一下

16:11

其实针对这个wink的这个pl端的一个架构呢

16:14

它其实是分为两种的

16:17

那么一种呢就是针对这个artist的这个型号

16:22

就说像这个wink7010

16:25

7015和7020呢

16:29

它的这个P2端的架构呢是使用的这个artist

16:33

而针对这个7030

16:36

7045和7100呢

16:39

它的这个P2端的一个架构呢

16:41

使用的是这个这个context的一个架构

16:45

那它的这个性能呢

16:47

其实是要优于这个ARTICS的一个系列的

16:50

就说他俩比较而言

16:52

所以说这个7010跟7020呢

16:55

相当于是一个走性价比的一个路线

16:58

当然它的这个性能呢其实也是非常强的

17:01

也能够胜任很多的一个场景

17:04

17:04

以上部分呢

17:05

就是我们对这个P端的一个简单介绍

1.2 PS简介

 1.3 PL和PS数据的交互接口