网上有太多的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. [记录]MySQL读写分离(Atlas和MySQL-proxy)

    MySQL读写分离(Atlas和MySQL-proxy) 一.阿里云使用Atlas从外网访问MySQL(RDS) (同样的方式修改配置文件可以实现代理也可以实现读写分离,具体看使用场景) 1.在跳板机 ...

  2. Bootstrap表单验证

    主要用过两个: jqBootstrapValidation: https://github.com/ReactiveRaven/jqBootstrapValidation bootstrapValid ...

  3. Windows Server 2016-图形化备份域控制器

    上边几章节我们补充了有关Windows Server 2016系统层面的相关内容,本章切回Active Directory正题,继续围绕AD域相关内容进行不断梳理补充.Windows Server B ...

  4. c++ 回调函数使用

    普通回调 #include<stdio.h> void printWelcome(int len) { printf("welcome -- %d\n", len); ...

  5. MIPS中有关于分支指令及跳转寻址

    分支指令 分支指令包含该指令,和两个操作数,以及跳转的分支地址,该地址是相对于下一条指令的相对地址 分支指令占6位   操作数1占5位     操作数2占5位     分支指令16位 例如 bne  ...

  6. C++ 监测磁盘空间

    硬盘管理器 头文件 HardDiskManager.h : #if _MSC_VER > 1000 #pragma once #endif #include <windows.h> ...

  7. Python中if __name__=="__main__" 语句在调用多进程Process过程中的作用分析

    2018年2月27日 于创B515 引言 最近准备学习一下如何使用Python中的多进程.在翻看相关书籍.网上资料时发现所有代码都含有if __name__=="__main__" ...

  8. hive: insert数据时Error during job, obtaining debugging information 以及beyond physical memory limits

    insert overwrite table canal_amt1...... 2014-10-09 10:40:27,368 Stage-1 map = 100%, reduce = 32%, Cu ...

  9. Caused by: org.xml.sax.SAXParseException; lineNumber: 28; columnNumber: 81;

    1.错误描述 严重: Exception sending context initialized event to listener instance of class org.springframe ...

  10. SQL语句异常导致项目报错

    1.错误描述 严重:Exception occurred during processing request:Statement Callback;SQL[   ];OALL8处于不一致状态; nes ...