1、数据类型
位数据类型BIT和位矢量类型BIT_VECTOR
位数据类型BIT的取值范围是逻辑位‘1’和‘0’。位矢量类型BIT_VECTOR是BIT的数组类型。
SIGNAL X,Y:BIT;
SIGNAL A,B:BIT_VECTOR(3 DOWNTO 0);
标准逻辑位数据类型STD_LOGIC和标准逻辑位矢量类型STD_LOGIC_VECTOR
B : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ;
SIGNAL A :STD_LOGIC_VECTOR(1 TO 4);
整数类型INTEGER
使用整数时,综合器要求必须用RANGE子句为所定义的数限定范围,根据所限定的范围决定信号或变量的二进制的位数。
SIGNAL Q : INTEGER RANGE 15 DOWNTO 0;
--综合器自动将Q综合成4条信号线构成的总线方式信号:Q(3) 、Q(2)、Q(1)、Q(0)。
布尔数据类型BOOLEAN
布尔量不属于数值,不能用于计算,只能用于比较和判断,而且布尔类型是在数据比较中默认产生的。
TYPE BOOLEAN IS (FALSE,TURE);
无符号型(UNSIGNED)、有符号型(SIGNED)
注意:STD_LOGIC和STD_LOGIC_VECTOR类型的数据可以进行逻辑运算和关系运算,却不能直接进行算术运算;
而UNSIGNED和SIGNED类型的数据可以进行算术运算和关系运算,但不能进行逻辑运算。
这些数据类型使用前必须加入如下语句:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_ARITH.ALL;
示例:
VARIABLE var : UNSIGNED(0 TO 10) ;
SIGNAL sig : UNSIGNED(5 DOWNTO 0) ;
VARIABLE var :SIGNED(0 TO 10); --var(0)是符号位,代表负数
其他预定义类型 (综合中不对应任何电路结构,主要用于仿真)
字符(CHARACTER)类型
实数(REAL)类型也称浮点数
字符串(STRING)类型
VARIABLE string_v : STRING (0 TO 7 ) ;
string_v := “01100101" ;
2、顺序语句
赋值语句:
信号赋值和变量赋值区别
赋值 变量 := 表达式;全局量(程序包、实体、结构体) ; 变量代表电路单元内部的操作,代表暂存的临时数据;
赋值 信号 <= 表达式; 局部量 (进程、子程序); 信号代表电路单元、功能模块间的互联,代表实际的硬件连线。
赋值行为不同:变量赋值是立即发生的,而信号赋值有延时。
CASE语句:
CASE语句属于顺序语句,必须放在进程PROCESS中使用。
CASE 表达式 IS
When 选择值 => 顺序语句;
When 选择值 => 顺序语句;
...
When OTHERS=> 顺序语句;
END CASE ;
-----例子
CASE sel IS
WHEN 0 => z1<=“010” --当sel=0时,执行对z1的赋值
WHEN 13 => z2<=‘1’ ; -- 当sel为1或3时选中
WHEN 4 To 72 => z3<=‘011’; -- 当sel为2、4、5、6或7时选中
WHEN OTHERS => z4<=‘111’ ; -- 当sel为8~15中任一值时选中
END CASE ;
PROCESS语句:
PROCESS语句结构的一般表达格式如下:
[进程标号: ] PROCESS [ ( 敏感信号参数表 ) ] [IS]
[进程说明部分]
BEGIN
顺序描述语句
END PROCESS [进程标号];
并置操作符 &
操作符&表示将操作数或数组合并起来形成新的数组。不是与的意思。
IF语句
IF 条件句 THEN
顺序语句
END IF;
其他语句:LOOP语句、NEXT语句(跳转功能)、EXIT语句(跳出循环)
3、 实例
D触发器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY DFF1 IS
PORT (CLK : IN STD_LOGIC;
D : IN STD_LOGIC;
Q : OUT STD_LOGIC );
END;
ARCHITECTURE bhv OF DFF1 IS
SIGNAL Q1 : STD_LOGIC;
BEGIN
PROCESS (CLK,Q1)
BEGIN
IF CLK'EVENT AND CLK = '1' -----上升沿检测常用表达式:CLK’EVENT AND CLK=‘1’
THEN Q1 <= D;
END IF;
END PROCESS;
Q <= Q1;
END bhv;