2.2 VHDL程序语法规则
VHDL语言与其他高级语言一样,编写程序时也要遵循一定的语法规则。下面介绍VHDL的语言要素及其规则。
1. 标识符
VHDL标识符分为短标识符和扩展标识符两类。其中短标识符由VHDL87版本规定,在此基础上,VHDL93版本进行了扩展,提出了扩展标识符。
(1)短标识符短标识符由26个大小写英文字母、数字0~9以及下画线“_”中的字符构成,首字符必须是英文字母,“_”前后必须有英文字母或数字,不分大小写,且VHDL定义的保留字或关键字不能用作标识符。多个标识符间用“,”隔开。例如:
Mux21a, mux21a, mux21_a
(2)扩展标识符
扩展标识符由反斜杠界定,反斜杠内除了可以包含26个大小写英文字母、数字0~9以及下画线“_”外,还允许包含图形符号、空格符、关键字或保留字,且扩展标识符区分大小写。例如:
\Mux21a\, \mux21a\, \21mux_a\, \21_mux_a\
注意\Mux21a\和\mux21a\不同。
2. 数据对象
数据对象是指程序中可以被赋值的载体。VHDL的数据对象有常数(constant)、信号(signal)、变量(variable)和文件(files)四种类型,前三种属于可综合的数据对象,第四种是为传输大量数据而定义的一种数据载体,仅在行为仿真时使用。VHDL的数据对象在使用前必须说明。
1)常数
常数为全局量,相当于电路中的恒定电平,如gnd和vcc。常数说明的一般格式如下:
constant常数名表: 数据类型[: =表达式];
例如:
constant bus: bit_vector :="01011"; constant bus_width: integer :=8;
常 数 一 般 要 赋 初 始 值 , 主 要 用 于 在 entity 、 architecture 、package、process、procedure、function中保持静态数据,以改善程序的可读性,并使修改程序容易。
2)信号
信号具有全局性,主要用于在entity、architecture和package中定义端口或内部连线,在元件间起互联作用;或作为一种数据容器,以保留历史值或当前值。信号传输过程具有延迟特性。信号说明的一般格式如下:
signal信号名表: 数据类型[: =表达式];
其中表达式用于为信号赋初值,通常不建议采用,初值仅在仿真时有用,在实际综合时将被忽略。信号的赋值采用如下格式:
目标信号名<=表达式;
例如:
signal count: bit_vector (3 downto 0); count <=count+1;
信号的赋值既可以采用整体赋值,也可以采用部分赋值,例如:
注意信号的赋值不是立刻发生的,需要经过一定的延时,具体延时取决于所用FPGA的物理性质,即器件的固有延时。仿真时,仿真模拟器会附加一个仿真器的最小分辨时间δ,δ延时后执行赋值操作。
3)变量
变量属于局部量,只能在进程和子程序(函数、过程)中使用,用于计算或暂存中间数据。变量说明的一般格式如下:
variable变量名表: 数据类型[: =表达式];
变量赋值采用如下格式:
目标变量名 : =表达式;
举例如下:
信号与变量作为VHDL电路设计中经常要用到的数据对象,都与一定的物理对象相对应,相当于组合电路中门与门之间的连线,以及连线上的信号值,但是两者之间也有许多不同之处,使用时应当特别注意。主要表现在以下四点:
(1)物理意义不同:信号是全局量,可以作为模块间的信息载体&