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 倍以上 的质跃。

相关推荐
北京青翼科技14 小时前
青翼科技基于XCVU13P FPGA的4路FMC接口高性能信号处理平台丨嵌入式智能平台 · 通用嵌入式平台丨FPGA信号处理板
fpga开发·信号处理·信号处理板·图形处理板卡·pcie数据处理板·fpga板卡
HIZYUAN2 天前
FPGA/CPLD漫谈:2K LUT的功能定位与典型方案(一)
stm32·单片机·嵌入式硬件·fpga开发·国产mcu+fpga
FPGA_Linuxer2 天前
FPGA开发板 KU5P开发板 图像处理,硬件加速 PCIE3.0 100G光口
fpga开发
szxinmai主板定制专家2 天前
基于ZYNQ MPSOC多通道声音振动采集方案,替代NI9234和B&K
arm开发·人工智能·嵌入式硬件·fpga开发
ZYNQRFSOC3 天前
基于安路PH2A系列FPGA的JESD204B接口测试
嵌入式硬件·fpga开发
szxinmai主板定制专家3 天前
基于RK3588超小体积,轻巧,长续航的无人机AI模块,支持视频跟踪
arm开发·人工智能·嵌入式硬件·fpga开发·无人机
unicrom_深圳市由你创科技3 天前
多 FPGA 之间如何同步与通信?
fpga开发
LCMICRO-133108477463 天前
长芯微LCMDC7616完全P2P替代AD7616,16通道16位模数转换器(ADC)
stm32·嵌入式硬件·fpga开发·硬件工程·模数转换器adc·电力线监测
又菜又爱玩的东哥4 天前
【Verilog 3-8译码器设计与仿真:深入理解case语句与组合逻辑】
fpga开发
Risehuxyc4 天前
<= 是Verilog中的非阻塞赋值操作符
fpga开发