FPGA 第五-六章:VHDL主要描述语句


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[标号] ;

文章作者: Mat Jenin
文章链接: http://matjenin.xyz
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Mat Jenin !
  目录