网上有太多的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阶段没太多必要。

VHDL和verilog应该先学哪个?的更多相关文章

  1. FPGA的“可编程”使你迷惑吗?

    http://www.alteraforum.com.cn/showtopic-7791.aspx FPGA的“可编程”使你迷惑吗?   任何一个硬件工程师对FPGA都不会陌生,就好比C语言对于软件工 ...

  2. VHDL生成的ngc文件被verilog的工程调用的问题

    1. 问题的提出 工程a是一个soft core,用VHDL写的,综合的时候去掉了"Add I/O buffers" ,并将-iob(Pack I/O Registers into ...

  3. 对Verilog 初学者比较有用的整理(转自它处)

    *作者: Ian11122840    时间: 2010-9-27 09:04                                                              ...

  4. 基于VHDL利用PS2键盘控制的电子密码锁设计

    基于VHDL利用PS2键盘控制的密码锁设计 附件:下载地址 中文摘要 摘 要:现代社会,人们的安全意识正在不断提升.按键密码锁由于其具有方便性.低成本等特征,还是大有用武之地的.但是通常的按键密码锁开 ...

  5. Verilog HDL设计规范及经验谈(转载)

    1. 规范很重要      工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件还是硬件),不按照规范走几乎是不可实现的.逻辑设计也是这样:如果不按规范做的话,过一个月后调试时发现 ...

  6. verilog学习五点经验分享

    1.规范很重要工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件还是硬件),不按照规范走几乎是不可实现的.逻辑设计也是这样:如果不按规范做的话,过一个月后调试时发现有错,回头再看 ...

  7. Verilog与SystemVerilog编程陷阱:怎样避免101个常犯的编码错误

    这篇是计算机类的优质预售推荐>>>><Verilog与SystemVerilog编程陷阱:怎样避免101个常犯的编码错误> 编辑推荐 纠错式学习,从"陷阱 ...

  8. 【第一季】CH04_FPGA设计Verilog基础(一)Enter a post title

    [第一季]CH04_FPGA设计Verilog基础(一) 4.1 Verilog HDL 代码规范 u 项目构架设计 项目的构架用于团队的沟通,以及项目设计的全局把控 u 接口时序设计规范 模块和模块 ...

  9. verilog 介绍

    Verilog HDL Verilog HDL是在C语言的基础上发展起来的一种硬件描述语言,语法较自由.VHDL和Verilog HDL两者相比,VHDL的书写规则比Verilog HDL烦琐一些,但 ...

随机推荐

  1. Selenium+Python进行web自动化测试(Demo+API)

    Selenium官方网站 http://selenium-python.readthedocs.io/ 配置使用环境 下载相应的浏览器驱动, Firefox 是默认的 本文以 chrome 为主 ,放 ...

  2. Java经典编程题50道之四十三

    一个偶数总能表示为两个素数之和. public class Example43 {    public static void main(String[] args) {        f();   ...

  3. linux中权限对文件和目录的作用

    chmod 755 a.txt 文件: r:读取文件内容(cat more head tail) w:编辑,新增,修改文件的内容(vi,echo) 不包括删除文件:原因是只能对文件内容进行修改,而在l ...

  4. AJAX跨域完全讲解

    AJAX跨域完全讲解 今天在慕课网上学习了AJAX跨域完全讲解:https://www.imooc.com/learn/947 我在收集AJAX面试题的时候其实就已经有过AJAX跨域的问题的了,当时候 ...

  5. 在Ubuntu上安装PHPStudy组件

    phpStudy for Linux (lnmp+lamp一键安装包) phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Tengine/Lighttpd/IIS ...

  6. Five nines

    Five nines, commonly taken to mean "99.999%", may refer to: 高可用  High availability of serv ...

  7. Spring MVC处理(下周完善)

    http://www.cnblogs.com/xiepeixing/p/4244574.html http://blog.csdn.net/kobejayandy/article/details/12 ...

  8. 6.1 MSI/MSI-X Capability结构

    PCIe设备可以使用MSI或者MSI-X报文向处理器提交中断请求,但是对于某个具体的PCIe设备,可能仅支持一种报文.在PCIe设备中含有两个Capability结构,一个是MSI Capabilit ...

  9. FusionWidgets DrawingPad图

    1.数据源 DrawingPad.xml: <?xml version="1.0" encoding="UTF-8"?> <chart bgC ...

  10. C#中各种计时器 Stopwatch、TimeSpan

    1.使用 Stopwatch 类 (System.Diagnostics.Stopwatch)Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 St ...