FPGA: 选择C++编程FPGA

6

我经常听到电气工程师说C语言被用于fpga工作。

那么C++呢?使用C++有什么缺点吗?我认为编写硬件程序所需的并行性更适合使用C++而不是C,对吗?

此外,我需要使用什么来使c++与硬件兼容?


4
你是在询问使用C语言编写FPGA固件程序还是用C应用程序访问正在运行的FPGA?如果是后者,我不知道为什么不能使用C++。你也可以看一下SystemC。虽然它并不是专门用于编写FPGA程序的,但我认为经过精心编写的SystemC代码可能可以转换为硬件描述语言(HDL)。另一方面,如果你只使用SystemC构造编写代码,那么与其用SystemC不如直接使用VHDL或Verilog。 - Gautham Ganapathy
16个回答

18

我曾经用AHDL(http://en.wikipedia.org/wiki/Altera_Hardware_Description_Language)写过一些代码,但那是一种类似于VHDL的语言。 - Tobias Langner
1
+1. 只是为了澄清 - 为FPGA编写C语言没有任何意义。FPGA主要用于(并行)数字信号处理,而不是顺序过程式编程。您可以将C语言转换为Verilog,然后将其合成为硬件,但这就像用劈斧剪头发一样。此外,还有一些针对FPGA的软CPU实现(例如Microblaze),您可以编写C程序并在该软CPU上运行它,但同样与FPGA编程(几乎)没有任何关系。 - user405725
这里有一个免费(在线)的C语言转Verilog工具,网址是http://www.c-to-verilog.com/online.html - 大多数结果仅供参考,真正的硬件工程师通常不使用这种工具。 - shuckc

9

迄今最简单的FPGA编程方法是通过LabVIEW的FPGA模块。然而,这也将您绑定到他们的硬件和软件中。这不是一个廉价的解决方案,但无疑是在不需要学习任何东西的情况下将程序加载到硬件中的最快速度。


7
您可以使用C或C++编程FPGA,但需要一些非常昂贵的高级综合软件。CatapultC是Mentor Graphics的产品,它允许您用未定时的C ++编写算法。然后将该C ++合成为RTL VHDL或Verilog。但是,CatapultC的售价远超过100,000美元,因此肯定不适合业余爱好者。还有另一种产品叫做ImpulseC,它允许您编写C代码,然后将其合成为RTL,但我相信它只处理C而不是C ++。ImpulseC的价格约为2000美元。
对于业余爱好者来说,最好使用VHDL或Verilog来描述设计,然后使用Xilinx或Altera的免费工具来合成该代码并编程FPGA。

5

针对CPU编译和FPGA编译之间存在很大的区别。普通的编译器生成二进制程序代码,而专门的FPGA编译器则生成“硬件”。目前有一些编译器可以将类C代码转换为“硬件”,但这并不是完全的C语言。它可能是一个包含任意位数整型的C衍生版,限制于迭代和非递归函数调用。

我非常喜欢C++,但是我也认识到其中许多部分并不适合FPGA:虚函数、RTTI、异常处理等都不够合适。至少这是我的印象。我没有亲自测试过那些类C FPGA编译器,但我的朋友使用过它们,并且据说这是一件麻烦事。


“特殊FPGA编译器”包括几个工具:综合;映射;布局和路由。 - shuckc

4

他们可能正在使用C语言与FPGA进行接口交互。在设计课程中,我们使用Verilog编程FPGA,并在附加的Linux板上使用C语言。在那种情况下,他们很可能使用C语言,因为用C语言编写小程序比用C++更容易。


4
您可能在谈论SystemC,它是一组主要用于(事务级)建模而非综合的C++类和宏。高层模型可以用作黄金参考来验证寄存器传输级别(RTL)描述,通常编码为VHDL或Verilog。

然而,使用SystemC需要使用一些相当昂贵的综合工具 - 至少在数万美元以上。绝对不能使用免费的FPGA供应商工具。 - aneccodeal
1
@aneccodeal 我发现使用SystemC创建设计非常容易进行大量的仿真,然后我手动将其转换为VHDL。虽然有些繁琐,但手动转换所需的时间比最初的C++设计和仿真要少得多,而且不需要昂贵的转换综合工具。 - doug

3

2
您所指的是“行为综合”(behavioral synthesis),这是一种编译技术,可将顺序代码(C、SystemC、C ++)作为输入,并自动生成 VHDL 或 Verilog 中的 FSM+Datapath 对,然后可以使用常规 Xilinx 或 Altera 综合器进行综合。
目前,有许多“行为综合器”:
- Mentor Graphics 的 CatapultC 允许使用大量 C 和 C++ 子集 - Forte Design System 的 Cynthesizer (基于 systemC) [编辑 2015:现在是 Cadence] - 面向 FPGA,ImpulseC 看起来相当成熟 - [编辑 2015] 针对 Xilinx FPGA: Vivado-HLS
希望这可以帮到您。

1

我能想到的有两个原因:首先,C++语言在编写编译器(在这种情况下是HDL翻译器)时更为复杂,其次C++具有太多功能,在FPGA编程这种低级别的编程中并不实用。


1

就像其他人所说,大多数FPGA都是使用VHDLVerilog进行设计的。我几年前也看到过PALASM用于小型设计。该设计是一个逻辑描述,转换为设置以配置FPGA。Verilog基于C语言,因此了解C语言将有助于学习Verilog,但是FPGA本质上是并行的,因此即使语法看起来相似,也没有太多其他的翻译。


PALASM已经非常过时了(在1980年代左右使用)。 - Brian Carlton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接