当前位置: 首页 > 编程学习 > 其它语言 > Verilog > 正文

VHDL和verilog应该先学哪个?

2018-04-22 来源:博客园/窗户
  版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址
 
  http://www.cnblogs.com/Colin-Cai/p/8547099.html 
 
  作者:窗户
 
  QQ:6679072
 
  E-mail:6679072@qq.com

网上有太多的VHDL和verilog比较的文章,基本上说的都是VHDL和verilog之间可以实现同一级别的描述,包括仿真级、寄存器传输级、电路级,所以可以认为两者是等同级别的语言。很多时候会了其中一个,当然前提是真的学会,知道rtl(寄存器传输级)的意义,知道rtl与电路如何对应,在此基础上,则很容易就可以学另外一个。从这个意义上,或许先学什么都无所谓。

学HDL无非要这么几类人:

1.学生

2.电子工程师

3.软件工程师

4.纯粹的爱好者

学生,两眼一摸黑,老师教什么学什么,只为了应付而已,从而很多学生学的非常垃圾,毕业了连个跑马灯都不会做;电子工程师有电路的基础,甚至可以用原理图设计一定的数字逻辑,一般也是因为FPGA而学习;软件工程师有软件语言的基础,一般是嵌入式软件工程师为了FPGA而学习;爱好者只为兴趣,甚至未必是IT业的工作者。

VHDL是强类型语言,比verilog严格。有很多人觉得verilog长的像C语言,所以觉得verilog可能更容易学,我觉得说这话的一般都是软件工程师。然而verilog只不过借用了C语言的符号而已,我甚至觉得还不够彻底,如果verilog当初由我来设计,我肯定就会赶begin/end滚蛋了,而且我实在不理解为什么不这么做。使用&还是and有本质区别吗?使用always@还是process有本质区别吗?这些都不是重点,这些都只是语法的区别而已。你有C语言的基础对于你学习用verilog设计电路作用不是很大,但HDL不仅用来设计真实电路,也是可以拿来设计仿真的,如果你是玩仿真的话,那么C的基础作用还是很大的。

VHDL当初是用来做美国军方定制硬件的行为描述的语言,HDL的D不是design,而是description。VHDL有着相对verilog更大的抽象能力,理论上verilog只能在0/1的数字信号系统上玩,而VHDL完全可以为多进制数字建模。当然,同时,VHDL被定义成一种强类型语言,从而不像verilog用起来那么爽,很容易就写出语法错误,这对于有些人是一段痛苦的经历。从VHDL强大的抽象能力和强类型来看,这玩意比verilog更像软件,而verilog更像电路。VHDL的rtl更像是一种人为的定义,而verilog的rtl才更像是与电路的对应。

在用VHDL的时候,遇到状态机,就定义一下类型type state is (stat1, stat2 ...),这个stat1、stat2只是不同的符号,这个很不电路啊。我们经常使用的std_logic、std_logic_vector,遇到与数字比较要conv_integer一通,这个真的很不电路。VHDL写代码的确很啰嗦,代码长度远胜于verilog。看来看去,明显还是verilog直接,那就是电路,不绕弯子。

verilog强大的仿真功能,相比之下VHDL的仿真功能弱爆了。verilog这么多年的市场占有率远胜于VHDL,基本可以认为VHDL快被淘汰了,除了一些以前的设计需要支持以及很多学校还是以VHDL教学,基本用的很少了。

学习HDL的设计,很多时候是要搞清楚RTL里实际电路和代码的对应。其实,对于verilog,也只要知道assign在rtl里肯定是组合逻辑(当然你带反馈除外,不过绝对不建议带反馈这么去写),而always里综合为组合逻辑和时序逻辑的条件,这些其实并不难。VHDL这一点倒也类似,区别不大。顺便说一句,三段式和一段式的本质差别在于三段式下状态和动作完全同时,而一段式下状态比动作快一拍。至于其他的网络上说法的各种扯淡,不用理会,都什么时代了,编译器(还没到综合阶段)如果连组合电路和时序电路都不能很好的整理出来并优化的,还好意思在世面上丢人现眼?

综上所述,我现在还是觉得verilog比较适合初学了,甚至于学了verilog再去学VHDL作用不大。但是verilog很是灵活,这本是我之前觉得在学习verilog之前应该先学习VHDL的原因。但现在,我觉得,在学习verilog之前,还是先学习原理图设计吧,只是原理图设计之后的VHDL阶段没太多必要。