VHDL还是Verilog?[关闭]


93

VHDLVerilog是当今的HDL。对于完全没有HDL经验的人来说,这两者的优点是什么?


2
它们似乎同样有效,请选择您喜欢的一种。我发现VHDL最适合我。
莱昂·海勒

1
如何让这些主持人“投票”?有经验的人的言辞比书中包含的信息更有价值。书没有时间的概念。
dsgdfg

Answers:


70

我无法告诉您要学习哪些内容,但是这里有一些对比点(来自非常以VHDL为中心的用户,但我试图做到尽可能公平!),这可以帮助您根据自己的偏好进行选择在发展风格上:

并且请记住著名的引号,上面写着“我更喜欢我当前不使用的两个”(抱歉,我记不清是谁写的,可能是Janick Bergeron?)

甚高密度脂蛋白

  • 强类型
  • 更详细
  • 非常确定的
  • 非C类语法(和思维方式)

开始时会有很多编译错误,但大多数情况下都可以按照您的期望进行。这可能会导致感觉学习曲线非常陡峭(以及不熟悉的语法)

Verilog

  • 弱型
  • 更简洁
  • 只有在您认真遵循一些规则的情况下才能确定
  • 更多类似C的语法(和思维方式)

在稍后的仿真中发现错误-“感觉就像完成某件事”的学习曲线较浅,但持续时间更长(如果这是正确的隐喻?)

同样受Verilog支持的是,高端验证越来越倾向于SystemVerilog,它是Verilog的巨大扩展。但是高端工具也可以将VHDL综合代码与SystemVerilog验证代码结合在一起。


另一种方法是:MyHDL-通过一组综合扩展,您可以获得Python作为验证语言的所有功能,可以从中生成VHDL或Verilog。

Cocotb -Python作为验证语言的全部功能,您仍然可以使用您决定学习的任何HDL(即VHDL或Verilog)编写可综合代码。


2
我知道Verilog,但我对VHDL并不熟悉:VHDL比Verilog更具有确定性,这是什么意思?
cic

44

我在同一周都学到了。VHDL就像ADA / Pascal,而Verilog就像C。VHDL变得更冗长,更痛苦,但是一旦获得编译,成功的机会就会更好。至少那是我发现的。像C一样,Verilog也很满足于让您用脚射击。航空航天/政府等一些行业倾向于VHDL,而其他行业则倾向于Verilog。我发现两者的问题都是测试平台的功能,并且当尝试学习并尝试从仿真到芯片/ FPGA编写可综合代码时,这是另一门教育。

我真的很喜欢一种叫做CDL的语言。它是严格可综合的,您可以用其他方式编写测试平台,它会生成可综合的Verilog,您可以将其引入其他工具。不幸的是,缺少CDL文档,我希望从世界上获得一些样本,以显示它比Verilog或VHDL容易使用的多,但还没有做到这一点。它带有自己的模拟/测试环境。使用CDLGTKWave,您可以完成大量工作。

另一个称为Verilator的工具在保持Verilog清洁方面相当严格。它是一个免费的Verilog模拟器,可通过一种非常简单的方法连接到sim卡或在C / C ++中创建测试平台。您也可以使用Verilog,但不仅限于此。还有Icarus Verilog,它更大并且更广为人知,但是如果您想学习Verilog ,我建议您使用Verilator。对于VHDL,有GHDL,我的经验不如Verilator,但至少有一个免费的工具可以使您的脚湿透。如果您具有软件编程经验,则可能会比VHDL更快地接受和享受Verilog。

我绝对同意莱昂,尝试两者。 fpga4fun和其他网页提供了一些很好的信息,其中一些页面将为您提供他们正在讨论的主题的Verilog和VHDL等效语言。我发现这样的页面对于比较这两种语言最有用。如果您想在职业生涯中使用HDL,我建议两者都至少具有某些功能,也许其中一项功能确实不错,但不要完全无法使用另一项功能。


1
很好的提示。我已经编辑了您的答案,作为对我和他人的参考。+1
Daniel Grillo

23

为此已经进行了许多圣战。Verilog的一个特殊缺点是其不确定性。http://www.sigasi.com/content/verilogs-major-flaw


是的,这看起来很糟糕,但是我不确定:这是语言还是特定合成器中的缺陷?
stevenvh 2011年

4
这是语言问题。不同的合成器以不可预测的方式选择自己的行为。在Mentor模拟器或Cadence模拟器上运行相同的代码,您可能会得到不同的结果。
菲利普

20

两者都有优点和缺点。VHDL更具学术性,冗长且复杂。您必须编写更多代码,但严格的要求意味着它更有可能起作用。对于典型的数字设计而言,Verilog更简单,但更易于创建棘手的错误。VHDL在大学中更为常见。Verilog在大型半导体公司中更为常见。

通常,一个或另一个的选择是由您使用的工具决定的。一些流行的FPGA工具在VHDL上表现更好。一些流行的ASIC工具与Verilog结合使用时效果更好。因此,哪个更好取决于您要如何处理。

假设您想使用在EE学校中很流行的Altera FPGA来构建小型项目。免费工具支持两个HDL。但是您可能会发现用户社区主要使用VHDL。如果您选择该语言,将会有更多示例代码,可重用模块等。

相反,如果您打算在一家从事认真的芯片设计工作的大公司工作,那么如今,几乎所有人都使用Verilog。重型综合,仿真和验证工具针对Verilog进行了优化。最近,SystemVerilog-对Verilog的扩展,以支持高级系统设计和验证。

这里有更多讨论,还有有用的链接:

http://www.eetimes.com/electronics-blogs/programmable-logic-designline-blog/4032239/Verilog-versus-VHDL-which-is-best-

对于初学者/爱好者,最好的建议是确定要使用的芯片,并查看供应商提供的示例。用那个 一旦您是一位经验丰富的数字设计师,学习另一种语言仅需几天时间。


4
谢谢。最后一句话很重要。是否有将一种转换为另一种的工具?
stevenvh 2011年

我不会涉及一些美国政府历史,但是如果您查看modelsim,则当它接受verilog时,它将转换为vhdl,然后进行模拟。相反,它并没有做到这一点,因此至少您可以看到verilog到vhdl的转换。还有其他工具专门用来转换一种或多种方式,并且它们具有演示版本。
old_timer 2011年

3
某些商业(综合,静态分析)工具将以一种语言阅读,并以另一种语言输出。结果就像使用编译器将Ada转换为汇编语言,然后使用反编译器提取C一样。您不会喜欢该结果。
安迪·麦克

17

简短的答案使用SystemVerilog,但还要学习VHDL。如果可以,请避免使用Verilog-2001。

很长的答案:就目前而言,我认为Verilog是指Verilog-2001,这也可能是大多数其他答案所假定的。最好的建议可能是两者都学习,但不要两者都用(答案末尾更多)。可以在以下方面恢复主要区别:

  • Verilog-2001 简洁明了,而VHDL则(非常非常非常)冗长
  • Verilog-2001支持VHDL不支持的非常低级的结构(但是您不必在典型的寄存器传输级(RTL)设计中使用它们)
  • VHDL具有更强的类型,通常可以更容易地及早发现错误
  • VHDL 比Verilog 更具表现力
  • Verilog-2001的语法更像C,而VHDL的语法更像Ada
  • 对于初学者,Verilog-2001可能会有一些令人困惑的概念(例如wirevs reg

也就是说,最重要的概念由两种语言共享,尽管名称不同(例如,alwaysvs process),但在任何情况下,学习HDL的难度都与背后的概念(例如,所有进程的并发,硬件)并存。惯例等),而不是语言本身。考虑到这些差异,如果在Verilog 2001和VHDL之间进行选择,我个人会针对VHDL的任何初学者。

但是,正如我所说,我的建议实际上是如果您有选择的能力,则不要使用VHDL或Verilog-2001。与许多人的假设相反,SystemVerilog并不是仅用于系统级设计或验证的高级语言,与可用于诸如SystemC的高级综合工具的语言几乎没有共享。

相反,SystemVerilog是Verilog语言的完整更新(基于Verilog-2005,请参见http://en.wikipedia.org/wiki/SystemVerilog),该语言具有完全可综合的子集,该子集与Verilog 的简洁性相匹配,并且表达力强于二者。在我看来,Verilog-2001和VHDL提供了两全其美的方法。

SystemVerilog中提供的非常重要的构造体/表达式的示例在Verilog-2001和/或VHDL中不可用,包括:

  • always_ffalways_latchalways_comb块,可帮助设计人员立即分辨实现不同类型的逻辑块之间,以及- always_combalways_latch- (!在VHDL和Verilog无限的错误,尤其是对初学者的来源)自动推断应该去的灵敏度名单上的信号
  • logic替代混乱的Verilog-2001的类型wirereg类型
  • 打包类型,可以轻松构建多维总线(例如logic [N-1:0][M-1:0][P-1:0]),而Verilog-2001仅支持二维总线,而VHDL迫使设计人员定义新的类型以构建相似的结构
  • 高层结构,例如struct(类似于VHDL record),甚至更高层次的结构interface,都可以非常有效地用于对常规结构进行建模(例如总线的端口)

在研究相当复杂的多核系统时,我“在我的皮肤上”测试了所有这些差异。现在许多工具都支持它,并且我可以肯定(几乎每天都使用它们)Synopsys工具(适用于ASIC和FPGA综合流程),Xilinx Vivado(适用于FPGA综合)以及诸如如MentorGraphics Modelsim,Cadence NCsim和Synopsys VCS。

总体而言,硬件设计器的工具箱中还有两种其他重要的语言(尽管这些工具的质量可能相差很大):

  • HDL生成语言,例如MyHDL(基于Python)和Rocket(基于Scala)。这里的概念是:用高级语言描述设计,但仍然使用非常类似于HDL的概念(例如,并发块,显式定时),然后生成常规的HDL(通常是Verilog-2001)。老实说,我认为这些功能没有什么用处,因为从HDL提取的步骤很小,SystemVerilog已经提供了许多高级概念,其优点是无需中间步骤即可直接将其输入到综合流程中。
  • 高级综合工具,例如Vivado HLS,LegUp,Calypto Catapult以及许多其他工具。它们通常在C,C ++或SystemC中进行非常高级的描述,并且通常是不定时的,并且会在(通常不可读的)Verilog中生成尽力而为的实现。它们非常擅长生成某些对象(例如用于诸如卷积,FFT等功能的硬件加速器),但通常不是通用的。例如,不可能在大多数HLS工具中设计处理器核心-我所知道的唯一一个是BlueSpec,它实际上是HLS和HDL生成之间的混合体。

这几乎就是我学到的。首先学习VHDL并将其编码3年。此后花了3个月的时间对verilog进行编码,并且(很快)决定采用SystemVerilog。现在,我几乎只对SV进行编码,但是在很大程度上依赖于我在使用VHDL时学到的理解和编码技术。
斯坦里

12

我过去13年的职业是80%的ASIC和20%的FPGA。

VHDL用于第一个3.5年,其余为Verilog。我发现切换到Verilog并不困难,并且由于位置(硅谷)和速度原因,我今天只在Verilog中编写代码。

另外,我做了很多异步接口,锁存器和门级半定制设计以提高性能,因此VHDL现在在我的生活中几乎没有用。相反,我发现SystemVerilog和SystemC在进行大型工程项目中使用时更为有用。

在一个阶段,诸如Verilator(免费!又快)之类的工具为关键仿真节省了我许多急需的资金。VHDL还没有此选项。如果您总是在一个富裕的游泳池里游泳,或者不进行> 1M的闸门设计,则可能永远不需要它。

没错,VHDL对于初学者来说,在他们制定可靠的硬件设计原则之前就更好了。我在这里与EDA人士的交流表明,过去10年来,他们在VHDL方面几乎没有做任何开发,而今天HLS背后有很大的推动力。因此,周围不会有很多VHDL工具开发人员...


FreeHDL用于VHDL模拟吗?Qucs作为前端。
马丁

8

我之所以选择VHDL,主要是因为我非常了解C,并且发现尝试编写Verilog往往会使我编写起来好像是针对未描述硬件的CPU。

编写代码页面并意识到您编写的内容实际上是一个顺序程序,而不是硬件设计,这很烦人,是的,它可以合成,但是结果丑陋且缓慢。

VHDL足够不同,我发现就逻辑设计而不是控制流程而言,思考起来要容易得多。

归根结底,语言很少难,技巧不是系统设计中的打字。

问候,丹。


5

去年,我所学习的大学为初学者推广了两门开放课程。两者都覆盖相同的内容,但是一个使用VHDL,另一个使用Verilog。

当然,我已经问过两位教授VHDL和Verilog的区别。两者都不能选出最好的。

因此,我必须同时完成这两个课程,才能确定哪个课程对我更好。我的第一印象是VHDL更类PascalVerilog的是更多的类似C

在那之后,我决定只做VHDL,因为那时我正在与Delphi合作。

但是,我在课程结束后从未使用过FPGA。所以这是我能为您提供的最好的帮助。


5

我几乎完全使用VHDL。我的经验是,VHDL在欧洲更常见,在Verilog在美国更常见,但是VHDL在美国也一直在稳步发展。VHDL的强类型输入不会打扰我,因为我将其用作老式的硬件设计语言,用于小型可编程逻辑,例如PALASM或Altera的AHDL。

对于大多数使用VHDL的人来说,最大的问题是强类型。他们想在std_logic_vector(我认为是目标中的电线集合)和“ int”(我认为是存储在编译设计的计算机中的数字)之间进行分配。我通常遇到的最烦人的类型转换是在bit_vector(我认为是对编译设计的计算机中的电线集合的描述)和std_logic_vector之间。实际上,让我立即进入stackexchange的原因是寻找从char(存储在编译计算机中的字符变量)到int的转换。

过去,VHDL与Verilog之间最著名的冲突是ASIC&EDA杂志组织的设计竞赛。Google“硬件设计竞赛的意外结果:Verilog赢了&VHDL败了?–您是法官!”,例如:http : //www.ee.ed.ac.uk/~gerard/Teach/Verilog/manual /Example/lrgeEx2/cooley.html

竞赛是实现一个相当复杂的9位寄存器。它具有递增/递减计数以及其他一些功能。结果是9位Verilog设计人员中有8位在90分钟后运行了代码。5个VHDL成员中有0个起作用。

我不像其他任何人一样使用VHDL。在我使用它的方式中,类型不会经常出现。我已经使用IEEE unsigned库(回溯过去)以与我做其他所有事情相同的方式实现了上述项目,完全在std_logic和std_logic_vector中进行。取而代之的是,我想象VHDL设计人员使用int进行工作,并且迷失了类型转换。

在类型转换中您可能会迷失两个地方:(a)您的设计和(b)您的测试平台。对我来说,(几乎)完全用std_logic编写测试平台要容易得多,因此测试平台本身(几乎)是可合成的。“几乎”是指我将用无法合成的延迟分配来定义时钟。但是除此之外(和评论),您无法将我的测试平台与综合逻辑区分开。

无论如何,在您决定学习第一语言之前(几乎每个人都有偏好,但是几乎每个人都使用这两种语言),我建议您查找该比赛并阅读有关它的评论。

我用VHDL观察到的问题之一是,由于它是一种非常冗长的语言,(在设计人员的心中)似乎有一种趋势认为它不需要注释。当然不是真的,您应该在代码之前写注释。


1
我认为对VHDL的强类型化是最大的问题是一个有趣的说法。对我而言,强类型键入是一项主要功能,使我能够提高抽象水平。在硬件设计中,您可以选择描述实现行为的结构还是描述实现结构的行为。历史表明,抽象是成功进行大型系统设计的关键,数字系统也不例外。因此,我认为您会因为限制语言功能的一小部分而错过了很多东西。
trondd 2012年

2
是的,但是我不擅长“大型系统设计”,我擅长于需要非常高效的小事情。有许多原因有时会使效率在电子设计中变得至关重要。有时,一个大的系统是由很多这些小系统制成,这种设计给人远远更高的效率。
卡尔·布兰嫩

5

我将为此付出两分钱:我自己是VHDL的重度用户,但是Verilog当然也可以完成这项工作。您始终可以将它们包装在一起(尽管要花费时间和打字费用)。

我发现原始的VHDL缺少很多方便的功能。(或或与:想到整个std_logic_vector)。因此,在使用VHDL时,构建自己的调试可综合功能工具箱可以大大提高生产率。

也许有人可以引用一个提供所有这些“必备”功能的优秀开源库?


2
我很确定VHDL 2008中包含了AND / OR减少以及其他一些有用的更新。
ks0ze

4

先前的答案几乎涵盖了两种语言之间的差异,本文也很好地涵盖了这些要点:http : //www.bitweenie.com/listings/verilog-vs-vhdl/

我还想提出更多未提及的观点。

由于一些原因,我建议您首先学习VHDL。强类型可以帮助编译器捕获一些简单的初学者错误。我还听说过先使用Verilog后,很难再接VHDL。

老实说,两种语言都不会出错。如果您在这个行业工作了很长时间,那么无论如何您最终都会学习两种语言。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.