VHDL语言的基本语法解析
2、变量( Variable )
变量是一个局部变量,它只能在进程语句、函数语句和过程 语句结构中使用,用作局部数据存储。变量常用在实现某种算 法的赋值语句中。
一般格式:
VARIABLE 变量名:数据类型 约束条件:= 表达式;
例: VARIABLE x, y: INTEGER;
--定义x,y为整数变量
SIGNAL Y ,Z :BIT;
Y<=A(M) ;
--M是不可计算型下标表示
Z<=B(3) ;
--3是可计算型下标表示
C (0 TO 3)<=A (4 TO 7) ; -以段的方式进行赋值
C (4 TO 7)<=A (0 TO 3) ; -以段的方式进行赋值
二、VHDL语言的数据对象
1、常数( Constant )
常量的使用范围取决于它被定义的位置 :
(1)程序包中定义的常量具有最大的全局化特性,可以用在调 用此程序包的所有设计实体中;
(2)设计实体中定义的常量,其有效范围为这个实体定义的所 有的结构体;
(3)设计实体中某一结构体中定义的常量只能用于此结构体;
(4)结构体中某一单元定义的常量,如一个进程中,这个常量 只能用在这一进程中。
5,678,0,156E2(=15600) , 45_234_287(=45234287)
(2) 实数文字: 实数文字也都是十进制的数,但必 须带有小数点,如: 188.993, 88_670_551.453_909(=88670551.453909) ,
1.0,44.99E-2(=0.4499) ,1.335,0.0
?16#F.01#E+2ቤተ መጻሕፍቲ ባይዱ--( 十六进制数表示,等于 3841.00)
?8#377#
? --(与16#FF#,016#0FF#,2#11111111 都为255)
3、字符串型文字
字符是用单引号引起来的ASCII字符,可 以是数值,也可以是符号或字母,如:‘R' ,‘A',‘*',‘Z'。
而字符串则是一维的字符数组,须放在双 引号中。VHDL中有两种类型的字符串:文字 字符串和数位字符串。
元素,如:a(2) , b(n) 下标段名则用于指示数组型变量或信号的
某一段元素,其语句格式如下:
数组类型信号名或变量名(表达式1 [TO/DOWNTO 表达式2]);
如下是下标名及下标段名使用示例:
SIGNAL A ,B,C:BIT_VECTOR(0 TO 7) ;
SIGNAL M :INTEGER RANGE 0 TO 3 ;
VHDL语言要素
一、VHDL语言的基本语法
1、VHDL语言的标识符
VHDL中的标识符可以是常数、变量、信号、端口、子程序或参 数的名字。使用标识符要遵守如下规则:
标识符由字母(A…Z,a…z)、数字和下划线字符组成; 任何标识符必须以英文字母开头; 末字符不能为下划线; 不允许出现两个连续下划线; 标识符中不区分大小写字母; VHDL定义的保留字或称关键字,不能用作标识符; VHDL中的注释由两个连续的虚线(--)开始,直到行尾;
VARIABLE count: INTEGER RANGE 0 TO 255:=10; --定义计数变量范围
变量赋值语句的语法格式如下:
目标变量: =表达式;
(1) 赋值语句右方的表达式必须是一个与目标变量有相同 数据类型的数值。 (2) 变量不能用于硬件连线和存储元件。
(3) 变量的适用范围仅限于定义了变量的进程或子程序中。
(4) 若将变量用于进程之外,必须将该值赋给一个相同的 类型的信号,即进程之间传递数据靠的是信号。
[例]
VARIABLE x, y :REAL;
VARIABLE a, b: BIT_VECTOR(0 TO 7);
x:=100.0; y:=1.5+x;
--实数赋值,x是实数变量 --运算表达式赋值,y也是实数变量
a:=b; a:=”1010101”; --位矢量赋值,a的数据类型是位矢量 a(3 TO 6):=(‘1','1','0','1'); --段赋值
a(0 TO 5):=b(2 TO 7);
a(7):='0';
进制基数符号“数位字符串”
B:二进制基数符号,表示二进制数位0或1。 O:八进制基数符号。 X:十六进制基数符号(0~F) 。
例如:B“1_1101_1110” --二进制数数组,位矢数组长度是9
X“AD0” --十六进制数数组,位矢数组长度是12
4、下标名及下标段名 下标名用于指示数组型变量或信号的某一
[例]
_Decoder_1 --起始为非英文字母
3DOP
--起始为数字
Large # number --“#”不能成为标识符的构成符号
Date_ _bus
--不能有双下划线
Copper_ on
--最后字符不能为下划线 --关键字
2、VHDL语言的数字
2.1 数字型文字的值有多种表达方式,现列举如下: (1) 整数文字: 整数文字都是十进制的数,如:
常数是一个固定的值,主要是为了使设计实体中的常数更容 易阅读和修改。常数一旦被赋值就不能再改变。一般格式:
CONSTANT 常数名:数据类型:= 表达式; 例: CONSTANT fbus: BIT_VECTOR: = “01011001”-;-总线上数 据设备向量
CONSTANT dely: TIME: =25 ns; --输入/输出的延迟时间 常数所赋的值应与定义的数据类型一致。
数字前可加0,数字中间不能有空格
2.2 以数制基数表示的文字:
数制#基数#指数
数制和指数部分是用十进制数表示的数。指数部分 的数如果是 0可以省去不写。现举例如下:
?10#170#
--(十进制数表示,等于 170)
?2#1111_1110#
--(二进制数表示,等于 254)
?16#E#E1
--(十六进制数表示,等于 2#11100000# ,等于224)
(1)文字字符串
文字字符串是用双引号引起来的一串文字, 如: “ERROR”,“BOTH S AND Q EQUA TO L”,“X”,“BB$CC”
(2)数位字符串
也称数值字符串、位矢量,是预定义的数据 类型BIT的一维数组,它们所代表的是二进制、 八进制或十六进制的数组,其位矢量的长度 即为等值的二进制数的位数。