2. Zynq SoC架构总览
Zynq-7000系列的本质,是把一颗完整的ARM处理器系统(Processing System,PS)和一片FPGA可编程逻辑(Programmable Logic,PL)集成在同一硅片上,并用高带宽片内互连把两者紧密耦合。理解Zynq,第一步不是记住某个模块的名字,而是建立"PS是主控、PL是加速与扩展、接口是桥梁"的整体图景。本节围绕PS与PL的划分、PS内部主要模块、PL资源构成,以及PS-PL接口类型与带宽特征展开。
PS与PL的职责划分
PS是"硬核",其电路在芯片制造时已经固化,包含应用处理单元(APU)、实时处理单元(RPU)、图形处理单元(GPU)、DDR控制器、片上存储器、外设控制器以及中央互连。PS上电后可独立运行操作系统(如Linux、FreeRTOS),不依赖PL即可工作。PL是"软核"区域,由可配置逻辑块、块存储器、DSP切片等构成,功能由用户通过比特流定义,适合实现并行算法、自定义外设、高速接口协议等。
划分的实践含义是:顺序控制、协议栈、文件系统、网络服务等放在PS;需要确定性时序、大规模并行、低延迟响应的任务放在PL。两者通过AXI接口交换数据与控制信号,形成"PS管流程、PL管吞吐"的典型分工。
PS内部模块构成
APU是PS的计算核心,Zynq-7000通常集成双核ARM Cortex-A9,每核带NEON媒体处理引擎和浮点单元,共享512KB二级缓存,各自拥有32KB指令与数据一级缓存。APU负责运行主操作系统和应用软件。
RPU是双核ARM Cortex-R5,主打实时性与功能安全,常用于电机控制、工业实时环路等对抖动敏感的场景。GPU为ARM Mali-400 MP2,支持2D/3D图形加速,适合人机界面渲染。DDR控制器支持DDR2/DDR3/DDR3L,提供PS与PL共享的外部大容量存储访问通道。
外设方面,PS集成了千兆以太网、USB、SD/SDIO、UART、SPI、I2C、CAN、GPIO等控制器,以及片上存储器(OCM,约256KB)。这些外设通过中央互连与APU、DDR、PL连接。中央互连是PS内部的"交通枢纽",负责在多个主设备(APU、RPU、DMA、PL主口)与从设备(DDR、OCM、外设)之间仲裁和路由。
PL资源构成
PL的基本资源包括:查找表(LUT),用于实现组合逻辑;触发器(FF),用于时序存储;块存储器(BRAM,36Kb一块),用于片上数据缓存与FIFO;DSP切片,用于乘法累加等算术运算;以及部分器件提供的超大规模存储器URAM(288Kb一块,Zynq UltraScale+中常见)。
资源估算决定实现可行性。例如一个32位加法器约消耗32个LUT;一个18×18乘法器可用1个DSP切片实现;一个深度1024、位宽32的FIFO约需1块BRAM。设计前应先用综合工具的资源报告核对LUT、FF、BRAM、DSP占用是否在器件容量内,避免布局布线阶段才发现资源不足。
PS-PL接口类型与带宽特征
PS与PL之间通过AXI接口连接,主要分为三类。第一类是通用接口GP(General Purpose),包括M_AXI_GP和S_AXI_GP,位宽32位,主要用于寄存器配置、低速控制与状态读取,单口带宽约600MB/s量级,适合传输命令而非大块数据。
第二类是高性能接口HP(High Performance),即S_AXI_HP,PL作为主设备直接访问DDR与OCM。Zynq-7000通常提供4个HP口,每个口位宽64位,独立读写通道,单口理论带宽约1.2GB/s量级,是PL搬运大块数据(如图像帧、采样缓冲)的主力通道。
第三类是加速器一致接口ACP(Accelerator Coherency Port),PL通过它访问APU的缓存,保持与CPU缓存的一致性,延迟低,适合PL与CPU频繁共享小数据结构的场景,但带宽通常低于HP口。
带宽估算示例:假设PL通过一个HP口以100MHz时钟、64位位宽连续传输,理论带宽为100M×8B=800MB/s;若实际有效传输占空比为70%,则有效带宽约560MB/s。若一帧图像为1920×1080×2B≈4.15MB,则单帧传输时间约4.15MB÷560MB/s≈7.4ms,对应约135帧/秒的上限。这个估算帮助判断接口是否满足实时性要求。
资源与接口的协同设计
实际设计中,PS与PL的划分不是一次确定的,而是随资源占用和带宽需求迭代调整。例如一个视频处理系统,PS运行Linux负责网络与文件系统,PL实现缩放与滤波。缩放模块消耗若干DSP与BRAM,通过HP口读取DDR中的帧缓冲,处理后再经HP口写回。若发现HP口带宽不足,可增加第二个HP口分担读写,或降低分辨率与帧率。若LUT或BRAM超限,则需简化算法或复用存储。
因此,掌握PS内部模块、PL资源类型与PS-PL接口带宽,是后续进行软硬件划分、资源估算和性能调优的基础。只有把"谁负责什么、数据走哪条路、带宽够不够"这三件事同时想清楚,Zynq的设计才不会在集成阶段反复返工。