HLS (High-Level Synthesis)对比PS运行速度

取决于你的算法复杂度、并行度以及数据搬运的效率。

对于简单的"向量加法",FPGA 甚至可能比 PS(ARM CPU)更慢 ;但对于"卷积、滤波、复杂数学运算",FPGA 会快出 10 倍到 100 倍

我们可以从以下三个维度来拆解这个"快"字:


1. 理论算力的对比:并行 vs 顺序

  • PS (Cortex-A9) :是串行执行的。即使有 NEON 协处理器,它一次也只能处理少量数据(SIMD)。如果你算 1024 个加法,CPU 需要跑一个循环,每个循环耗费几个时钟周期。
  • PL (FPGA) :是并行 执行的。在 HLS 中,如果你使用 #pragma HLS UNROLL,你可以同时调用 10 个甚至 100 个乘法器(DSP)在同一个时钟周期完成计算。

2. 实际案例对比(以图像卷积/滤波为例)

假设你正在处理一张 的图片进行高斯滤波:

平台 执行方式 耗时估计
PS (ARM A9) 嵌套循环,逐像素计算 ~100ms - 200ms
PL (HLS 优化) 行缓冲 (Line Buffer) + 流水线并行 ~2ms - 10ms
提升倍数 - 10x - 50x

为什么快这么多?

因为 FPGA 不需要像 CPU 那样不停地"取指令、译码、执行"。硬件电路一旦跑起来,数据就像水流一样流过计算单元,每个时钟周期都能吐出一个处理好的像素点。


3. 决定"快慢"的三个关键因素

在 Zynq-7020 上,如果你发现 FPGA 没比 PS 快,通常是因为以下原因:

A. 数据搬运开销(最大的坑)

正如你在代码中看到的,你需要 Xil_DCacheFlushRange(刷新缓存)。

  • CPU 算:数据就在 Cache 里,直接算。
  • FPGA 算:CPU 写数据 -> 刷新 Cache -> FPGA 从 DDR 读数据 -> 计算 -> FPGA 写回 DDR -> 丢弃 Cache -> CPU 读结果。

结论:如果算法太简单(比如仅仅是加法),搬运数据的时间会远远超过节省的计算时间。

B. 算法的复杂度
  • 简单运算:PS 占优。
  • 复杂运算(求平方根、三角函数、多层卷积):PL 占优。FPGA 可以通过消耗资源换取极低的指令周期。
C. 流水线 (Pipeline) 的深度

在 HLS 中,如果没有写好 PIPELINE 约束,FPGA 可能也是顺序执行的,主频又只有 100MHz-200MHz(远低于 A9 的 667MHz),这时候 FPGA 反而会输。


4. 什么时候该用 PL 运行?

满足以下条件之一,就应该把算法从 FreeRTOS 迁移到 PL:

  1. 实时性要求极高:比如电机控制,必须在几个微秒内做出反应,CPU 可能会被中断打断,但 FPGA 不会。
  2. 重复性计算量大:如视频流处理、FFT 变换、神经网络推理。
  3. 多通道同步:你需要同时处理 4 路传感器的原始数据。

总结建议

如果你只是做 C = A + B,在 PS 端做就好。如果你要做 1024 点的 FFT 或者 3x3 的图像卷积 ,PL 端通过 HLS 优化后,性能通常会有 20 倍以上 的质跃。

相关推荐
博览鸿蒙8 小时前
IC 和 FPGA,到底区别在哪?
fpga开发
思尔芯S2C8 小时前
FPGA原型验证实战:如何应对外设连接问题
fpga开发·risc-v·soc设计·prototyping·原型验证
Flamingˢ8 小时前
FPGA实战:VGA成像原理、时序详解与Verilog控制器设计与验证
fpga开发
FPGA_小田老师8 小时前
xilinx原语:OSERDES2(并串转换器)原语详解
fpga开发·lvds·xilinx原语·oserdese·并串转换
Blossom.1188 小时前
从数字大脑到物理实体:具身智能时代的大模型微调与部署实战
人工智能·python·深度学习·fpga开发·自然语言处理·矩阵·django
Aaron15881 天前
无线信道下的通信链路设计分析
大数据·网络·人工智能·算法·fpga开发·硬件工程·射频工程
碎碎思1 天前
当 FPGA 遇上 Python:Glasgow 如何玩转数字接口(开源硬件 & 软件)
fpga开发
CV@CV1 天前
FPGA时序优化实战指南:从理论到落地(附常见问题排查)
fpga开发
博览鸿蒙1 天前
成绩公布后,FPGA方向该如何规划下一步?
fpga开发