我一直听到电气工程师认为C用于fpga工作。
C ++怎么样?使用C ++有什么缺点吗?我认为C ++比C更好地为硬件编程提供所需的并行性,不是吗?
此后我还要用什么来与硬件制作兼容的c ++?
答案 0 :(得分:16)
我很确定FPGA是用VHDL或Verilog编程的。
http://en.wikipedia.org/wiki/Vhdl
http://en.wikipedia.org/wiki/Verilog
我知道Altera还提供了一些C到HDL的翻译器。我怀疑它们除了微小的设计之外什么都可用。
答案 1 :(得分:8)
到目前为止,编程FPGA的最简单方法是通过LabView的FPGA模块。但是,这也会将您与硬件和软件联系起来。这不是一个廉价的解决方案,但肯定是用硬件获得程序的最快方法,而不需要学习LabVIEW以外的任何东西。
答案 2 :(得分:6)
您可以使用C或C ++对FPGA进行编程,但它需要一些非常昂贵的Highlevel Synthesis软件。 CatapultC是Mentor Graphics的产品,它允许您在不定时的C ++中编写算法。然后它将该C ++合成为RTL VHDL或Verilog。但CatapultC售价超过10万美元,所以绝对不适合业余爱好者。还有另一个名为ImpulseC的产品,它允许你编写C代码然后合成到RTL中,但我很确定它只处理C而不是C ++。 ImpulseC约为2000美元。
对于业余爱好者来说,最好不要使用VHDL或Verilog来描述您的设计,然后使用Xilinx或Altera的免费工具来合成代码并对FPGA进行编程。
答案 3 :(得分:5)
编译CPU和编译FPGA之间存在很大差异。 “普通”编译器生成二进制程序代码。特殊的FPGA编译器生成“硬件”。那里有编译器将一些类似C的代码转换为“硬件”。但它不完全是C.它可能是一个带有整数类型任意位长度的C导数,可能仅限于迭代和非递归函数调用。
我是C ++的忠实粉丝,但即使我看到它的许多部分都不适合FPGA:虚函数,RTTI,异常。至少这是我的印象。我自己没有测试那些类似C的FPGA编译器,但是我的一个伙伴和他们一起工作,它应该是PITA。
答案 4 :(得分:4)
他们可能正在使用C与接口与FPGA。在设计类中使用一个时,我们使用Verilog对连接的Linux板中的FPGA和C进行编程。在这种情况下,他们可能会使用C,因为用C语言比用C ++更容易敲出一个小程序。
答案 5 :(得分:3)
你可能在谈论SystemC,这是一组C ++类和宏,主要用于(事务级)建模,而不是用于综合。然后可以将高级模型用作验证寄存器传输级别(RTL)描述的黄金参考,该描述通常用VHDL或Verilog编码。
答案 6 :(得分:1)
我能想到的两个问题:C ++编写编译器(在这种情况下是HDL转换器)要复杂得多,而且有太多的功能在fpga这样的低级编程中没有用处编程要求。
答案 7 :(得分:1)
与其他人一样,大多数FPGA都是使用VHDL或Verilog设计的。我也看到几年前用于小型设计的PALASM。该设计是一个逻辑描述,转换为配置FPGA的设置。 Verilog基于c,所以知道c将有助于学习verilog,但FPGA本质上是并行的,所以即使语法看起来相似也没有太多其他翻译。
答案 8 :(得分:1)
作为你们中的一些人,我是C ++的粉丝。我认为使用SystemC来处理fpga会很棒。所以我找到了下一页。也许它会引起你们的兴趣。
http://www.es.ele.tue.nl/~ljozwiak/education/5JJ70p/blocks/4/sc2fpgaflow.html
答案 9 :(得分:1)
你所指的是“行为综合”,一种编译技术,它允许将顺序代码作为输入(C,SystemC,C ++)并自动生成VHDL或Verilog中的FSM +数据路径对,然后可以合成使用常规Xilinx或Altera合成器。
迄今为止,有许多“行为合成器”:
希望这有帮助
答案 10 :(得分:1)
他们可能正在谈论像Handel-C这样的编程语言,这种语言是某种C方言,针对硬件编程。 Handel-C可以直接或间接编译为HDL,HDL又可以创建FPGA配置(即FPGA上的“程序”)。
虽然VHDL和Verilog更难学,但我建议你马上开始。当你做与FPGA相关的事情时,你通常会对效率感兴趣。 Handel-C最有可能制作的代码效率低于你手工编写的代码(用VHDL或Verilog编写)。
编辑:我没有使用过Handel-C或相关编译器的C ++变体。
答案 11 :(得分:0)
答案 12 :(得分:0)
您可以使用C / C ++对FPGA进行编程。 Xilinx拥有SDSoC,这是一款基于eclipse的工具,用于使用C / C ++对FPGA进行编程。这基本上构建了标记为要合成的部分代码的硬件加速器。这假设基于ARM + FPGA的zynq设备,主机代码在ARM上运行
基于PC的解决方案还有另一个SDAccel流程。使用X86上的主机代码和连接到PCIe插槽的FPGA上的加速器。
答案 13 :(得分:0)
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代码,但是它的作用是使用芯片上已有的微处理器创建一个“计算机”,以使您了解代码的工作原理。它更多是一种学习工具。
答案 14 :(得分:-1)
不确定是否已经说过(我没有阅读所有的回复)但是你听到的可能是软核中正在运行的软件...例如Altera有Nios II可以运行一个linux内核(uCLinux),它将允许一些预先加载的C程序在该软核上运行,而后者又与FPGA通信。因此,FPGA仍将使用VHDL / Verilog进行硬件编程,然后在软核中的操作系统上运行的小应用程序可以访问它所拥有的任何数据。我确信只要uCLinux /运行的内核支持该语言,就可以使用C ++。
〜doddy
答案 15 :(得分:-2)
您通常会使用C ++和C来获得更大的标准库,而C更接近硬件的运行方式,即电气工程师更容易。