一、Zynq初探:Zynq是什么?

说实话,我第一次接触Zynq的时候,也被它搞懵了。

它既不是纯粹的FPGA,也不是传统的ARM处理器。它把两者硬生生捏在了一起——ARM Cortex-A9处理器加上Xilinx的可编程逻辑(也就是FPGA部分)。说白了,Zynq就是一个“双核ARM + FPGA”的异构计算平台。

我习惯这么理解:Zynq = 软件(ARM) + 硬件(FPGA)的混合体。ARM负责跑Linux、处理控制逻辑,FPGA负责高速数据流、自定义接口、硬件加速。两者通过内部高速总线通信,延迟极低。

核心概念:Zynq不是“FPGA带了个ARM”,而是“ARM为主,FPGA为辅”的架构。ARM是老大,FPGA是加速器。

Zynq的发展历程

Zynq最早是2011年左右推出的。我记得当时Xilinx(现在叫AMD了)刚发布这个系列,圈内很多人都在观望——这东西到底能干啥?

后来Zynq-7000系列站稳了脚跟。它用的是28nm工艺,ARM Cortex-A9双核,主频最高1GHz。说实话,现在看这个性能不算强,但在嵌入式领域,它解决了大问题:以前需要ARM+FPGA两块芯片,现在一块搞定。

再后来,Xilinx推出了Zynq UltraScale+系列,升级到16nm工艺,ARM换成了Cortex-A53四核,还加了GPU和视频编解码单元。嗯,这个系列现在还在大量出货。

到了2020年以后,Xilinx又推出了Versal系列,加入了AI引擎。不过那是另一个故事了,咱们这门课主要讲Zynq-7000,因为它最经典、资料最多、也最适合入门。

系列 工艺 ARM核心 推出时间
Zynq-7000 28nm Cortex-A9双核 2011年
Zynq UltraScale+ 16nm Cortex-A53四核 2015年
Versal 7nm Cortex-A72双核 2020年

Zynq的应用领域

你想想看,什么场景需要ARM的灵活性,又需要FPGA的高速处理?

  • 工业控制:PLC、运动控制、机器视觉。我在一个自动化项目中用过Zynq做实时以太网通信,ARM跑协议栈,FPGA做数据帧的硬件解析,延迟从毫秒级降到了微秒级。
  • 汽车电子:ADAS(高级驾驶辅助系统)、车载信息娱乐。Zynq可以同时处理摄像头数据(FPGA)和运行算法(ARM)。
  • 通信基站:软件无线电、基带处理。FPGA做数字下变频,ARM做协议栈。
  • 医疗设备:超声成像、CT信号处理。FPGA做波束合成,ARM做图像后处理。
  • 航空航天:雷达、电子战。嗯,这个领域我不方便多说,但Zynq的可靠性是经过验证的。

我的建议:如果你是初学者,先别想太多应用场景。把Zynq当成“能跑Linux的FPGA”来学,后面自然知道怎么用。

Zynq-7000系列芯片架构概览(PS与PL)

Zynq-7000的架构,说白了就两大块:PS(Processing System,处理系统)和PL(Programmable Logic,可编程逻辑)。

PS就是ARM那部分,包括:

  • 双核Cortex-A9处理器
  • 内存控制器(DDR2/3、LPDDR2)
  • 外设接口(UART、SPI、I2C、USB、以太网、SD卡等)
  • 中断控制器、DMA控制器
  • Cache和片上存储器

PL就是FPGA那部分,包括:

  • 可配置逻辑块(CLB)
  • DSP48E1乘法器单元
  • Block RAM(BRAM)
  • 高速收发器(GTP,部分型号有)
  • IO资源(SelectIO)

PS和PL之间通过AXI总线连接。AXI是ARM公司搞的一种高性能总线协议,Zynq内部有多个AXI接口,带宽很高。我习惯把AXI接口分成三类:

  • AXI_HP:高性能接口,用于大数据量传输,比如从PL往DDR写数据。
  • AXI_GP:通用接口,用于控制寄存器、小数据量通信。
  • AXI_ACP:加速一致性接口,可以让PL直接访问ARM的Cache,延迟极低。

避坑指南:我曾经在一个项目中,用AXI_GP接口传视频数据,结果带宽不够,画面卡成PPT。后来换成AXI_HP接口,问题解决。记住:GP接口带宽有限,别拿它传大数据。

下面这张图是我画的Zynq-7000架构简图,帮你理清PS和PL的关系:

PS(处理系统) Cortex-A9 双核 1GHz DDR控制器 DDR2/3/LPDDR2 外设接口 UART / SPI / I2C / USB / 以太网 / SD 中断控制器 / DMA / 定时器 片上存储器(OCM)256KB AXI总线 PL(可编程逻辑) CLB 可配置逻辑块 DSP48E1 乘法器/累加器 Block RAM 36Kb每块 SelectIO 可配置IO GTP高速收发器(部分型号) AXI_HP AXI_GP AXI_ACP PS PL AXI总线

从这张图你能看出来,PS和PL是两个独立的域。PS上电后先启动,然后通过AXI总线配置PL。PL可以独立工作,但通常需要PS来加载比特流(bitstream)。

我刚开始学Zynq的时候,犯过一个低级错误:以为PL和PS共用同一个电源域。结果PL那边电压没配好,烧了一个引脚。嗯,这里提醒你:PS和PL的电源是分开的,设计时要分别考虑。

好了,这一章就到这里。Zynq的基本概念、发展历程、应用领域和架构概览,你应该有个大概印象了。下一章我们会深入PS部分,看看ARM怎么跑起来。


可可精品资料库