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

相关推荐
I'm a winner9 小时前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper202011 小时前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy18 小时前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia19 小时前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper202019 小时前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子1 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
9527华安2 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi
千寻xun2 天前
二、实战篇-NVME SSD控制之ZYNQ实现(六)-读写NVME SSD硬盘数据
fpga开发·nvme·nvme ssd
千寻xun2 天前
二、实战篇-NVME SSD控制之ZYNQ实现(三)
fpga开发·nvme ssd·nvme协议
忆锦紫3 天前
vivado报错及解决【十】
fpga开发·fpga·vivado