首先 – 你为什么要使用FPGA?除非你有充分的理由,否则请避免它!
好的理由可以是:
>成本
>力量
>大小
>必须重复使用的预先存在的硬件
>个人兴趣
>这是指定FPGA的任务
不好的理由包括“图像处理……这必然意味着我需要一个FPGA!”
想想FPGA
如果你想在FPGA上实现,你需要从一开始就考虑“FPGA”.与传统处理器相比,它们具有非常特殊的特性,这意味着许多“常规”算法很难在FPGA上高效实现.传统处理难以实现的其他算法实际上可以在FPGA上完成.
一个经典(非图像)示例是CRC计算,它通常使用软件中的查找表来实现,但可以是FPGA中的普通移位寄存器和XOR门.
关于代码生成器….
以前有Xilinx购买的产品(AccelDSP)可以采用(非常精心制作)Matlab代码并生成VHDL.它做得不好而且被撤回了.
Matlab有HDL-coder,它声称做同样的工作,也做Simulink图.很久以前我对它进行了评估 – 我不知道它现在有多好(虽然它的价格非常昂贵!).查看网页ti似乎仍然只支持Matlab函数(不是用户定义的对象),这使得它对于存储状态(IMHO)的任何东西都不起作用,因为所有状态必须存储在函数外部,这意味着你有拥有所有regs的“in”和“out”结构.与AccelDSP相同的问题.
Xilinx System Generator和Altera的System Builder都使用Simulink作为生成FPGA代码的前端.它们可以非常成功,请注意,您不能只丢弃任意复杂的Simulink模块,并希望生成可合成的FPGA.
同样,你必须从一开始就考虑FPGA.
FPGA功能
无论在哪里使用比较词,我都在与“传统桌面处理器”进行比较
> FPGA的内存很差,但它们有很多小块,这意味着如果你有足够的小工作,它们的总内部带宽可能会很大.内存也是非常低的延迟(单个时钟周期),非常像处理器的L1缓存
>就FPGA面积而言,选择(如果像功能一样)可能非常昂贵
>乘法是一种有限的资源,因此当处理器没有MUL指令时,有时可以使用“旧时代”的算法
>位宽可以是任意的 – 不需要使用32位元素来表示计算的18位结果.很多时候,这些工具可以为您解决这个问题.
开发周期也不同.
>模拟编译和运行相对较快.确保你做了很多这样的事情>实际上,合成和布局布线(使您可以编程到FPGA芯片中的“比特流”的操作)可以非常长时间运行.我目前的编译(相对较小)只花了30分钟.你想尽可能避免这样做!