2012-01-24 151 views
21

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

我会非常喜欢的类C语言对FPGA进行编程,而不是VHDL。

我想获得一个赛灵思的Virtex-5,如果这有什么差别吗?

+1

对VHDL的反对意见是什么 - 语法或功能? –

+0

也许OpenCL更充分:https://www.altera.com/products/design-software/embedded-software-developers/opencl/overview.html –

回答

6

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

这里的C编译器为基于FPGA的FPGA和系统的优秀的调研。

C-to-hardware compiler (HLL synthesis)

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

1

我猜你用亨德尔C.其下的子集,从我知道结果是不是很优化。 Verilog和VHDL允许更多的优化。我基础上,我与韩德尔Ç经验,几年前说这句话的

+0

有人支持Handel C吗? –

1

你可能想看看C到硬件技术,在这里你可以写C代码,它会被编译/翻译成VHDL或Verilog。 This post列出了一些编译器。没有使用它我自己,所以我没有任何经验。希望这可以帮助!

1

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

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

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

21

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

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

他们是个好主意吗?我会说没有。你将要结束的设计是(从我所看到的)通常是一个状态机,它在C中每行代码有一个状态。状态机然后移动状态执行该算法。无论是那种还是其他类型的图灵机都可以执行代码。

这是不是 FPGA设计人员通常会如何解决问题。这是一个缓慢的,可能是门户饥饿的方式。

以同样的方式,英语是一种更好的语言来写小说比Fortran语言,VHDL和Verilog是更好的语言来描述逻辑电路比C

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

+0

当然,也可以使用[C to HDL](https://en.wikipedia.org/wiki/C_to_HDL)编译器将C程序翻译成VHDL或Verilog。 –

1

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

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

4

你可以在里面安装一个软核处理器这个FPGA逻辑,然后在虚拟处理器内部运行你的C代码。赛灵思拥有Microblaze(许可)和Picoblaze(免费)内核。还有其他可以实现的软核(MIPS,x86,8051等)。

但是,这在很大程度上被认为是“黑客”,因为核心与真实核心相比非常慢。而且我认为,从C到FPGA的转换最终会开始闻起来像是在运行一个软内核,而不会给你在FPGA上运行的效率。 FPGA不是图灵机,它们是一大堆逻辑门。你可以在大门外建一个图灵机,但这不是你买了一大堆门的原因。

它有点像买了一盒乐高积木,并且用砖头砌出一把锤子和一套钉子。它可能会奏效,但你最好买一把锤子来敲钉子,最好是用乐高玩具建造城堡,太空船和消防站。

2

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

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

虽然类似C语言是在有限的使用情况有很大的生产力工具,这些编译器肯定不会让你突然知道如何设计的硬件,如果你熟悉C.

希望这有助于

0

我想添加一些我认为是OP最接近问题的答案。如果你正在寻找一个类似C的语言(与C不一样),你一定要检查Synflow。这个想法是有一种现代语言,可以让您在没有VHDL/Verilog学习曲线的情况下进行更快速的设计,而且不会带来任何开销。它也是免费和开源的!

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