首页 > 技术文章 > 【ZYNQ学习】ZYNQ架构介绍

yuhengz 2022-03-06 00:28 原文

在上一篇博客中,主要介绍了ZYNQ的基本信息以及如何在vivado上实现自己的设计,但是在实际应用中,掌握ZYNQ的架构是必要的,因此在这篇博客中主要记录一下ZYNQ的架构
本篇博客的主要参考是ZYNQ book,有兴趣的可以去阅读一下,里面对于ZYNQ的介绍我认为讲的还不错,适合入门使用

处理器系统

  • 硬处理器:一颗双核ARM Cortex-A9处理器
  • 软处理器:Xilinx的MicroBlaze,由可编程逻辑部分的单元组合而成
  • 软处理器的优势是处理器实例的数量和精确实现是灵活的,而硬处理器可以获得相对较高的性能,可以在ZYNQ的PL部分分配上一个或多个MicroBlaze软处理器,用于和ARM处理器协同工作
    软件硬件处理器

下面着重来介绍一下PS部分,提到PS部分,下面这张图需要掌握:
PS部分

应用处理器单元(APU)

ZYNQ的处理器系统里并非只有ARM处理器,还有一组相关的处理资源,形成了一个应用处理器单元(Application Processing Unit,APU),除此之外还有时钟发生电路,扩展外设接口,存储器接口等
APU主要由两个ARM处理核组成,每个都关联了一些可计算的单元:

  • 一个NEONTM媒体处理引擎(Media Processing Engine,MPE)
  • 浮点单元(Floating Point Unit,FPU)
  • 一个内存管理单元(Memory Management Unit,MMU):在虚拟地址和物理地址之间做翻译
  • 一个一级cache存储器(分为指令和数据两个部分)
  • 一个二级cache存储器
  • 片上存储器(On Chip Memory,OCM)
  • 一个一致性控制单元(Snoop Control Unit,SCU)在ARM核和二级cache及OCM存储器之间形成了桥连接
    简化版框图

从编程的角度而言,对ARM指令的支持是由Xilinx的软件开发包(Software Development Kit, SDK)来实现的,同时编译器支持ARM和Thumb指令集(16位或32位),在特定的状态下还支持8位Java字节码(用于Java虚拟机)

处理器系统外部接口

PS和外部接口之间的通信主要是通过复用的输入/输出(MIO)实现的,提供了可灵活配置的54个引脚,也可以通过扩展MIO(EMIO)实现,但是EMIO并不是PS和外部连接之间的直接通路,而是通过共用PL的I/O资源实现的
可用的I/O包括标准通信接口和通用输入输出,如下图所示:
IO外设接口

可编程逻辑

ZYNQ的PL部分是基于Artix-7和Kintex-7的FPGA
PL部分

  • 可配置逻辑块(CLB):在PL中排列为一个二维阵列,通过可编程互联连接到其他类似的资源,每个CLB中包含两个逻辑片,且紧邻一个开关矩阵
  • 片(Slice):CLB中的一些子单元,ZYNQ的片是由4个查找表、8个触发器和其他一些逻辑所组成的
  • 开关矩阵:每个CLB旁都有一个开关矩阵,实现灵活的布线功能来连接CLB内的单元或把一个CLB与PL内的其他资源连接起来
  • 输入/输出块(IOB):实现PL逻辑资源之间的对接,并且提供物理设备焊盘来连接外部电路

特殊资源

  • 块RAM
    • 每个块RAM可以存储最多36KB的信息,并且可以配置为一个36KB的RAM或两个独立的18KB的RAM(默认的字宽是18位),还可以被重塑来包含更多更小或更少更长的单元
  • DSP48E1
    • 逻辑部分的LUT可以用来实现任意长度的算术运算,但是最适合的是做短字长的算术运算,而DSP48E1是专门用于实现对长字节的高速算术运算的逻辑片

通用输入/输出

ZYNQ上的IOB合起来称为SelectIO资源,被组成50个IOB一组,每个IOB有一个焊盘,与外部世界连接来做单个信号的输入输出
I/O组分为高性能(High Performance,HP)高范围(High Range,HR),支持各种IO标准和电压

  • HP接口的电压最高为1.8V,通常用作连接存储器和其他芯片的高速接口
  • HR接口允许高达3.3V的电压
  • 两类接口都支持单端和差分信号,单端需要一个IOB连接,差分需要两个

其他可编程逻辑扩展接口

  • 模数转换:XADC块,具有两个独立的12位ADC,每个可以以1Msps对外部模拟信号采样,对XADC的控制是用位于PS内部的PS-XADC接口控制块实现的,可以由在APU上执行的软件来编程
  • 时钟:PL接收来自PS的四个独立的时钟输入

处理器系统与可编程逻辑的接口

AXI标准

AXI表示的是高级可扩展接口(Advanced Extensible Interface),当前的版本是AXI4,是ARM AMBA3.0开放标准的一部分

  • AXI4
  • AXI4-Lite:只支持每次连接传输一个数据
  • AXI4-Stream:用于高速流数据,支持批量传输无限大小的数据,没有地址机制
    存储映射:如果一个协议是存储映射的,则在主机所发出的会话就会标明一个地址,对于每次会话单个数据传输的AXI4-Lite而言,数据就是写入那个指定的地址或者从那个地址读出;而对于AXI4批量的情况下,地址表明的是要传输的第一个数据字的地址,而从机端必须计算随后的数据字的地址

AXI互联和接口

在PS和PL之间的主要连接是通过一组9个AXI接口,每个接口由多个通道组成,这些形成了PS内部的互联以及与PL的连接

  • 互联:实际上是一个开关,管理并直接传递所连接的AXI接口间的通信,在PS内有几个互联,其中有一些直接连接到PL,而另一些只用于内部连接,互联之间的连接也是用AXI接口所构成的

  • 接口:用于在系统中的主机和从机之间传递数据、地址和握手信号的点对点连接
    连接PS和PL的AXI互联和接口
    PL和PS之间接口的具体描述

  • 通用AXI:一条32位数据总线,共有四个通用接口:两个PS做主机,两个PL做主机

  • 加速器一致性端口:在PL和APU内的SCU之间的单个异步连接,总线宽度为64位,端口用于实现APU cache和PL的单元之间的一致性

  • 高性能端口:四个高性能AXI接口,带有FIFO缓冲来提供批量读写操作,数据宽度是32位或64位

EMIO接口

EMIO不支持所有的MIO接口,支持的那些能力也受到了限制,被分为两个32位的组

  • 直接连接到所需的PL的外部引脚上,这个连接是由一个约束文件中的条目指定的,在这种模式下,EMIO可以实现额外的64个输入线和64个带有输出使能的输出线
  • 连接PS和PL里的外设模块

ZYNQ-7000系列成员

ZYNQ-7000

推荐阅读