系统可编程技不 第10讲 VHDL语言的数据类型
在系统可编程技术 第10讲 VHDL语言的数据类型
VHDL数据对象( Data Objects) 1、常数( Constant) 定义格式为: Constant常数名:数据类型:=表达式; Constant width: integer =7 Constant Vcc: REAL: =5.0 Constant D2: Std Logic Vector(width downto 0):=0000" 不能在程序中改变; 增强程序的可读性,便于修改程序; 常量的使用范围取决于其定义位置,可在 Library、 Entity、 Architecture、 Process中进行定义,其有效范围也相应限定
VHDL数据对象(Data Objects) Constant width: integer := 7; Constant Vcc: REAL:=5.0; Constant D2:Std_Logic_Vector(width Downto 0):= ”0000”; ◆ 不能在程序中改变; ◆ 增强程序的可读性,便于修改程序; ◆ 常量的使用范围取决于其定义位置,可在Library、Entity、 Architecture、Process中进行定义,其有效范围也相应限定。 1、常数(Constant) 定义格式为: Constant 常数名:数据类型 :=表达式;
VHDL数据对象( Data Objects) 2、信号 信号数据对象,代表电路内部线路,其在元件之间起互连 作用,没有方向性,可给它赋值,也可当作输入。 定义格式为: signa信号名:数据类型[:=设定值]; 如 Signal A: Std log ic vector (3 Down to 0):=0000"; 信号赋值语句的语法格式为: 目标信号名<=表达式(设定值) A<=“1010″ 注意ε设定的初始值在综合时没有用,只是在仿真时在开始设定一个起始值
2、信号 信号数据对象,代表电路内部线路,其在元件之间起互连 作用,没有方向性,可给它赋值,也可当作输入。 定义格式为: Signal 信号名:数据类型[:=设定值]; 如: Signal A : Std_logic_vector(3 Down to 0) := “0000”; 注意:设定的初始值在综合时没有用,只是在仿真时在开始设定一个起始值。 信号赋值语句的语法格式为: 目标信号名<=表达式(设定值); A <= “1010” VHDL数据对象(Data Objects)
VHDL数据对象( Data Objects) 3、变量 变量是一个局部量,用于对中间数据的临时存储,并不 定代表电路的某一硬件,没有物理意义。 定义格式为: Var iable变量名:数据类型[:=设定值]; 如ε Variable a: i nteger:=0; 变量赋值语句的语法格式为: 目标变量名:=表达式(设定值); 如 aa and C
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 二、赋值方式 CIk<=1 (非立即) data:=“1010”;(立即) 三、定义区域 信号:实体、结构体、程序包 变量:进程、子程序 常数:实体、结构体、程序包、块、进程、子程序
信号、变量、常数对比 一、定义 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 Architecture abc of example is signal tmp: std logic Begin Begin process (a, b,c) process (a, b, c) variable tmp: std logic; begin begin tmp<=a; tmp =a; X<=c and tmp; X<=c and tmp; tmp<=b: tmp:=b; y<=c and tmp; y<=c and tmp; end process; end process; End abc End abc; 执行结果:x= c and b 执行结果:x= c and a y=c and b y=c and b
信号赋值(非立即) 信号和变量赋值区别举例 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)布尔代数( Boolean)型 定义位置:在std库的 standard程序包中进行定义 取值: FALSE,TRUE (2)位(Bit) 定义位置:在std库的 standard程序包中进行定义。 取值:0, (低电平,高电平)
VHDL数据类型 1、逻辑数据类型 (1)布尔代数(Boolean)型 定义位置:在std库的standard程序包中进行定义。 取值:FALSE,TRUE (2)位(Bit) 定义位置:在std库的standard程序包中进行定义。 取值:0,1 (低电平,高电平 )
VHDL数据类型 (3)位矢量( Bit vector) 定义位置:在std库的 standard程序包中进行定义 位矢量是基于“位”数据类型的数组 Signal A: bit vector o to 7) Signal B: bit vector (7 downto O) A<=“00001010”; B<=“00001010; A(7)=0A(6)=1A(5)=0A(4)=1A(3)=0A(2)=0A(1)=0A(0)=0 B(7)=0B(6)=0B(5)=0B(4)=0B(3)=1B(2)=0B(1)=1B(0)2=0
(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
VHDL数据类型 (4)标准逻辑型( Std logic) 定义位置:在IEEE库的std_ logic_1164程序包中进行定义 使用这类数据信号,必须包含下面两条声明语句: Library IEEE Use IEEE std logic 1164. all
(4)标准逻辑型(Std_Logic ) 定义位置:在IEEE库的std_logic_1164程序包中进行定义 VHDL数据类型 使用这类数据信号,必须包含下面两条声明语句: Library IEEE; Use IEEE.std_logic_1164.all;