你可以使用类似于C语言的编程语言来编写FPGA程序吗?

30

在大学时,我用一种类似C的语言编程FPGA。然而,我知道通常使用Verilog或VHDL编程FPGA。这是设计师的选择吗?如果是,有什么性能缺陷?

我希望尽可能使用类似C的语言来编写FPGA,而不是VHDL。

我在想是否应该买一款Xilinx Virtex-5,如果有区别的话?


1
对于VHDL,有什么异议 - 是语法还是能力? - Martin Thompson
也许OpenCL更加适合:https://www.altera.com/products/design-software/embedded-software-developers/opencl/overview.html - Ciro Santilli OurBigBook.com
9个回答

34

FPGA并不是处理器,C语言是为处理器设计的。

是的,有将C语言编译成FPGA的编译器。

它们是否是一个好主意?我会说不是。你最终会得到一个状态机,每行C代码对应一个状态。然后状态机通过状态执行算法。或者采用其他类型的图灵机来执行代码。

不是熟练掌握FPGA设计的人通常解决问题的方式。这是一种缓慢而且可能需要大量逻辑门的方法。

与英语比起来更适合写小说的Fortran语言一样,VHDL和Verilog语言更适合描述逻辑电路,而不是C语言。

如果您想认真使用FPGA,请使用专为描述逻辑电路设计的语言。这可能是一个陡峭的学习曲线,但结果会更好,在我看来。


当然,也可以使用C到HDL编译器将C程序翻译成VHDL或Verilog。 - Anderson Green

12

简而言之,答案是“是的,当然可以”。

这里有一份关于FPGA和基于FPGA系统的C编译器的优秀调查报告。

C到硬件编译器(高级语言综合)

性能方面的缺陷和考虑取决于系统架构和通信带宽,而不在于使用C还是硬件设计语言(HDL)。在使用C与HDL时需要考虑的问题在于编程时间和软件维护问题,而不是性能问题。


8
你可以在FPGA逻辑内部安装软处理器核,并在虚拟处理器内运行C代码。Xilinx拥有Microblaze(许可证)和Picoblaze(免费)核心。您还可以实现其他软核(MIPS,x86,8051等)。
然而,这被普遍认为是一种“hack”,因为与真实核心相比,这些核心非常慢。我认为,任何C到FPGA的转换最终都会开始像运行软核一样,而不会为在FPGA上运行提供应得的效率。FPGA不是图灵机,它们是一堆逻辑门。您可以使用门构建图灵机,但这并不是您购买门袋的原因。
这有点像购买一个乐高积木包,然后用积木建造锤子和钉子。它可能有效,但是购买一把锤子来钉钉子更好,用乐高积木建造城堡、太空飞船和消防站更好。

3
我想补充一些我认为是最接近OP问题的答案。如果你正在寻找类似C的语言(不同于C),你应该绝对检查Synflow。这个想法是拥有一种现代化的语言,让你在没有VHDL / Verilog的学习曲线和无开销的情况下更快地设计。此外,它是免费和开源的! 披露:我是Synflow的联合创始人 :-)

2
你应该看一下SystemC。使用基于C语言的优点是很多的,特别是在系统设计方面,你可以利用其他软件(固件和其他低级别的东西)都是用C语言编写的。因此,在早期阶段,你的软件团队就可以对RTL代码进行测试。
2011年,赛灵思收购了AutoESL公司,后者开发了带有SystemC的高层次综合。赛灵思重新使用了这个名字,当他们发布了他们的产品“AutoESL”时。特别是他们的新电路Zynq,其中有一个双核ARM Cortex A9与FPGA逻辑嵌入在一起,这可能会成为系统开发的强大工具。

2
有一些编译器确实可以使用高级语言如C语言推断(通过不完整的描述求解)硬件电路。 "C转门"实际上是一个流行的术语。 图像公司广告的是,如果程序员使用的语言是用于描述软件的语言,则他们能够编写硬件。出于多种原因,这是非常错误的,其中最主要的原因是C语言等语言所假定的执行模型与硬件描述语言之间的根本差异。
举个例子:C语言在其核心处假定具有大量随机访问线性寻址存储器 - 这种假设很少适用于硬件。 C转门编译器面临着一个艰巨的任务,即解释所描述程序的行为,并设计出具有相同行为的硬件电路。
虽然类似C语言的语言在有限的用例中是一个很好的生产力工具,但是如果您熟悉C语言,这些编译器肯定不会突然让您知道如何设计硬件。
希望这可以帮助到您,

1

我猜你使用的是Handel C。它是C语言的一个子集。据我所知,结果并不是很优化。 Verilog和VHDL允许进行更多的优化。我这样说是基于我几年前使用Handel C的经验。


还有人支持Handel C吗? - Mark Lakata

1

你可能想要了解一下 C-to-hardware 技术,它可以让你编写 C 代码并将其编译/翻译成 VHDL 或 Verilog。这篇文章 列出了一些编译器。我自己没有使用过,所以对此没有任何经验。希望这能帮到你!


1
许多设计师使用VHDL/Verilog代替高级语言,原因与许多程序员以前(在某些情况下仍然如此)编写汇编语言而不是Java相同:您可以在低层次上调整资源使用和性能。 VHDL和Verilog都是用于设计硬件的语言,而C则不是。花费足够的时间,您总是可以用VHDL / Verilog编写一个比高级语言程序更快的程序。高级语言给您带来的是1)更快的开发速度,2)易维护性和3)可能更大的可移植性。
已经有许多努力将现有的高级编程语言(C就是其中之一)编译为FPGA目标。它们中的大多数实际上生成了优化的代码。例如,Impulse C是C的子集,具有支持进程级并行性的一些附加库,以及可以优化指令级并行性的编译器。它对循环进行流水线处理,将某些操作映射到其了解底层FPGA系列提供的高性能硬件基元等(完全披露:我帮助构建了Impulse C工具链)。

C-to-hardware environments列表由Carlito和David Pointer提供,非常详尽。其中许多环境都支持Xilinx Virtex-5,如果您正在使用主要供应商的任何最新FPGA系列,硬件选择不应该是问题。一些高级语言环境比其他环境更好地支持内置(或软核)嵌入式CPU。


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