1. Zynq概述:从架构到协同设计

大家好,我是你们的FPGA讲师。今天咱们聊聊Zynq-7000系列。

说实话,我第一次接触Zynq的时候,心里也犯嘀咕:这到底是个啥?是FPGA?还是ARM处理器?后来用了一段时间才明白——它俩都有,而且配合得还挺默契。

1.1 Zynq-7000系列架构概览

Zynq-7000系列,说白了就是一颗芯片里同时集成了ARM处理器和FPGA逻辑。ARM那部分叫PS(Processing System),FPGA那部分叫PL(Programmable Logic)。

我习惯把PS比作大脑,负责跑操作系统、处理复杂算法;PL比作肌肉,负责高速数据搬运、实时信号处理。两者通过内部高速总线通信,延迟极低。

核心架构特点:

  • PS部分:双核ARM Cortex-A9处理器,主频最高1GHz,带NEON SIMD引擎
  • PL部分:基于Xilinx 7系列FPGA架构,支持动态部分重配置
  • 互联总线:AXI4协议,支持32/64位数据宽度,时钟频率可达200MHz
  • 存储系统:DDR3/DDR4控制器、OCM(片上存储器)、L2缓存

嗯,这里要注意:PS和PL不是独立的两个芯片,它们共享同一个DDR控制器。我在项目中遇到过,如果PS和PL同时大量访问DDR,带宽会打架。解决办法是合理分配优先级,或者用OCM做缓冲。

1.2 PS与PL的划分

很多初学者会问:到底哪些功能放PS?哪些放PL?

我个人习惯这样划分:

功能类型 建议放置位置 原因
操作系统、网络协议栈 PS ARM跑Linux方便,FPGA跑这些太浪费
高速数据采集(>100MSPS) PL FPGA并行处理,ARM扛不住
复杂控制算法(PID、FOC) PS 软件实现灵活,调试方便
实时信号处理(FIR、FFT) PL 流水线结构,延迟低
低速外设(UART、I2C) PS或PL 看资源占用,PS自带外设够用就用PS

你想想看,如果非要把Linux跑在PL上,那得用MicroBlaze软核,性能差不说,还占大量LUT资源。反过来,如果非要用ARM做1GSPS的ADC数据采集,那CPU占用率直接飙到100%,啥也干不了。

避坑指南:我曾经在一个项目中,把视频缩放算法放在了PS里跑。结果发现1080p@60fps的视频,ARM根本处理不过来。后来改成PL里用行缓冲+双线性插值,延迟从50ms降到了2ms。所以,凡是涉及大量数据流、实时性要求高的,优先考虑PL。

1.3 软硬件协同设计的概念

软硬件协同设计,说白了就是:软件和硬件一起设计,而不是先做硬件再写软件,或者先写软件再搭硬件。

传统做法是:硬件工程师画好板子,软件工程师再写驱动。结果发现硬件接口不对,或者性能瓶颈在硬件上,来回改,周期拉得很长。

Zynq的软硬件协同设计,强调从系统层面出发,同时考虑软硬件划分。我常用的设计流程是:

  1. 系统需求分析:明确哪些功能必须实时,哪些可以容忍延迟
  2. 软硬件划分:根据性能、功耗、成本,决定功能放PS还是PL
  3. 接口定义:确定PS与PL之间的数据交互方式(AXI-Lite、AXI-Stream、AXI-Full)
  4. 并行开发:PS团队写Linux驱动和应用程序,PL团队写RTL代码
  5. 联合调试:使用Xilinx SDK或Vitis进行软硬件协同仿真

注意:软硬件协同设计不是简单的「硬件加速」。如果PS和PL之间的通信开销大于加速收益,那还不如全用软件跑。我曾经见过一个项目,把简单的加法运算放到PL里做,结果AXI总线传输延迟比运算本身还大,得不偿失。

1.4 软硬件协同设计的优势

为什么我们要费这么大劲搞协同设计?三个字:快、省、灵。

  • 快:PL处理数据流,PS处理控制流,系统吞吐量提升5-10倍很常见
  • 省:一颗Zynq芯片替代了ARM+FPGA两颗芯片,功耗降低30%-50%
  • 灵:PL可以动态重配置,PS可以远程升级,产品迭代周期缩短

举个例子:我做过一个工业相机项目,需要同时采集4路摄像头数据,做图像拼接,然后通过以太网传输。如果全用ARM做,4路1080p@30fps的数据流,ARM根本处理不了。如果全用FPGA做,以太网协议栈又太复杂。

用Zynq的方案是:PL做4路数据的同步采集和拼接,PS跑Linux,用TCP/IP协议栈把拼接后的图像发出去。整个系统功耗不到5W,比传统ARM+FPGA方案省了一半。

1.5 知识体系结构图

下面这张图,是我自己总结的Zynq软硬件协同设计知识体系。你把它打印出来贴在工位上,每次做设计前看一眼,思路会清晰很多。

Zynq软硬件协同设计知识体系 Zynq-7000 SoC PS (Processing System) PL (Programmable Logic) ARM Cortex-A9 DDR控制器 逻辑单元(CLB) DSP48E1 AXI4互联总线 (AXI-Lite / AXI-Stream / AXI-Full) 软硬件协同设计方法:划分 → 接口定义 → 并行开发 → 联合调试 高性能(快) 低功耗(省) 灵活迭代(灵)

这张图把Zynq的架构、PS/PL划分、互联总线、设计方法和优势串起来了。你每次做项目前,对照这张图问自己三个问题:

  • 这个功能放PS还是PL?
  • PS和PL之间用什么总线通信?
  • 这样划分能带来什么优势?

想清楚这三个问题,你的Zynq设计就成功了一半。

个人经验:我刚开始用Zynq时,总想把所有功能都塞进PL,觉得硬件加速就是牛。后来发现,很多控制逻辑用软件写更灵活,调试也方便。现在我的原则是:能软则软,非硬不硬。PS能搞定的,绝不浪费PL资源。

好了,这一章就到这里。记住:Zynq不是ARM+FPGA的简单叠加,而是1+1>2的协同设计。下一章我们会深入PS部分,看看ARM Cortex-A9到底能干什么。

可可精品资料库