我主要从电气工程师那里听到 C 用于 fpga 工作。
C++呢?使用 C++ 有什么缺点吗?我认为 C++ 比 C 更好地服务于硬件编程时所需的并行性,不是吗?
另外,在那之后我还可以使用什么来使 C++ 与硬件兼容?
我很确定 FPGA 是用 VHDL 或 Verilog 编程的。
http://en.wikipedia.org/wiki/Vhdl
http://en.wikipedia.org/wiki/Verilog
我知道 Altera 还提供一些 C 到 HDL 的转换器。我怀疑它们是否可用于除微小设计之外的任何东西。
到目前为止,对 FPGA 进行编程最简单的方法是通过 LabView 的 FPGA 模块。但是,这也将您与他们的硬件和软件联系在一起。这不是一个便宜的解决方案,但肯定是让您的程序在硬件中的最快方法,而无需学习任何东西,除了 LabVIEW。
您可以使用 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 进行编程。
为 CPU 编译和为 FPGA 编译之间有很大的不同。“普通”编译器生成二进制程序代码。特殊的 FPGA 编译器生成“硬件”。有一些编译器可以将一些类似 C 的代码变成“硬件”。但它不完全是 C。它可能是扩展为具有任意位长度的整数类型的 C 导数,并且可能仅限于迭代和非递归函数调用。
我是 C++ 的忠实粉丝,但即使我也看到它的许多部分不适合 FPGA:虚函数、RTTI、异常。至少这是我的印象。我自己并没有测试那些类 C 的 FPGA 编译器,但我的一个朋友和他们一起工作,据说它是一个 PITA。
他们可能正在使用 C与 FPGA接口。在设计课程中,我们使用 Verilog 对附带的 Linux 板中的 FPGA 和 C 进行编程。在这种情况下,他们可能会使用 C,因为在 C 中编写小程序比在 C++ 中更容易。
您可能在谈论SystemC,它是一组 C++ 类和宏,主要用于(事务级)建模,而不是用于综合。然后可以将高级模型用作验证寄存器传输级别 (RTL) 描述的黄金参考,该描述通常以 VHDL 或 Verilog 编码。
作为你们中的一些人,我是 C++ 的粉丝。我认为使用 SystemC 与 fpga 一起工作会很棒。因此,我找到了下一页。也许你们中的一些人会感兴趣。
http://www.es.ele.tue.nl/~ljozwiak/education/5JJ70p/blocks/4/sc2fpgaflow.html
您指的是“行为综合”,一种允许将顺序代码作为输入(C、SystemC、C++)并自动生成 VHDL 或 Verilog 中的 FSM+Datapath 对的编译技术,然后可以使用常规 Xilinx 进行综合或 Altera 合成器。
迄今为止,有很多“行为合成器”:
希望这可以帮助
他们可能在谈论像 Handel-C 这样的编程语言,它是某种 C 方言,针对硬件编程。Handel-C 可以直接或间接编译为 HDL,HDL 进而创建 FPGA 配置(即 FPGA 上的“程序”)。
虽然 VHDL 和 Verilog 更难学习,但我建议您立即开始。当你在做与 FPGA 相关的事情时,你通常对效率感兴趣。Handel-C 编写的代码很可能比您可以手动编写的代码(在 VHDL 或 Verilog 中)编写的代码效率低。
编辑:没有我曾经负责过的 Handel-C 或相关编译器的 C++ 变体。
我能想到的两个:C++ 编写编译器(在这种情况下为 HDL 翻译器)要复杂得多,并且具有太多功能,这些功能在 fpga 编程要求的低级编程中没有用处.
您可以使用 C/C++ 对 FPGA 进行编程。Xilinx 拥有 SDSoC,这是一个基于 Eclipse 的工具,用于使用 C/C++ 对 FPGA 进行编程。这基本上为标记为要合成的部分代码构建硬件加速器。这假设基于 ARM+FPGA 的 zynq 设备,主机代码在 ARM 上运行
基于 PC 的解决方案还有另一种流程 SDAccel。将 X86 上的主机代码和 FPGA 上的加速器连接到您的 PCIe 插槽。
FPGA 代码描述了硬件。这意味着您设计一个数字系统,然后使用代码向编译器“描述”硬件。这主要在 VHDL 或 Verilog 中完成。
现代编译器在软件和硬件平台之间提供接口,让您编写可以在 FPGA 上运行的 C 代码。它并不是将上传到 FPGA 的真正代码,而只是让编译器根据您的 C 代码为 FPGA 生成代码。对于最佳系统,将需要一名硬件工程师来更改编译器生成的代码。这是一篇关于这个问题的好文章:https ://www.eetimes.com/c-language-techniques-for-fpga-acceleration-of-embedded-software/#
有一些程序,如 Intel Monitor Program,可让您在 FPGA 上运行 C 代码,但它的作用是使用芯片上已有的微处理器创建“计算机”,让您了解代码的工作原理。它更多的是一种学习工具。
不确定这是否已经说过(我没有阅读所有回复),但您所听到的可能是软核中正在运行的软件......例如,Altera 有可以运行 linux 的 Nios II内核(uCLinux),它将允许一些预加载的 C 程序在该软核上运行,该软核又与 FPGA 通信。因此,FPGA 仍将在硬件方面使用 VHDL/Verilog 进行编程,然后它所保存的任何数据都可以被在软核中的操作系统上运行的小型应用程序访问。我确信只要 uCLinux/运行的任何内核都支持该语言,就可以使用 C++。
〜狡猾的
您通常会使用 C++ 和 C 获得更大的标准库,而 C 更接近硬件的操作方式,即对电气工程师来说更容易。