你能用C语言编程FPGA吗?

时间:2012-01-24 14:36:30

标签: fpga

在大学时,我用类C语言编写了一个FPGA。但是,我也知道通常用Verilog或VHDL编程FPGA。这是设计师的选择吗?如果是这样,性能缺点是什么?

理想情况下,我希望用类似C语言编程FPGA,而不是VHDL。

如果它有任何区别,我想考虑购买Xilinx Virtex-5?

9 个答案:

答案 0 :(得分:28)

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

是的,有C到FPGA的编译器。

他们是个好主意吗?我会说不会。你最终会得到的设计是(从我所见过的)通常是状态机,它在C中每行代码都有一个状态。然后状态机在状态机中运行算法。或者使用其他类型的图灵机来执行代码。

这是 FPGA设计方面的技术人员通常会如何解决问题。这是一种缓慢的,可能是饥肠辘辘的做事方式。

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

如果您认真使用FPGA,请使用旨在描述逻辑电路的语言。这可能是一个陡峭的学习曲线,但结果会好得多恕我直言。

答案 1 :(得分:11)

简短的回答是“是的,当然”。

这是针对FPGA和基于FPGA的系统的C编译器的优秀调查。

C-to-hardware compiler (HLL synthesis)

系统架构和通信带宽中存在性能缺陷和考虑因素,而不是使用C与硬件设计语言(HDL)。使用C与HDL的关注点在于编程时间和软件维护问题,而不是性能。

答案 2 :(得分:6)

您可以在 FPGA逻辑中安装软处理器内核,并在虚拟处理器内运行C代码。 Xilinx拥有Microblaze(许可)和Picoblaze(免费)内核。您还可以实现其他软核(MIPS,x86,8051等)。

然而,这主要被认为是“黑客”,因为与真实核心相比,核心速度非常慢。而且我认为任何 C-to-FPGA转换最终会像运行软核一样开始闻起来,并没有为您提供在FPGA上运行所需的效率。 FPGA不是图灵机,它们是一堆逻辑门。你可以在大门外建造一台图灵机,但这并不是你购买大门的原因。

有点像买一袋乐高积木,用砖头制作一把锤子和一套钉子。它可能有用,但你最好买一把锤子来敲钉子,最好用乐高积木建造城堡,太空船和消防站。

答案 3 :(得分:2)

你应该看看SystemC。使用基于C语言的优点很多。特别是,从系统设计的角度来看,您可以利用其他软件(固件和其他低级别的东西)用C语言编写。因此,您的软件团队可以在rtl代码的早期阶段进行测试。

2011年,Xilinx收购了AutoC公司,该公司已经与SystemC开发了高级综合技术。 Xilinx在发布其产品“AutoESL”时重用了该名称。特别是在他们的新电路Zynq中,双核ARM Cortex A9与FPGA逻辑嵌入在一起,这可能会成为系统开发的强大工具。

答案 4 :(得分:2)

确实有一些编译器允许你使用像C这样的高级语言来推断(使用不完整的描述来解决)硬件电路。“C-to-gates”实际上是一个流行的流行语。图像公司做广告是程序员能够编写硬件,如果他们使用的语言是他们用来描述软件的语言。出于多种原因,这是非常错误的,其中主要是C语言和硬件描述语言之间的执行模型之间的根本区别。

一个说明性示例:C假设其核心是一个随机可访问的大型线性寻址存储器 - 这种假设很少适用于硬件。 C-to-gates编译器面临着一个具有挑战性的任务,即编写所描述程序的行为,并设计具有相同行为的硬件电路。

虽然类C语言在有限的使用案例中是一个很好的生产力工具,但如果您熟悉C,这些编译器肯定不会让您突然知道如何设计硬件。

希望这有帮助,

答案 5 :(得分:1)

我猜你使用的是Handel C.它是C的一个子集。据我所知,结果不是很优化。 Verilog和VHDL允许更多优化。我根据几年前我对亨德尔C的经验来说这个。

答案 6 :(得分:1)

您可能希望了解C-to-hardware技术,您可以在其中编写C代码并将其编译/转换为VHDL或Verilog。 This post列出了一些编译器。没有自己使用它,所以我没有任何经验。希望这有帮助!

答案 7 :(得分:1)

许多设计人员编写VHDL / Verilog而不是高级语言,原因与许多程序员过去(在某些情况下仍然会编写)而不是Java编写程序集相同:您可以将资源使用和性能调整到较低水平。 VHDL和Verilog都是为设计硬件而设计的语言。 C不是。如果有足够的时间,您总是可以用VHDL / Verilog编写一个程序,该程序将胜过高级语言程序。 HLL给你的是1)更快的开发,2)易于维护,3)可能更大的可移植性。

已经做了很多努力来将现有的高级编程语言(C是一个)编译成FPGA目标。事实上,他们中的大多数都会生成优化的代码。例如,Impulse C是C的一个子集,带有一些支持进程级并行性的附加库,以及一个优化指令级并行性的C输入的编译器。它管道循环,将某些操作映射到它知道底层FPGA系列提供的高性能硬件原语等。(完全披露:我帮助构建了Impulse C工具链。)

Carlito和David Pointer链接的C-to-hardware environments列表非常详尽。 Xilinx Virtex-5受其中许多支持,如果您使用的是主要供应商的最新FPGA系列,那么选择硬件应该不成问题。一些HLL环境比其他环境更好地支持内置(或软核)嵌入式CPU。

答案 8 :(得分:1)

我想补充一些我认为最接近OP问题的答案。如果您正在寻找类似C语言(与C不同),您一定要查看Synflow。我们的想法是拥有一种现代语言,使您能够在没有VHDL / Verilog学习曲线的情况下更快地进行设计,并且无需开销。它也是免费和开源的!

披露:我是Synflow的联合创始人: - )