【问题标题】:fpga: choosing c++ to program fpgafpga:选择c++来编程fpga
【发布时间】:2009-12-21 02:31:43
【问题描述】:

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

C++ 呢?使用 C++ 有什么缺点吗?我认为 C++ 比 C 更好地服务于硬件编程时所需的并行性,不是吗?

然后我用什么来使 c++ 与硬件兼容?

【问题讨论】:

  • 您是指使用 C 对 FPGA f/w 进行编程,还是从 C 应用程序访问正在运行的 FPGA?在后一种情况下,我不明白为什么不能使用 C++。您可能还想看看 SystemC。尽管我认为精心编写的 SystemC 代码可能会被翻译成 HDL,但它并不是真正用于编程 FPGA。另一方面,如果您只使用 SystemC 结构编写代码,您不妨使用 VHDL 或 Verilog 编写代码。

标签: c++ c fpga


【解决方案1】:

我很确定 FPGA 是用 VHDL 或 Verilog 编程的。

http://en.wikipedia.org/wiki/Vhdl

http://en.wikipedia.org/wiki/Verilog

我知道 Altera 还提供一些 C 到 HDL 转换器。我怀疑它们是否可用于除微小设计之外的任何东西。

【讨论】:

  • 我用 AHDL (en.wikipedia.org/wiki/Altera_Hardware_Description_Language) 做了一些 - 但那是一种类似于 VHDL 的语言。
  • +1。只是为了澄清 - 为 FPGA 编写 C 是没有意义的。 FPGA 都是关于(并行)数字信号处理,而不是顺序过程编程。你可以将 C 翻译成 Verilog,然后将其合成到硬件中,但这就像用斧头剪头发一样。此外,还有一些用于 FPGA 的软 CPU 实现(如 Microblaze),您可以编写 C 程序并在该软 CPU 上运行它,但同样 - 它(几乎)与 FPGA 编程无关。
  • 这里有一个免费的(在线)C to verilog 工具c-to-verilog.com/online.html - 结果大多只是为了兴趣,真正的硬件人通常不使用这种工具。
【解决方案2】:

到目前为止,对 FPGA 进行编程最简单的方法是通过 LabView 的 FPGA 模块。但是,这也将您与他们的硬件和软件联系在一起。这不是一个便宜的解决方案,但肯定是让您的程序在硬件中实现的最快方法,而无需学习 LabVIEW 之外的任何东西。

【讨论】:

    【解决方案3】:

    您可以使用 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 进行编程。

    【讨论】:

      【解决方案4】:

      为 CPU 编译和为 FPGA 编译之间有很大的不同。 “普通”编译器生成二进制程序代码。特殊的 FPGA 编译器生成“硬件”。那里有编译器可以将一些类似 C 的代码转换为“硬件”。但它不完全是 C。它可能是扩展为具有任意位长度的整数类型的 C 导数,并且可能仅限于迭代和非递归函数调用。

      我是 C++ 的忠实粉丝,但即使我也看到它的许多部分不适合 FPGA:虚函数、RTTI、异常。至少这是我的印象。我自己并没有测试那些类 C 的 FPGA 编译器,但我的一个朋友使用它们,据说它是一个 PITA。

      【讨论】:

      • “特殊 FPGA 编译器”涵盖了几个工具:综合;映射;地点和路线
      【解决方案5】:

      他们可能正在使用 C 来接口与 FPGA。在设计课程中,我们使用 Verilog 对附带的 Linux 板中的 FPGA 和 C 进行编程。在这种情况下,他们可能会使用 C,因为用 C 编写小程序比使用 C++ 更容易。

      【讨论】:

        【解决方案6】:

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

        【讨论】:

        • 但是,使用 SystemC 需要您使用一些相当昂贵的综合工具——至少要数万美元。绝对不能使用免费的 FPGA 供应商工具。
        • @aneccodeal 我发现使用 SystemC 创建设计可以很容易地进行大量模拟,然后我手动将其转换为 VHDL。繁琐,但手动转换所花费的时间比最初的 C++ 设计和仿真要少得多,而且不需要昂贵的转换综合工具。
        【解决方案7】:

        作为你们中的一些人,我是 C++ 的粉丝。我认为使用 SystemC 与 fpga 一起工作会很棒。因此,我找到了下一页。也许你们中的一些人会感兴趣。

        http://www.es.ele.tue.nl/~ljozwiak/education/5JJ70p/blocks/4/sc2fpgaflow.html

        【讨论】:

          【解决方案8】:

          您所指的是“行为综合”,一种允许将顺序代码作为输入(C、SystemC、C++)并自动生成 VHDL 或 Verilog 中的 FSM+Datapath 对的编译技术,然后可以对其进行综合使用常规的 Xilinx 或 Altera 合成器。

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

          • Mentor Graphics 的 CatapultC 允许您使用 C 和 C++ 的大部分子集
          • 来自 Forte Design System 的合成器(基于 systemC)[edit 2015:现在是 Cadence]
          • 对于 FPGA,ImpulseC 似乎相当成熟
          • [edit 2015] 用于 Xilinx FPGA:Vivado-HLS

          希望对你有帮助

          【讨论】:

            【解决方案9】:

            我能想到的两个:C++ 编写编译器(在本例中为 HDL 翻译器)要复杂得多,并且具有太多在 fpga 等低级编程中无用的特性编程要求。

            【讨论】:

              【解决方案10】:

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

              【讨论】:

              • PALASM 已经过时了(用于 1980 年代的操作系统)。
              【解决方案11】:

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

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

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

              【讨论】:

                【解决方案12】:
                1. 您可以使用在 FPGA 上运行的软处理器并从那里用 C 语言编写代码(Altera 的 NIOS、Xilinx 的 Microblaze 等)。
                2. SOC FPGA 使用 OpenCL 与 ARM 处理器中的 FPGA 连接。

                【讨论】:

                  【解决方案13】:

                  您可以使用 C/C++ 对 FPGA 进行编程。 Xilinx 拥有 SDSoC,这是一个基于 Eclipse 的工具,用于使用 C/C++ 对 FPGA 进行编程。这基本上为标记为要合成的部分代码构建硬件加速器。这假设基于 ARM+FPGA 的 zynq 设备,主机代码在 ARM 上运行

                  还有另一种基于 PC 的流程 SDAccel 解决方案。将 X86 上的主机代码和 FPGA 上的加速器连接到您的 PCIe 插槽。

                  【讨论】:

                    【解决方案14】:

                    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 代码,但它的作用是使用芯片上已有的微处理器创建“计算机”,让您了解代码的工作原理。它更多的是一种学习工具。

                    【讨论】:

                      【解决方案15】:

                      不确定这是否已经说过(我没有阅读所有回复),但您所听到的可能是软核中正在运行的软件......例如 Altera 有 Nios II,它可以运行一个 linux 内核 (uCLinux),它允许一些预加载的 C 程序在该软核上运行,该软核又与 FPGA 通信。因此,FPGA 仍将在硬件端使用 VHDL/Verilog 进行编程,然后它所保存的任何数据都可以被在软核中的操作系统上运行的小型应用程序访问。我确信只要 uCLinux/运行的任何内核都支持该语言,就可以使用 C++。

                      ~狡猾

                      【讨论】:

                        【解决方案16】:

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

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2020-11-02
                          • 1970-01-01
                          • 2017-08-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多