我想做一个关于图像处理的项目。我想知道如果我想在FPGA上实现这个项目,我应该在第一阶段选择Matlab还是OPEN CV哪个工具?是否可以将代码从 Open CV 直接转换为 FPGA,就像代码生成器可以直接从 Matlab 转换为 FPGA 一样?
首先 - 为什么要使用 FPGA?除非你有充分的理由,否则请避免它!
好的理由可能是这样的:
- cost
- power
- size
- 必须重复使用的现有硬件
- 个人爱好
- 这是一项需要 FPGA 的作业
糟糕的原因包括“图像处理……这一定意味着我需要 FPGA!”
思考FPGA
如果您想在 FPGA 上实现,您需要从一开始就考虑“FPGA”。与传统处理器相比,它们具有非常特殊的特性,这意味着许多“传统”算法很难在 FPGA 上有效实现。传统处理难以处理的其他算法实际上可以在 FPGA 上轻松完成。
一个经典(非图像)示例是 CRC 计算,它通常使用软件中的查找表来实现,但也可以是 FPGA 中的简单移位寄存器和异或门。
关于代码生成器......
Xilinx 曾经购买过一款产品(AccelDSP),它可以采用(非常精心制作的)Matlab 代码并生成 VHDL。效果并不好,被撤回了。
Matlab有HDL编码器 http://www.mathworks.com/products/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 分钟。您要尽可能避免这样做!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)