VHDL词法基础(精)
● 2.2.2 变量(VARIABLE) 变量是暂存数据的量。 变量说明语句的格式是: VARIABLE 变量名{,变量名}:数据类型 [:=初始值]; 例如: VARIABLE count: INTEGER RANGE 0 TO 99 : =0 VARIABLES result: std_logic:='0';—变量赋初值 VARIABLES x,y,z : integer; VARIABLES count: integer range 0 TO 255 :=10; 变量赋值语句格式为: 目标变量名 := 表达式;
赋值语句中的表达式必须与目标变量具有相同的数据类型。
● 变量的使用规则 变量是一个 局部量 ,它只用于进程和子程序。变量必须 在进程或子程序的说明区域中加以说明。 变量赋值是 直接的、非预设的 ,它在某一时刻仅包含一 个值。变量的赋值立即生效,不存在延时行为。 变量常用在实现某种运算的赋值语句中。变量赋值和初始 化赋值符号用“:=”表示。 变量不能用 常量所赋值和定义的数据类型应一致。
常量一旦赋值就不能再改变。若要改变常量值,必须要 改变设计,改变实体中的常量说明,然后重新编译。 常量必须在程序包、实体、结构体或进程的说明区域中 对常量的标识符、类型、常量值进行指定。定义在程序包中 的常量由所在的实体或结构体调用。定义在实体内的常量仅 在实体内使用,定义在进程内的常量仅在进程内使用。
--只能是字母、数字、下划线
--不能有连续两个下划线 --关键字(保留字)不能用于标识符 --最后字符不能是下划线
2.1.2 扩展标识符
扩展标识符规则:
扩展标识符是VHDL’93版增加的标识符书写规则: (1) 扩展标识符用反斜杠来定界。例如:\multi_screens\, \eda_centrol\等都是合法的扩展标识符。 (2) 允许包含图形符号、空格符。例如:\mode A, \$100\, \p%name\等。 (3) 反斜杠之间的字符可以用保留字。例如: \buffer\, \entity\, \end\等。 (4) 扩展标识符的界定符两个斜杠之间可以用数字打头。如: \100$\, \2chip\, \4screens\等。 (5) 扩展标识符中允许多个下划线相连。例如: \Four_screens\, \TWO_Computer_sharptor\等。 (6) 扩展标识符区分大小写。例如: \EDA\ 与\eda\不同。 (7) 扩展标识符与短标识符不同。例如:\COMPUTER\ 与 Computer不同。
第2章 VHDL词法基础
2.1 标识符 2.2 数据对象 2.3 数据类型 2.4 类型转换
2.5 词法单元
2.6 运算符与操作符 2.7 属性
2.1 标识符
标识符规则是 VHDL 语言中符号书写的一般规则。 不仅对电子系统设计工程师是一个约束,同时也为 各种各样的EDA工具提供了标准的书写规范,使之 在综合仿真过程中不生产生歧义,易于仿真。
2.2 数据对象
在VHDL中,凡是可以赋予一个值的客体称为数据对象。常 用的数据对象为常量、变量 、信号和文件,其中文件类型是 VHDL’93标准中新通过的。 对象说明的一般书写格式为: 对象类别 标识符表:子类型标识[:= 初值]; 对象说明举例: CONSTANT T1,T2:time :=30ns,--常量说明 VARIABLE SUM:read; --变量说明 SIGNAL CLOCK:bit; --信号说明 FILE input:Text IS IN “STD_INPUT” --文件说明
VHDL语言有两个标准版: VHDL’87版和VHDL’93 版。VHDL’87版的标识符语法规则经过扩展后,形 成了VHDL’93版的标识符语法规则。前一部分称为 短标识符,扩展部分称为扩展标识符。VHDL’93版 含有短标识符和扩展标识符两部分。
2.1.1 短标识符
短标识符规则:
短标识符由字母、数字以及下划线字符组成,且具有以下特 征要求: ● 第一个字符必须是字母; ● 最后一个字符不能是下划线; ● 不允许连续两个下划线; ● 在标识符中大、小写字母是等效的。
2.2.1 常量
● 常量(CONSTANT)
常量是指在设计描述中不会变化的值。在VHDL描述中,一般
用常量名代替数值。 常量说明语句的一般格式为: CONSTANT 常量名{,常量名}:数据类型 := 取值; 例:8位寄存器宽度指定: CONSTANT width:integer:=8; 设计实体的电源供电电压指定: CONSTANT vcc:real:=5.0; 某一模块信号输入/输出的延迟时间: CONSTANT delay:time:=100ns;
● VHDL中的注释文字一律为 2个连续的连接线“ --‖,可以出 现在任一语句后面,也可以出现在独立行;
● VHDL的保留字(关键字)不能用于标识符;
例如:如下标识符是合法的: tx_clk Three_state_Enable sel7D HIT_1124 如下标识符是非法的: _ tx_clk 8B10B large#number link_ _bar select rx_clk_ --标识符必须起始于字母
对象的赋值规则: 信号和变量可以连续的赋于不同的值。 常量只在它被说明时赋值,在整个器件 工作期间值不变化。试图对常量多次赋 值是错误的。 文件可以用参数向子程序传递数据,通 过子程序对文件进行读和写操作。文件 不可以通过赋值来更新文件的内容,文 件参数没有模式。
可用函数调用的方法给对象赋初值。 例如: CONSTANT Bus-number:Integer :=My_function(True,6); 如果在同一个对象说明语句中,对多个同一类型的对象指定初 始值,则多个对象同时取得了这一指定值。 信号和变量的默认值。当信号和变量没有指定初始值或没有给 信号变量赋值时,即信号和变量的值在对象说明语句中默认时, 信号变量的取值称为默认值。一般地,若变量为字符型变量则 取最大值;若变量、信号为数值型变量,则取初始值,默认值 为‘0’