Answers:
我无法告诉您要学习哪些内容,但是这里有一些对比点(来自非常以VHDL为中心的用户,但我试图做到尽可能公平!),这可以帮助您根据自己的偏好进行选择在发展风格上:
并且请记住著名的引号,上面写着“我更喜欢我当前不使用的两个”(抱歉,我记不清是谁写的,可能是Janick Bergeron?)
开始时会有很多编译错误,但大多数情况下都可以按照您的期望进行。这可能会导致感觉学习曲线非常陡峭(以及不熟悉的语法)
在稍后的仿真中发现错误-“感觉就像完成某件事”的学习曲线较浅,但持续时间更长(如果这是正确的隐喻?)
同样受Verilog支持的是,高端验证越来越倾向于SystemVerilog,它是Verilog的巨大扩展。但是高端工具也可以将VHDL综合代码与SystemVerilog验证代码结合在一起。
另一种方法是:MyHDL-通过一组综合扩展,您可以获得Python作为验证语言的所有功能,可以从中生成VHDL或Verilog。
或Cocotb -Python作为验证语言的全部功能,您仍然可以使用您决定学习的任何HDL(即VHDL或Verilog)编写可综合代码。
我在同一周都学到了。VHDL就像ADA / Pascal,而Verilog就像C。VHDL变得更冗长,更痛苦,但是一旦获得编译,成功的机会就会更好。至少那是我发现的。像C一样,Verilog也很满足于让您用脚射击。航空航天/政府等一些行业倾向于VHDL,而其他行业则倾向于Verilog。我发现两者的问题都是测试平台的功能,并且当尝试学习并尝试从仿真到芯片/ FPGA编写可综合代码时,这是另一门教育。
我真的很喜欢一种叫做CDL的语言。它是严格可综合的,您可以用其他方式编写测试平台,它会生成可综合的Verilog,您可以将其引入其他工具。不幸的是,缺少CDL文档,我希望从世界上获得一些样本,以显示它比Verilog或VHDL容易使用的多,但还没有做到这一点。它带有自己的模拟/测试环境。使用CDL和GTKWave,您可以完成大量工作。
另一个称为Verilator的工具在保持Verilog清洁方面相当严格。它是一个免费的Verilog模拟器,可通过一种非常简单的方法连接到sim卡或在C / C ++中创建测试平台。您也可以使用Verilog,但不仅限于此。还有Icarus Verilog,它更大并且更广为人知,但是如果您想学习Verilog ,我建议您使用Verilator。对于VHDL,有GHDL,我的经验不如Verilator,但至少有一个免费的工具可以使您的脚湿透。如果您具有软件编程经验,则可能会比VHDL更快地接受和享受Verilog。
我绝对同意莱昂,尝试两者。 fpga4fun和其他网页提供了一些很好的信息,其中一些页面将为您提供他们正在讨论的主题的Verilog和VHDL等效语言。我发现这样的页面对于比较这两种语言最有用。如果您想在职业生涯中使用HDL,我建议两者都至少具有某些功能,也许其中一项功能确实不错,但不要完全无法使用另一项功能。
为此已经进行了许多圣战。Verilog的一个特殊缺点是其不确定性。http://www.sigasi.com/content/verilogs-major-flaw
两者都有优点和缺点。VHDL更具学术性,冗长且复杂。您必须编写更多代码,但严格的要求意味着它更有可能起作用。对于典型的数字设计而言,Verilog更简单,但更易于创建棘手的错误。VHDL在大学中更为常见。Verilog在大型半导体公司中更为常见。
通常,一个或另一个的选择是由您使用的工具决定的。一些流行的FPGA工具在VHDL上表现更好。一些流行的ASIC工具与Verilog结合使用时效果更好。因此,哪个更好取决于您要如何处理。
假设您想使用在EE学校中很流行的Altera FPGA来构建小型项目。免费工具支持两个HDL。但是您可能会发现用户社区主要使用VHDL。如果您选择该语言,将会有更多示例代码,可重用模块等。
相反,如果您打算在一家从事认真的芯片设计工作的大公司工作,那么如今,几乎所有人都使用Verilog。重型综合,仿真和验证工具针对Verilog进行了优化。最近,SystemVerilog-对Verilog的扩展,以支持高级系统设计和验证。
这里有更多讨论,还有有用的链接:
对于初学者/爱好者,最好的建议是确定要使用的芯片,并查看供应商提供的示例。用那个 一旦您是一位经验丰富的数字设计师,学习另一种语言仅需几天时间。
简短的答案:使用SystemVerilog,但还要学习VHDL。如果可以,请避免使用Verilog-2001。
很长的答案:就目前而言,我认为Verilog是指Verilog-2001,这也可能是大多数其他答案所假定的。最好的建议可能是两者都学习,但不要两者都用(答案末尾更多)。可以在以下方面恢复主要区别:
wire
vs reg
)也就是说,最重要的概念由两种语言共享,尽管名称不同(例如,always
vs 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_ff
,always_latch
,always_comb
块,可帮助设计人员立即分辨实现不同类型的逻辑块之间,以及- always_comb
和always_latch
- (!在VHDL和Verilog无限的错误,尤其是对初学者的来源)自动推断应该去的灵敏度名单上的信号logic
替代混乱的Verilog-2001的类型wire
和reg
类型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。
总体而言,硬件设计器的工具箱中还有两种其他重要的语言(尽管这些工具的质量可能相差很大):
我过去13年的职业是80%的ASIC和20%的FPGA。
VHDL用于第一个3.5年,其余为Verilog。我发现切换到Verilog并不困难,并且由于位置(硅谷)和速度原因,我今天只在Verilog中编写代码。
另外,我做了很多异步接口,锁存器和门级半定制设计以提高性能,因此VHDL现在在我的生活中几乎没有用。相反,我发现SystemVerilog和SystemC在进行大型工程项目中使用时更为有用。
在一个阶段,诸如Verilator(免费!又快)之类的工具为关键仿真节省了我许多急需的资金。VHDL还没有此选项。如果您总是在一个富裕的游泳池里游泳,或者不进行> 1M的闸门设计,则可能永远不需要它。
没错,VHDL对于初学者来说,在他们制定可靠的硬件设计原则之前就更好了。我在这里与EDA人士的交流表明,过去10年来,他们在VHDL方面几乎没有做任何开发,而今天HLS背后有很大的推动力。因此,周围不会有很多VHDL工具开发人员...
我几乎完全使用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观察到的问题之一是,由于它是一种非常冗长的语言,(在设计人员的心中)似乎有一种趋势认为它不需要注释。当然不是真的,您应该在代码之前写注释。
先前的答案几乎涵盖了两种语言之间的差异,本文也很好地涵盖了这些要点:http : //www.bitweenie.com/listings/verilog-vs-vhdl/
我还想提出更多未提及的观点。
由于一些原因,我建议您首先学习VHDL。强类型可以帮助编译器捕获一些简单的初学者错误。我还听说过先使用Verilog后,很难再接VHDL。
老实说,两种语言都不会出错。如果您在这个行业工作了很长时间,那么无论如何您最终都会学习两种语言。