FPGA 第五~六章 VHDL主要描述语句
5 VHDL 顺序语句
顺序语句只能出现在进程PROCESS和子程序中,子程序包括函数FUNCTION和过程PROCEDURE。
5.1 赋值语句
有两种:
①. 信号赋值语句:符号$:=$,在进程结束时执行,并不是立即执行,
②. 变量赋值语句:符号$<=$,立即执行。
赋值目标:
①. 标识符
②. 数组单个元素
③. 数组多个元素
④. 块赋值:包括位置关联赋值 和 名字关联赋值
SIGNAL a,b,c,d : STD_LOGIC;
SIGNAL s : STD_LOGIC_VECTOR(1 TO 4);
VARIABLE e,f : STD_LOGIC;
VARIABLE g : STD_LOGIC_VECTOR(1 TO 2);
VARIABLE h : STD_LOGIC_VECTOR(1 TO 4);
(a,b,c,d) <= s ; --位置关联方式赋值
(3=>e,4=>f,2=>g(1),1=>g(2)) := h ; --名字关联方式赋值
5.2 流程控制语句
IF语句
CASE语句
CASE 表达式 IS
WHEN 条件表达式1 => 顺序处理语句1;
WHEN 条件表达式2 => 顺序处理语句2;
END CASE;
LOOP语句
①. 单个LOOP语句
②. FOR_LOOP语句
③. WHILE_LOOP语句
NEXT语句
主要用于LOOP语句的内部循环控制,有条件或无条件地跳出本次循环。
NEXT [循环标号][WHEN条件];
EXIT语句
EXIT语句是LOOP语句中使用的循环控制语句。执行EXIT语句,将结束循环状态,从LOOP语句中跳出。
EXIT [循环标号][WHEN条件]
5.3 WAIT语句
①. WAIT; --无限等待,一般不用
②. WAIT ON 信号表; --敏感信号量变化,激活运行程序
③. WAIT UNTIL 条件表达式; --信号发生变化,条件为真,激活运行程序
④. WAIT FOR 时间表达式; --时间到,运行程序继续执行
多条件WAIT语句:只要满足一个条件,结束挂起
5.4 子程序调用语句
①. 过程调用
过程名(参数表)
②. 函数调用
返回值=函数名(入口参数表)
5.5 返回语句
return; --用于过程
return 表达式; --用于函数
5.6 空操作语句
NULL语句是一种只占位置的空处理操作,执行到该句只是使程序走到下一条语句。
NULL;
5.7 其它语句和说明
预定义属性函数功能
只列举几个重要常见的:
①. EVENT:检测电平的沿
clock'EVENT AND clock ='1' --用于检测上升沿
clock'EVENT AND clock ='0' --用于检测下降沿
②. RANGE:对属性项目取值区间进行测试
...
SIGNAL range1 : IN STD_LOGIC_VECTOR(0 TO 7) ;
...
FOR i IN range1'RANGE LOOP
...
③. LENGTH:对数组的宽度或元素的个数进行测定
TYPE array1 ARRAY(0 TO 7) OF BIT ;
VARIABLE s : INTEGER ;
...
s := array1'LENGTH ; --s=8
...
④. 用户自定义属性
ATTRIBUTE 属性名 : 数据类型;
ATTRIBUTE 属性名 : OF 对象名 : 对象类型 IS 值;
6 并发语句
6.1 进程语句
可以和其他进程并发进行,存取信号;进程通信依靠信号。
6.2 块语句
只是一种并行语句的组合方式,使程序编排的更加清晰。
6.3 并行信号赋值语句
简单信号赋值语句
赋值目标 <= 表达式
条件信号赋值语句
信号量 <= 表达式1 WHEN 条件1 ELSE
表达式2 WHEN 条件2 ELSE
...
表达式N-1 WHEN 条件N-1 ELSE
表达式N;
选择信号赋值语句
WITH 选择表达式 SELECT
信号量 <= 表达式1 WHEN 选择值1,
表达式2 WHEN 选择值2,
...
表达式N WHEN 选择值N;
选择/条件信号赋值语句的比较:
①. 条件赋值语句有优先级的设定,而选择赋值语句没有;
②. 条件赋值语句的设定条件允许有重叠现象,而选择赋值语句没有。
过程调用语句
过程名(关联参量名);
元件例化语句
当电路中要使用已定义的功能模块时,可采用元件例化语句。
由两部分构成:
第一部分;组件定义(COMPONENT)
COMPONENT 组件名称
GENERIC(类属表);
PORT(组件端口名表);
END COMPONENT [组件名称];
第二部分:组件映像(PORT MAP)
例化名 : 组件名称 PORT MAP (
[端口名 =>]连接端口名, ...) ;
生成语句
格式有两种:
①. FOR GENERATE 结构
[标号:] FOR 循环变量 IN 取值范围 GENERATE
说明
BEGIN
并行语句
END GENERATE[标号] ;
②. IF GENERATE 结构
[标号:] IF 条件 GENERATE
说明
BEGIN
并行语句
END GENERATE[标号] ;