文档介绍:EDA技术实用教程
第5章
VHDL设计进阶
第5章 VHDL设计进阶
教学内容:
  数据对象
  VHDL设计实例及其语法内涵
  顺序语句归纳
  并行赋值语句讨论
  IF语句概述 
*  仿真延时
*  VHDL的RTL表述
教学要求:
通过对VHDL电路示例分析学习,进一步了解用VHDL表达和设计电路的方法,更深入理解VHDL语言现象和语句规则的特点。
数据对象DATA OBJECTS VHDL语言中,可以赋予一个质的对象就称为数据对象或客体。 数据对象主要包括以下三种: 常量(CONSTANT) 变量(VARIABLE) 信号(SIGNAL)
常数就是对某一常数名赋予一个固定的值。
定义一个常数主要是为了使设计实体中的某些量易于阅读和修改。通常在程序开始前进行赋值,该值的数据类型在说明语句中说明。常数的数据类型和赋值定义后,在程序中不能改变,是全局量。
常数定义的一般表述如下:
CONSTANT 常数名:数据类型:= 表达式;
例如:
CONSTANT FBT : STD_LOGIC_VECTOR := "010110" ;
-- 标准位矢类型
CONSTANT DATAIN : INTEGER := 15 ; -- 整数类型
常数(CONSTANT)
常量的可视性规则:常量使用范围取决于它被定义的位置
常量定义语句所允许的设计单元有程序包、实体、结构体、块、进程和子程序。
变量只能在进程和子程序中用,是一个局部量,不能将信息带出对它做出定义的当前设计单元。变量的赋值是理想化数据传输,其赋值是立即生效的,不存在任何的延时行为(与信号不同)。
定义变量的一般表述: VARIABLE 变量名: 数据类型[:= 初始值];
例如:
VARIABLE a : INTEGER RANGE 0 TO 15 ;
VARIABLE d : STD_LOGIC ;
变量赋值语句: 目标变量名:=表达式
赋值语句“:=”右边的表达式必须与目标变量具有相同的数据类型,这个表达式可以是一个运算表达式也可以是一个数值。变量赋值语句左边的目标变量可以是单值变量,也可以是变量的集合。
如:位矢量类型的变量
VARIABLE x,y : INTEGER RANGE 15 DOWNTO 0 ;
VARIABLE a,b : STD_LOGIC_VECTOR(7 DOWNTO 0) ;
x := 11 ;
y := 2 + x ; -- 运算表达式赋值,y 也是实数变量
a := b
a (0 TO 5) := b (2 TO 7) ;
变量(VARIABLE)
变量作为局部量,其适用范围仅限于定义了变量的进程或子程序的顺序语句中
信号是电子电路内部硬件连接的抽象。它可以作为设计实体中的并行语句模块间交流信息的通道。信号及其相关的延时语句明显地体现了硬件系统的特征。
信号定义语句的格式为:
SIGNAL 信号名: 数据类型[:= 初始值] ;
信号赋值语句表达式为:
目标信号名<= 表达式;
SIGNAL a,b,c,y,z: INTEGER;
...
PROCESS (a,b,c)
BEGIN
y <= a + b ;
z <= c – a ;
y <= b ;
END PROCESS ;
信号(SIGNAL)
信号的使用和定义范围是实体、结构体和程序包。
在进程和子程序中不允许定义信号。
符号“<=”表示赋值操作,即将数据信息传入。数据信息传入时可以设置延时过程,这与器件的实际传播延时十分接近。因此信号值的代入采用“<=”代入符,而不是像变量赋值时那样用“:=”。
但信号定义时初始赋值符号“:=”,即仿真的时间坐标是从赋初始值开始的。
信号SIGNAL 变量VARIABLE
基本用法用于作为电路中的信号连线用于作为进程中局部数据存储单元
适用范围在整个结构体内的任何地方都能适用 只能在所定义的进程中使用
行为特性在进程的最后才对信号赋值立即赋值
表5-1 信号与变量赋值语句功能的比较
进程中的信号与变量赋值语句
变量赋值:局部特征,延时为零[局部的、暂时性的数据对象]
信号赋值:全局特性,有某种延时。(实体单元间数据传输载体)
(6)信号赋值和变量赋值分别使用不同的赋值符号“<=”和“:=”,信号类型和变量类型可以完全一致,也允许两者之间相互赋值,但要保证两者的类型相同。
信号与变量的区别
(1)信号赋值至少有δ延时,而变量赋值没有延时。
(2)信号除当前值外有许多相关的信息,而变量只有当前值。
(3)进程对信号敏感而对变量不敏感。