我相信在大学时我为一个源自C语言的FPGA编写了一个程序。我知道VHDL和verilog等语言。但是,我不明白的是程序员选择使用的数量?它依赖于FPGA吗?我将使用Xilinx FPGA。
我感到很困惑,因为C变体语言不出所料地类似于C-但我知道像VHDL这样的东西就像C一样。因此,如果我有一个选择,我宁愿使用C变体语言编程FPGA 。 Xilinx网站上有一百万份文件,并不是很清楚。
答案 0 :(得分:6)
你使用的可能是Verilog。它在很多构造中都很像C语言。我不会说它“像C”,但有些语法类似。
VHDL基于ADA,所以是的,它是相当不同的。
有一些小的FPGA特定语言,但VHDL和Verilog是最重要的两种语言。我想其他大多数人现在已经死了。
请记住,编写硬件和编写软件是两回事。您无法用C(*)等语言真正描述硬件结构。该语言需要具有特殊功能,以便您准确描述您想要的内容。代码需要以使硬件高效的方式构建。不要自欺欺人地认为你可以通过更改语言/编译器来获取一块软件并在FPGA上神奇地运行它。 (这更多地针对你对Marty的跟进问题)。
尝试使用C编写电路描述,就像尝试用英语编写计算机一样。你可以做到,但这真的是错误的工作语言。
(*)是的,我知道有SystemC(一个C ++类库,旨在使代码可合成),但我还没有看到任何人从中获得好结果,当然也不是在FPGA上。即使这样,代码的结构也必须与HDL类似。
答案 1 :(得分:3)
显然,当编程FPGA(Xilinx,Altera等:都接受VHDL或Verilog)时,HDL仍然更可取。
然而,情况正在发生变化(缓慢):现在有很好的所谓行为合成器,它允许您在C中编码并生成硬件,在VHDL或Verilog中为您表示 - 转移水平。它们有时被称为HLS:高级综合。
问题在于它们非常昂贵。
在学术层面:
基本上,这些工具通过从C程序中提取依赖图来工作:节点表示计算,边表示变量:这就是您在C或其他编程语言中编程时所执行的操作。使用此内部表示,编译器可以执行与硬件相关的转换,例如:寄存器分配(映射变量以注册,或保持它们组合,即保持连线),操作调度(决定操作是否在相同的时钟周期内执行)等,最后生成HDL自动。
希望这有帮助
JCLL
答案 2 :(得分:1)
通常FPGA供应商都会有支持Verilog和VHDL的工具链 - 您可以选择自己喜欢的语言。通常只支持这两种语言。
对于更多类C语言,长镜头选项是使用SystemC的可合成子集。这是C ++,添加了电路友好的东西。我不确定FGPA工具是否支持这一点。