VHDL的语句特点
并行语句 顺序语句
体现电路硬件的特点:各元件/信号相互影响,同时发生变化
体现设计人员的思路:现象的因果关系、局部与整体的关系
并行语句
模拟结构体中电路硬件的变化特点
结构体中的任何语句都是并行语句;
并行语句的种类有:
赋值类语句; 数据流描述 (逻辑函数的运算)
元件类语句; 结构描述 (逻辑符号的连接)
进程语句; 行为描述 (电路功能的流程)
并行语句的执行特点:
所有语句在同一时刻执行;
在仿真时刻零点执行;
在任一输入信号出现变化时执行;
仿真虚拟过程(对并行语句的执行过程):
仿真开始---执行全部并行语句(耗时?t);
执行过程中不改变信号值;
执行完毕,根据执行结果为信号赋值;
检查上述过程有没有输入信号发生变化;
若有变化,则立即开始下一次执行;
(重复上述过程,可能n次,占用时间n?t);
直到电路进入稳定状态;
若一次执行后没有任何输入信号发生变化,则等待
输入信号的变化,或程序中与时间有关的语句发生作用。
若经过足够多次执行(例如上千次),电路仍然不能
稳定,则提示错误,并随机停留在某一状态;
赋值类语句:数据流描述
以基本信号为基础,描述信号间的相互关系(函数关系);
也称为“寄存器传输描述方式”:认为各信号随时存放于
各寄存器中,信号的变化只是经过适当操作后在寄存器之间
的传递;
数据流描述方式的结构体形式:
Architecture d of 实体名 is
类型说明;
常量说明;
信号说明;
函数定义;
begin
赋值类语句; (并行语句,为信号赋值,表达信号输
入/输出关系)
end d;
直接赋值语句:
信号名<= 信号值(表达式);
要点:
赋值式双方应为相同类型;
当采用一种类型时,表达式涉及的运算应与该类型相容;
实际数字电路中,信号的类型通常为“STD_LOGIC”,对
应的运算通常为逻辑运算;
例:
2-4译码器(采用赋值语句)
library ieee;
use ieee.std_logic_1164.all;
entity kdecoder24 is
port (a: in std_logic_vector (1 downto 0);
f: out std_logic_vector (3 downto 0) );
end kdecoder24;
architecture d of kdecoder24 is
begin
f(0) <= not a(1) and not a(0);
f(1) <= not a(1) and a(0);
f(2) <= a(1) and not a(0);
f(3) <= a(1) and a(0);
end d;
条件赋值语句:
信号名<=表达式1 when 布尔表达式1 else
……
表达式n when 布尔表达式n else
表达式(n+1);
要点:
可以用于表达信号的控制传输;通常采用多个2选1数
据选择器形成串接形式;
布尔表达式采用的运算只能是关系运算,结果为“true”
时执行when之前的表达式,结果为“false”的时候执行else 之
后的语句;
<= 既是赋值符号,又是小于等于符号,在使用时应注意
场合和意义;
例:4选1数据选择器(采用条件赋值语句)
library ieee;
use ieee.std_logic_1164.all;
entity kmux4_1 is
port (a: in std_logic_vector (1 downto 0);
d: in std_logic_vector (3 downto 0);
f: out std_logic);
end kmux4_1;
architecture d of kmux4_1 is
begin
f<= d(0) when a="00" else
d(1) when a="01" else
d(2) when a="10" else
d(3);
end d;
选择赋值语句:
with 选择表达式 select
信号名<=表达式 when 选择值;
……
表达式 when others;
要点:
选择赋值语句根据选择表达式当前所取的不同选择值,
对信号进行不同赋值;
语句应用与条件赋值语句类似,用于信号的控制传输;
通常采用多路数据选择器方式实现;
例
4位质数检测器(采用选择赋值语句)
library ieee;
use ieee.std_logic_1164.all;
entity prime is
port (n: in std_logic_vector (3 downto 0); f: out std_logic);
end prime;
architecture d of prime is
begin
with n select
f<= '1' when "0001",
'1' when "0010",
'1' when "0011"|"0101"|"0111",
'1' when "1011"|"1101",
'0' when others;
end d;
时间延迟语句
数据在传输过程中必然出现时间延迟,为了表达信号的
延时,可以在赋值语句中加上对于延迟时间的说明;
信号名<=表达式 after k ns;
各信号之间的传输时间可以表达门电路的延迟,也可以
表达传输线的延迟,可以根据实验的结果来不断修改;
在基本门电路的设计时,可以为上升沿和下降沿分别设
定不同的延迟时间;
after语句只是对电路物理性质的一种模拟描述,可以方
便于仿真检查,但对于电路综合不会产生任何影响;
作业:
1 采用直接赋值语句为2-4线译码器进行设计;
2 采用选择赋值语句设计4选1MUX;
要求:程序应包括:库和包集合说明、实体和结构体。
对所设计器件进行功能仿真,以波形图形式表明该器件能够
实现设计要求。