VHDL的并行行为
VHDL的并行行为
在VHDL中,结构体的内部没有规定语句的次序,执行的次序仅由对语句中的敏感信号发生的事件决定,且语句是同时执行产生其并行性。
并行幅值语句 选择信号赋值语句 复杂赋值语句
并行赋值语句
对象 = 表达式
每当表达式的信号值变化时执行该语句。每个表达式至少有一个敏感信号,每当敏感信号改变其值时,这个信号赋值语句就执行。
在所有的并行语句中,两个以上的并行赋值语句在字面上的顺序并不表明它们的执行顺序,例如下面的两个结构体在功能上是等价的。
例14:
ENTITY exe IS
PORT(a1,a2:IN BIT; b1,b2:OUT BIT);
END exe; 实体
ARCHITECTURE exe_arc1 OF exe IS
BEGIN
b1 = a1 AND a2;
b2 = NOT a1 OR a2;
END exe_arc1; 结构体1
ARCHITECTURE exe_arc2 OF exe IS
BEGIN
b2 = NOT a1 OR a2;
b1 = a1 AND a2;
END exe_arc2; 结构体2
--------------------------------------------------------------------------------
选择信号赋值语句 回页首
它们的每一个赋值语句都需要给出一个表达式,同时给出与该表达式的每个可能值相关联的信号,选择信号赋值语句的一般形式如下:
WITH 表达式 SELECT
对象 = 信号1 WHEN 分支1 ,
信号2 WHEN 分支2 ,
┇
信号n WHEN 分支n ;
用一个典型的四路数据选择器的VHDL程序说明WITH一般形式的用法,实体产生的符号如图8-6所示。
例15:四选一数据选择器
ENTITY sels IS
PORT(d0,d1,d2,d3:IN BIT;
s :INTEGER RANGE 0 TO 3;
out1 :OUT BIT);
END sels;
ARCHITECTURE sels_arc OF sels IS
BEGIN
WITH s SELECT
out1 = d0 WHEN 0,
d1 WHEN 1,
d2 WHEN 2,
d3 WHEN 3;
END sels_arc;
此例是一个六输入端口和一个输出端口的模块,四个输入是逻辑类型,两个输入是整数类型,程序对s敏感,判断s值后将d0、d1、d2或d3送到输出out1。
注:选择信号S提供四种选择,因此应是两位二进制代码,因此用粗线表示。
--------------------------------------------------------------------------------
复杂赋值语句
例16:
仍以四路数据选择器为例,图8-7示出此例的四输入数据选择器的符号,四输入数据选择器的第二个VHDL程序如下:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY mux4 IS
PORT(I0,I1,I2,I3,A,B:IN std_logic;
Q :OUT std_logic);
END mux4;
ARCHITECTURE mux4_arc OF mux4 IS
SIGNAL sel :INTEGER ;
BEGIN
Q =I0 AFTER 10 ns WHEN sel= 0 ELSE
I1 AFTER 10 ns WHEN sel= 1 ELSE
I2 AFTER 10 ns WHEN sel= 2 ELSE
I3 AFTER 10 ns ;
sel =0 WHEN A= ‘0’ AND B= ‘0’ ELSE
1 WHEN A= ‘1’ AND B= ‘0’ ELSE
2 WHEN A= ‘0’ AND B= ‘1’ ELSE
评论