繁体   English   中英

fpga:选择 c++ 来编程 fpga

[英]fpga: choosing c++ to program fpga

我经常从电气工程师那里听到 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 合成器。

迄今为止,有许多“行为合成器”:

  • Mentor Graphics 的 CatapultC 允许您使用 C 和 C++ 的一大子集
  • Forte Design System 的 Cynthesizer(基于 systemC)[编辑 2015 :现在 Cadence]
  • 对于 FPGA,ImpulseC 似乎相当成熟
  • [编辑 2015 ] 适用于 Xilinx FPGA:Vivado-HLS

希望这有帮助

他们可能在谈论像 Handel-C 这样的编程语言,它是某种 C 方言,针对硬件编程。 Handel-C 可以直接或间接编译为 HDL,进而创建 FPGA 配置(即 FPGA 上的“程序”)。

尽管 VHDL 和 Verilog 更难学习,但我建议您立即开始。 当你在做与 FPGA 相关的事情时,你通常对效率感兴趣。 Handel-C 编写的代码很可能比您手动编写的代码(在 VHDL 或 Verilog 中)效率低。

编辑:没有我曾经负责过的 Handel-C 或相关编译器的 C++ 变体。

我能想到的两个:C++ 编写编译器(在这种情况下是 HDL 翻译器)要复杂得多,并且有太多的功能在像 fpga 编程这样的低级编程中是没有用的.

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

  1. 您可以使用在 FPGA 上运行的软处理器并从那里使用 C 代码(Altera 的 NIOS、Xilinx 的 Microblaze 等)。
  2. SOC FPGA 使用 OpenCL 与来自 ARM 处理器的 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 有 Nios II,它可以运行 linux内核 (uCLinux),它将允许一些预加载的 C 程序在该软核上运行,该软核又与 FPGA 进行通信。 因此,FPGA 在硬件方面仍将使用 VHDL/Verilog 进行编程,然后在软核中的操作系统上运行的小型应用程序可以访问它保存的任何数据。 我敢肯定,只要 uCLinux/任何正在运行的内核支持该语言,就可以使用 C++。

〜狡猾的

您通常会使用 C++ 和 C 获得更大的标准库,而 C 更接近于硬件的运行方式,即对电气工程师来说更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM