VHDL语言元素
2012-03-12 09:18阅读:
http://blog.csdn.net/skyyunmi/archive/2007/04/20/1572343.aspx
VHDL语言元素
2.1
VHDL语言的客体
2.2
VHDL语言的数据类型
2.3
VHDL数据类型转换
2.4
VHDL词法规则与标识符
2.1 VHDL语言的客体
VHDL语言中,可以赋予一个质的对象就称为客体。客体主要包括以下三种:变量(VARIABLE)、常量(CONSTANT)、信号(SIGNAL)。
2.1.1 常量(CONSTANT)(常数)
定义一个常数主要是为了使设计实体中的某些量易于阅读和修改。常数说明就是对某一常数名赋予一个固定的值。通常在程序开始前进行赋值,该值的数据类型在说明语句中说明。
常数说明语句格式为:
CONSTANT 常数名:数据类型 := 表达式;
例如:
CONSTANT Vcc : REAL := 5.0;
CONSTANT Fbus : BIT_VECTOR :=
“1011”;
CONSTANT Delay : TIME := 10ns;
注:常量是一个恒定不变的值,一旦做了数据类型和赋值定义,它在程序中就不能再改变。
2.1.2 变量(VARIABLE)
变量只能在进程和子程序中用,是一个局部量,不能将信息带出对它做出定义的当前设计单元。与信号不同,变量的赋值是理想化数据传输,其赋值是立即生效的,不存在任何的延时行为。变量定义语句的格式为:
VARIABLE 变量名 : 数据类型 : 约束条件 := 初始值;
例如:
VARIABLE n: INTEGER RANGE0 TO 15 := 2;
VARIABLE a:
INTEGER;
变量赋值语句的格式为:
目标变量名 := 表达式;
赋值语句 “:=”
右边的表达式必须与目标变量具有相同的数据类型,这个表达式可以是一个运算表达式也可以是一个数值。变量赋值语句左边的目标变量可以是单值变量,也可以是变量的集合。
例如定义变量:
VARIABLE a,b := REAL;VARIABLE x,y := BIT_VECTOR(0 TO 7);
2.1.3 信号(SIGNAL)
信号是电子电路内部硬件连接的抽象。它可以作为设计实体中的并行语句模块间交流信息的通道。信号及其相关的延时语句明显地体现了硬件系统的特征。
信号定义语句的格式为:
SIGNAL 信号名:数据类型:约束条件 := 表达式;--定义时候使用
例如:SIGNAL gnd :BIT := ‘0’;
SIGNAL data :STD_LOGIC_VECTOR (7 DOWNTO 0);
信号赋值语句表达式为:
目标信号名 <= 表达式;
--赋值时候使用
符号 “<=”
表示赋值操作,即将数据信息传入。数据信息传入时可以设置延时过程,这与器件的实际传播延时十分接近。因此信号值的代入采用“<=”代入符,而不是像变量赋值时那样用“:=”。但信号定义时初始赋值符号“:=”,即仿真的时间坐标是从赋初始值开始的。
信号赋值语句举例:X<= y;
a <= ‘1’;
s1 <= s2 AFTER 10 ns;
--注意:变量和信号都必须先定义,后赋值。注意赋值符“<=”和 “:=”的差别。
信号与变量的区别:
信号和变量是VHDL中重要的客体,他们之间的主要区别有:
·信号赋值至少要有δ延时;而变量赋值没有。
·信号除当前值外有许多相关的信息,如历史信息和投影波形;而变量只有当前值。
·进程对信号敏感而不对变量敏感。
·信号可以是多个进程的全局信号;而变量只在定义他们的顺序域可见(共享变量除外)。
·信号是硬件中连线的抽象描述,他们的功能是保存变化的数据值和连接子元件,信号在元件的端口连接元件。变量在硬件中没有类似的对应关系,他们用于硬件特性的高层次建模所需要的计算中。
2.2 VHDL语言的数据类型
在对VHDL的客体进行定义时,都要指定其数据类型。VHDL有多种标准的数据类型,并且允许用户自定义数据类型。在VHDL语言语义约束中,对类型的要求反映在赋值语句的目标与源的一致,表达式中操作的一致,子类型中约束与类型的一致等许多方面。
2.2.1 VHDL中预定义的数据类型(编程者可直接使用)
预定义类型在VHDL标准程序包STANDARD中定义,在应用中自动包含进VHDL的源文件,不需要USE语句显示调用。数据类型说明如下。
1.整数(INTEGER)
整数与数学中整数的定义相似,可以使用预定义运算操作符,如加“+”、减“-”、乘“×”、除“÷”进行算术运算。在VHDL语言中,整数的表示范围为-2147483647~2147483647,即从-(231-1)到(231-1)。2.实数(REAL)
在进行算法研究或实验时,作为对硬件方案的抽象手段,常常采用实数四则运算。实数的定义值范围为-1.0E+38~+1.0E+38。实数有正负数,书写时一定要有小数点。例如:-1.0,+2.5,-1.0E+38
3.位(BIT)
用来表示数字系统中的信号值。位值用字符‘0’或者‘1’(将值放在引号中)表示。与整数中的1和0不同,‘1’和‘0’仅仅表示一个位的两种取值。
位数据可以用来描述数字系统中总线的值。位数据不同于布尔数据,可以用转换函数进行转换。
4.位矢量(BIT_VECTOR)
位矢量是用双引号括起来的一组数据。例如:“001100”,X“00bb”。在这里位矢量前面的X表示是十六进制。用位矢量数据表示总线状态最形象也最方便,在VHDL程序中将会经常遇到。使用位矢量时必须注明位宽,即数组中元素个数和排列,例如:
SIGNAL s1:BIT_VECTOR(15 DOWNTO 0);
5.布尔量(