文章目录
前言
VHDL相对于Verilog HDL,给人最深刻的印象便是臃肿,掌握起来比较难。
本文摘自《FPGA之道》,学会站在巨人的肩膀上来对比学习二者。
VHDL与Verilog的比较
对于一个长期或者想要长期从事FPGA事业的工程师来说,只懂得一种硬件描述语言显然是不够的,这是由于不同项目的平台条件、环境因素以及合作模式等的不同所必然导致的。在前面的两个章节中,已经对目前FPGA开发上两种主流的硬件描述语言——VHDL与Verilog——进行了比较详细的基本语法介绍。那么在这一章节,为了能够让大家更加深入的理解和区分这两种语言,在编写或阅读代码时做到灵活切换,减少混淆,我们将从语法和语言两个方面对这两种语言的区别与联系进行一下简单的介绍。
语法比较
基本程序框架比较
VHDL基本程序框架共包括三个部分:library、entity、architecture,而Verilog基本程序框架中,只包含一个module部分。
简单的来说,VHDL中entity和architecture两部分的功能之和其实就相当于一个Verilog的module。只不过entity和architecture需要显式的去定义两者之间的对应关系,并且一个entity并不限于只有一个architecture,而module是一个接口和功能的结合体,本身就具有接口和功能两个属性。
除此以外,VHDL中具有library的声明部分,而Verilog没有,但是这并不是说Verilog语言不需要使用相应的work库、标准库、器件库或自定义库文件。这是因为Verilog在编程的时候不需要显式的去告诉编译器自己需要什么,而编译器会自动加载所有的库或者根据代码加载部分的库来进行编译。相比之下,VHDL在这方面做的更加的严谨、更加的高级,因为VHDL采用类似C语言的方式,只显式加载需要的库,而不建议一次性加载所有的库,虽然多加载一些无用的库文件也不会报错,但是这并不是一个好的代码编写习惯。
端口定义比较
VHDL中的端口类型有四种:in、out、buffer和inout ,相对应的Verilog中的端口类型只有三种:input、output和inout。它们的对应关系如下:
VHDL | Verilog |
---|---|
in | input |
out | - |
buffer | output |
inout | inout |
从上表可以看出,Verilog中的output端口的功能其实和VHDL中的buffer端口的功能相同,output端口的输出结果是可以在模块内部被引用的。当然了,可以在模块内部被引用,并不代表一定需要在模块内部引用,因此当内部代码没有使用输出端口的结果时,那么Verilog中的output和VHDL中的buffer其实也就相当于VHDL中的一个纯粹的out端口。
因此,相比于Verilog对端口类型的三个分类,VHDL中的四个分类略有冗余之嫌。
范围表示方法比较
VHDL中表示范围用关键字downto和to,而Verilog中使用“:”表示范围,两者的对应关系举例如下。在VHDL定义如下信号量,