【问题标题】:Is conversion from OpenCV code to FPGA code is easier than Matlab code or not? [closed]从 OpenCV 代码到 FPGA 代码的转换是否比 Matlab 代码更容易? [关闭]
【发布时间】:2020-02-07 23:57:43
【问题描述】:

我想做图像处理项目。我想知道我是否想在 FPGA 上实现这个项目,我应该在第一阶段 Matlab 或 OPEN CV 选择哪个工具?是否可以将代码从 Open CV 直接转换为 FPGA,就像代码生成器可以直接从 Matlab 使用到 FPGA 一样??

【问题讨论】:

  • 不确定,但不太可能。
  • 这取决于您更喜欢哪一个。我会选择 Matlab,因为它更稳定、更成熟且更易于调试。
  • 现在实现它的最佳方法是使用 Raspberry pi 耶!您可以直接访问传感器或执行器。

标签: matlab opencv image-processing fpga


【解决方案1】:

首先 - 为什么要使用 FPGA?除非你有充分的理由,否则不要这样做!

好的理由可以是:

  • 费用
  • 权力
  • 尺寸
  • 必须重复使用的现有硬件
  • 个人兴趣
  • 这是一项要求使用 FPGA 的任务

不好的原因包括“图像处理......这一定意味着我需要一个 FPGA!”


想想 FPGA

如果您想在 FPGA 上实现,您需要从一开始就考虑“FPGA”。与传统处理器相比,它们具有非常特殊的特性,这意味着许多“传统”算法很难在 FPGA 上高效实现。而其他传统处理难以解决的算法实际上可以在 FPGA 上非常简单地完成。

一个经典(非图像)示例是 CRC 计算,它通常使用软件中的查找表来实现,但也可以是 FPGA 中的一个普通移位寄存器和 XOR 门。

关于代码生成器......

Xilinx 曾经购买过一款产品 (AccelDSP),它可以采用(非常精心制作的)Matlab 代码并生成 VHDL。效果不太好,被撤了。

Matlab 有HDL-coder,它声称可以做同样的工作,也可以做 Simulink 图。我很久以前就评估过它——我不知道它现在有多好(尽管它贵得令人瞠目结舌!)。查看网页 ti 似乎仍然只支持 Matlab 函数(不是用户定义的对象),这使得它对于任何在其中存储状态的东西(恕我直言)都无法启动,因为所有状态都必须存储在函数之外,这意味着你有有一个“输入”和“输出”struct 与您的所有注册。与 AccelDSP 遇到的问题相同。

Xilinx System Generator 和 Altera 的 System Builder 都使用 Simulink 作为生成 FPGA 代码的前端。它们可能非常成功,请注意,您不能只是扔掉任意复杂的 Simulink 模块并希望生成可合成的 FPGA。

同样,您必须从一开始就考虑 FPGA。

FPGA 特性

无论在哪里使用比较词,我都是在与“传统桌面处理器”进行比较

  • FPGA 的内存很差,但它们有很多小块,这意味着如果您有足够的小工作要做,它们的内部总带宽可能会很大。内存的延迟也非常低(单时钟周期),很像处理器的 L1 缓存
  • 选择(if..else 类似功能)在 FPGA 面积方面可能非常昂贵
  • 乘法是一种有限的资源,因此有时在处理器没有 MUL 指令的“过去”中使用算法是值得的
  • 位宽可以是任意的 - 无需使用 32 位元素来表示 18 位的计算结果。很多时候,这些工具可以为您解决这个问题。

开发周期也不同。

  • 模拟的编译和运行速度相对较快。确保您经常这样做
  • 实际上,综合和布局布线(使您获得“比特流”的操作,您可以将其编程到 FPGA 芯片本身中)可能需要很长时间。我当前的编译(相对较小)只花了 30 分钟。您要尽可能避免这样做!

【讨论】:

【解决方案2】:

Xilinx 有一个名为Vivado HLS 的工具。

还有一个应用笔记 (XAPP1167) 描述了使用该工具在 Zynq 平台上定位 OpenCV。

我没有这方面的经验,但在最近的一次 OpenCV 会议上了解到它。这是appnote的开头-

本应用笔记描述了如何使用 OpenCV 库来开发计算机 Zynq 设备上的视觉应用。 OpenCV 可以在许多不同的点上使用 设计过程,从算法原型设计到系统内执行。 OpenCV 代码也可以 使用随 Vivado HLS 提供的视频库迁移到可合成的 C++ 代码。 当集成到 Zynq 设计中时,合成模块可实现高分辨率和帧 评价要实现的计算机视觉算法。

Altera supports OpenCL 是并行化 ANSI C 的广泛规范。有一个可用于 OpenCL 的OpenCV module。同样,我没有这方面的经验(还;))。

This link 有助于了解 OpenCL 在主机和硬件加速器(如 FPGA 开发板)环境中的使用。

因此,如果您想采用 Altera 路线,则必须使用上述 OpenCV 模块将 OpenCV 函数封装在 OpenCL 中,然后使用 Altera 的 SDK 来定位 fpga。走这条路的好处是,如果您发现 FPGA 不适合您的应用程序,那么您可以将 OpenCL+OpenCV 定位到其他平台。

【讨论】:

  • 我忘了提一下,Altera 和 Xilinx 都有可以让您从 Matlab 转到 HDL 的工具。如果是 Altera,您可以通过一些开发板免费获得这些。
【解决方案3】:

Matlab 提供对 HDL 的支持。它提供了包,您可以在其中直接将 matlab 代码转换为 HDL 代码。您也可以使用它来编程 FPGA。

HDL Coder

另一方面,由于库的原因,将 Opencv 转换为 HDL 语言并不容易。您可以轻松地将 C++ 等面向对象的编程 (OOP) 语言转换为 Verilog / VHDL,但由于“OpenCV 库”,它会产生一些问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 2014-05-21
    • 2021-02-15
    相关资源
    最近更新 更多