ZYNQ架构介绍
在上一篇博客中,主要介绍了ZYNQ的基本信息以及如何在vivado上实现自己的设计,但是在实际应用中,掌握ZYNQ的架构是必要的,因此在这篇博客中主要记录一下ZYNQ的架构
本篇博客的主要参考是ZYNQ book,有兴趣的可以去阅读一下,里面对于ZYNQ的介绍我认为讲的还不错,适合入门使用
处理器系统
- 硬处理器:一颗双核ARM Cortex-A9处理器
- 软处理器:Xilinx的MicroBlaze,由可编程逻辑部分的单元组合而成
- 软处理器的优势是处理器实例的数量和精确实现是灵活的,而硬处理器可以获得相对较高的性能,可以在ZYNQ的PL部分分配上一个或多个MicroBlaze软处理器,用于和ARM处理器协同工作
下面着重来介绍一下PS部分,提到PS部分,下面这张图需要掌握:
上图就是PS部分的架构框图,高亮的部分是APU
应用处理器单元(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包括标准通信接口和通用输入输出,如下图所示:
可编程逻辑
ZYNQ的PL部分是基于Artix-7和Kintex-7的FPGA
- 可配置逻辑块(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的电压,适合做各种IO标准的连接
- 两类接口都支持单端和差分信号,单端需要一个IOB连接,差分需要两个
- 每个IOB还包含一个IOSERDES资源,可以做并行和串行数据的可编程转换,数据可以是2位到8位的
其他可编程逻辑扩展接口
- 模数转换:XADC块,具有两个独立的12位ADC,每个可以以1Msps对外部模拟信号采样,对XADC的控制是用位于PS内部的PS-XADC接口控制块实现的,可以由在APU上执行的软件来编程
- 时钟:PL接收来自PS的四个独立的时钟输入
- 编程和调试:在PL部分实现了一组JTAG端口来实现对PL的配置和调试
处理器系统与可编程逻辑的接口
AXI标准
AXI表示的是高级可扩展接口(Advanced Extensible Interface),当前的版本是AXI4,是ARM AMBA3.0开放标准的一部分
- AXI4
- AXI4-Lite:只支持每次连接传输一个数据
- AXI4-Stream:用于高速流数据,支持批量传输无限大小的数据,没有地址机制
存储映射:如果一个协议是存储映射的,则在主机所发出的会话就会标明一个地址,对于每次会话单个数据传输的AXI4-Lite而言,数据就是写入那个指定的地址或者从那个地址读出;而对于AXI4批量的情况下,地址表明的是要传输的第一个数据字的地址,而从机端必须计算随后的数据字的地址
AXI互联和接口
在PS和PL之间的主要连接是通过一组9个AXI接口,每个接口由多个通道组成,这些形成了PS内部的互联以及与PL的连接
- 互联(Interconnect):实际上是一个开关,管理并直接传递所连接的AXI接口间的通信,在PS内有几个互联,其中有一些直接连接到PL,而另一些只用于内部连接,互联之间的连接也是用AXI接口所构成的
- 接口(Interface):用于在系统中的主机和从机之间传递数据、地址和握手信号的点对点连接
- 在处理器系统内部,AXI接口用来连接处理器核和SCU、cache存储器和OCM,以及连接PS内的各种互联,这些连接是对PS-PL边界上的连接的补充,上图中所示的三个互联(存储器、主机和从机互联)是内部连接到中央互联的
- 通用AXI:一条32位数据总线,共有四个通用接口:两个PS做主机,两个PL做主机
- 加速器一致性端口:在PL和APU内的SCU之间的单个异步连接,总线宽度为64位,端口用于实现APU cache和PL的单元之间的一致性
- 高性能端口:四个高性能AXI接口,带有FIFO缓冲来提供批量读写操作,并支持PL和PS中的存储器单元的高速率通信,数据宽度是32位或64位,在所有四个接口中PL都是做主机的
EMIO接口
EMIO不支持所有的MIO接口,支持的那些能力也受到了限制,被分为两个32位的组
- 直接连接到所需的PL的外部引脚上,这个连接是由一个约束文件中的条目指定的,在这种模式下,EMIO可以实现额外的64个输入线和64个带有输出使能的输出线
- 连接PS和PL里的外设模块
ZYNQ-7000系列成员