8

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

4

3 回答 3

16

首先 - 为什么要使用 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 缓存
  • 就 FPGA 面积而言,选择(if..else如功能)可能非常昂贵
  • 乘法是一种有限的资源,因此当处理器没有 MUL 指令时,有时使用“过去”的算法是值得的
  • 位宽可以是任意的——无需使用 32 位元素来表示 18 位的计算结果。很多时候,这些工具可以为您解决这个问题。

开发周期也不同。

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

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

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

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

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

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

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

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

于 2013-07-26T17:10:51.960 回答
0

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

HDL编码器

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

于 2016-01-24T18:53:47.603 回答