文档介绍:在系统可编程技术
第10讲
VHDL语言的数据类型
VHDL数据对象(Data Objects)
Constant width: integer := 7;
Constant Vcc: REAL:=;
Constant D2:Std_Logic_Vector(width Downto 0):= ”0000”;
不能在程序中改变;
增强程序的可读性,便于修改程序;
常量的使用范围取决于其定义位置,可在Library、Entity、Architecture、Process中进行定义,其有效范围也相应限定。
1、常数(Constant)
定义格式为:
Constant 常数名:数据类型:=表达式;
2、信号
信号数据对象,代表电路内部线路,其在元件之间起互连作用,没有方向性,可给它赋值,也可当作输入。
定义格式为:
Signal 信号名:数据类型[:=设定值];
如:
Signal A : Std_logic_vector(3 Down to 0) := “0000”;
注意:设定的初始值在综合时没有用,只是在仿真时在开始设定一个起始值。
信号赋值语句的语法格式为:
目标信号名<=表达式(设定值);
A <= “1010”
VHDL数据对象(Data Objects)
3、变量
变量是一个局部量,用于对中间数据的临时存储,并不一定代表电路的某一硬件,没有物理意义。
定义格式为:
Variable 变量名:数据类型[:=设定值];
如:Variable a: integer := 0;
变量赋值语句的语法格式为:
目标变量名:= 表达式(设定值);
如: a := b and c;
VHDL数据对象(Data Objects)
信号、变量、常数对比
一、定义
Signal clk: std_logic;
Variable data: std_logic_vector(7 downto 0);
Constant width: integer :=7 ;
二、赋值方式
clk <= ‘1’; (非立即)
data := “1010”; (立即)
三、定义区域
信号:实体、结构体、程序包
变量:进程、子程序
常数:实体、结构体、程序包、块、进程、子程序
四、适用范围
信号:实体、结构体、程序包
变量:定义了变量的进程、子程序的顺序语句中
常数:视其定义的位置而定
若常数定义在实体中,适用范围是实体所对应的所
有结构体。
若常数定义在结构体中,适用范围就是本结构体。
信号、变量、常数对比
信号赋值(非立即)
信号和变量赋值区别举例
Architecture abc of example is
signal tmp:std_logic;
Begin
process(a,b,c)
begin
tmp<=a;
x<=c and tmp;
tmp<=b;
y<=c and tmp;
end process;
End abc;
变量赋值(立即)
Architecture abc of example is
Begin
process(a,b,c)
variable tmp:std_logic;
begin
tmp:=a;
x<=c and tmp;
tmp:=b;
y<=c and tmp;
end process;
End abc;
执行结果:x=c and b
y=c and b
执行结果:x=c and a
y=c and b
VHDL数据类型
1、逻辑数据类型
(1)布尔代数(Boolean)型
定义位置:在std库的standard程序包中进行定义。
取值:FALSE,TRUE
(2)位(Bit)
定义位置:在std库的standard程序包中进行定义。
取值:0,1
(低电平,高电平)
(3)位矢量(Bit_Vector)
定义位置:在std库的standard程序包中进行定义。
Signal A: bit_vector(0 to 7);
Signal B: bit_vector(7 downto 0);
A<=“00001010”;
B<=“00001010”;
VHDL数据类型
位矢量是基于“位”数据类型的数组
A(7)=0 A(6)=1 A(5)=0 A(4)=1 A(3)=0 A(2)=0 A(1)=0 A(0)=0
B(7)=0 B(6)=0 B(5)=0 B(4)=0 B(3)=1 B(2)=0 B(1)=1 B(0)=0
(4)标准逻辑型(Std_Logic )
定义位置:在IEEE库的std_logic_1164程序包中进行定义
VHD