并行语句是指能作为单独语句直接出现在结构体中的描述语句,所有的并行语句都是并发执行的,VHDL结构体中的并行语句主要有八种:
并行语句:
PROCESS语句结构的一般表达格式如下:
[进程标号: ] PROCESS [ ( 敏感信号参数表) ] [IS]
[进程说明部分]
BEGIN
顺序描述语句
END PROCESS [进程标号];
一个结构体中可以有多个进程语句,同时并行执行。进程之间的信息传递是通过信号来完成的。
注:信号的上升沿和下降沿
信号'event and 信号= '1'
rising_edge(信号)
信号'event and 信号= '0'
falling_edge(信号)
library ieee;
use ieee.std_logic_1164.all;
entity example is
port ( a : in std_logic;
b : in std_logic;
y : out std_logic);
end example;
architecture behave of example is
begin
p1:process(a,b)
variable comb : std_logic_vector (1downto 0);
begin
comb:= a&b;
case comb is
when "00" =>y<='0';
when "10" =>y<='0';
when "01" =>y<='0';
when "11" =>y<='1';
when others =>y<='X';
end case;
end process p1;
end behave;
块的应用就是将一个结构体分成若干个小的功能块,这种方式的划分只是形式上进行了改变,并不改变功能,主要目的是改善程序的可读性。
块标号 : BLOCK
接口说明
类属说明
BEGIN
并行语句
END BLOCK 块标号 ;
并发信号赋值语句的格式:赋值目标 <= 表达式
,结构体中的多条并发赋值语句是并行执行的。
条件信号赋值语句的表达方式如下:
赋值目标 <= 表达式1 WHEN 赋值条件1 ELSE
表达式2 WHEN 赋值条件2 ELSE
...
表达式n ;
注:有优先级之分
选择信号赋值语句的格式如下:
WITH 选择表达式 SELECT
赋值目标信号 <= 表达式1 WHEN 选择值1,
表达式2 WHEN 选择值2,
...
表达式n WHEN 选择值n;
选择信号赋值语句中也有敏感量,即关键字WITH旁边的选择信号表达式,每当选择表达式的值发生变化时,就启动此语句对各子句的选择值同时进行测试对比,没有优先级之分,若有满足条件的子句时,就将此子句表达式中的值赋给赋值目标信号。若选择条件不覆盖全部可能,编译会出错,因此,最后加”when others”。
注:
例:以4选1数据选择器为例
真值表:
s | y |
---|---|
00 | a |
01 | b |
10 | c |
11 | d |
library ieee;
use ieee.std_logic_1164.all;
entity example is
port ( a,b,c,d : in std_logic_vector(3 downto 0);
s : in std_logic_vector(2 downto 0);
y : out std_logic_vector(3 downto 0)
);
end example;
architecture behave of example is
begin
with s select
y<=a when "00",
b when "01",
c when "10",
d when "11",
"0000" when others;
end behave;
并行过程调用语句常用于获得被调用过程的多个并行工作的复制电路,主要用于结构体的并行处理语句或块语句中。并行过程调用语句书写格式非常简单:过程名 (参数表);
procedure 过程名(参数说明)
begin
功能描述语句
end procedure 过程名;
过程名 (参数表);
注:
Assert语句主要用于程序仿真、测试中的人机对话,给出一系列的警告或者错误信息。
书写格式为:
assert 条件[report 输出信息][severity 级别];
Generic 语句常用于不同层次之间的信息传递,例如在数据类型说明上用于位矢量长度、数组的位长以及器件的延时时间等参数的传递。
该语句主要用于行为描述方式,所涉及的数据除整数类型以外的数据类型不能进行逻辑综合。
使用generic语句易于使器件模块化和通用化。例如,在描述二输入与门的时候,输入与的上升沿和下降沿等参数不一致,为了简化设计,通常设计一个通用的二输入与门的模块化程序。该模块中的某些参数是待定的,在仿真或者逻辑综合的时候的,只要用generic语句将待定参数初始化后,就可以实现各种二输入与门的仿真或者逻辑综合。
元件例化语句用来指明结构体需要调用的元件、单元和模块等,并把调用来的元件、单元和模块正确的嵌入到高一层的结构体描述中。
其基本语法格式为:
COMPONENT 元件名
GENERIC (类属表);
PORT (端口名表);
END COMPONENT 文件名;
例化名 :元件名 [generic map (参数名 => 参数值,..]
port map([ 端口名 => ] 连接端口名,... );
生成语句的主要功能是能够进行复制,简化有规则设计结构的逻辑描述。
生成语句的语句格式有如下两种形式:for 和 IF
[标号:] For 循环变量 IN 取值范围 Generate
并行语句
End Generate [标号] ;
对于for语句的结构,主要用来描述设计中的一些有规律的单元结构。
**生成参数(循环变量)**是自动产生的,它是一个局部变量,根据取值范围自动递增或递减。取值范围的语句格式,有两种形式:
格式 | 意义 |
---|---|
表达式 TO 表达式 ; | 递增方式,如 1 TO 5 |
表达式 DOWNTO 表达式 ; | 递减方式,如 5 DOWNTO 1 |
其中的表达式必须是整数。
[标号:] IF 条件 Generate
并行语句
End Generate [标号] ;
对于if 语句的结构,主要用来描述设计中不规则的单元结构,如某些边界条件的特殊性。该语句中,若条件为真,则执行生成语句中的并行语句,若为假则不执行该语句。
两种格式都由四部分组成: