VHDL和Verilog都是硬件描述语言,在国内,Verilog应用相比较而言更多,因为它更加接近C语言比较容易学,很多人说VHDL难度高,但它的数字逻辑性更高同样的设计或许代码量更多点,却不太容易犯错,目前版本的VerilogHDL 和VHDL 在行为级抽象建模的覆盖面范围方面有所不同。一般认为Verilog 在系统级抽象方面要比 VHDL 略差一些,而在门级开关电路描述方面要强的。现在市面上VHDL的总结教程比较少,这个系列文章就将总结VHDL的入门知识点。
VHDL 语言的英文全名为Very HighSpeed Integrated Circuit Hardware Description Language,即超高速集成电路硬件描述语言。这里不多做更深入的介绍,直接进入正题。
-
VHDL的基本的语法
1、VHDL的标识符
VHDL的标识符可以是常数、变量、信号、端口、子程序或者参数的名字。标识符需要遵守一些法则,这些法则和Verilog区别不大,
1、比如必须为英文字母开头,
2、末字符不能为下划线。
3、不允许出现两个连续下划线。
4、标识符中不区分大小写字母。
5、VHDL 定义的保留子或称关键字,不能用作标识符。
6、VHDL 中的注释由两个连续的短线(–)开始,直到行尾。
2、标识符表示的几种数据对象
(1)、常数Constant
(2)、变量Variable
(3)、信号Signal
信号和变量的区别:信号赋值可以有延迟,变量只是当前值。信号可以看作是硬件的一根连线。
3、VHDL语言的数据类型
VHDL数据类型的定义非常严格,不同类型的数据类型不能直接带入,相同数据类型不同位长的也不能带入。
整数(Integer)
整数代表正整数、负数和零
实数(Real)
实数类型也类似于数学上的实数,或称浮点数
位(Bit)
在数字系统中通常采用一位来表示,取值只能是0或1
位矢量(Bit_Vector)
位矢量是用双引号括起来的一组位数据,使用位矢量必须
注明位宽。
例如:SIGNAL a:BIT_VEVCTOR(7to0)
布尔量(Boolean)
一个布尔量具有两个状态:“真”或“假”。布尔量不属于数值,因此不能用于运算,它只能通过关系运算符获得。一般这一类型的数据初始值总为FALSE.
字符(Character)
字符也是一种数据类型,字符类型通常用单引号引起来,如‘A’。字符类型区分大小写,如‘B’不同于‘b’。
字符串(String)
字符串是由双引号括起来的一个字符序列,也称字符矢量或字符串数组。常用于程序的提示和说明,如“STRING”等。
时间(Time)
时间是一个物理数据。完整的时间类型包括整数和单位两部分;整数与单位之间至少留一个空格,如55 ms,2 ns。在包集合STANDARD 中给除了时间的预定义,其单位为fs,ps,ns,us,ms,sec,min,hr。
自然数(Natural)和正整数(Positive)
自然数是整数的一个子类型,非负的整数,即为零和正整数。而Positive 只能为正整数。
4、IEEE 预定义标准逻辑位与矢量
在IEEE 库的程序包STD_LOGIC1164 中,定义了两个重要的数据类型, 即标准逻辑位STD_LOGIC 和标准逻辑矢量STD_LOGIC_VECTOR,使得STD_LOGIC 数据可以具有如下的9 种不同的值:
“U”—初始值
“0”—0
“Z”—高阻
“L”—弱信号0
“X ”—不定
“1”—1
“W”—弱信号不定
“H”—弱信号1
“_”—不可能情况
注意在使用该类型数据时,在程序中必须写出库说明语句和使用包集合的说明语句。
5、VHDL的语言结构
为了写出创建数字硬件的VHDL的代码,必须构建一个设计实体(design entity)。而这个设计实体包含三个部分,称作库组成(library part)、实体声明(entity declaration)和结构体声明(architecture declaration)
所谓库就是一个标准的逻辑库,包含各种定义,用来引用这个标准逻辑库中的定义,函数和过程,包含一个库组成和一个库子句,一般这样写
实体声明可以理解为数字电路的接口,或者外部的输入输出。
结构体是指数字电路的功能成份。
详细来讲:可以把实体成是一个数字电路的黑盒子,而它的声明是表达黑盒子的引脚,但内部的具体电路信号则是结构体,声明的也是具体的原理内容。
举例:
如图(a)就是设计的实体,声明的信号为ABCD以及F,而图(b)中A_B以及C_D则是结构体需要定义的信号。在基础的结构上VHDL和Verilog在这点上有很大的不同。
实体
结构体
没有回复内容