顺序信号赋值语句的一般格式为: 信号名 <= [transport | inertial] 波形{,波形}; 波形 ::= 值表达式 [after 时间表达式] transport的意义为传输延迟,inertial的意义为惯性延迟。缺省时默认为惯性延迟。 赋值符号左边必须是信号名,但不能是端口声明中指定为in的信号。右边表达式中可以出现任意对象类,但不能出现端口声明中指定为out的信号。 例: B <= A; -- 惯性延迟,无时间延迟子句,即δ延迟 D <= C after 5 ns; -- 传输延迟,指定延迟时间 Clock <= '0', '1' after 1 ns, '0' after 2 ns, '1' after 3 ns, '0' after 4 ns, '1' after 5 ns; -- 激励波形的一种描述形式。 (1) 传输延迟与惯性延迟 VHDL支持两种延迟模式: 传输延迟(transport delay):输出端响应输入端的微小变化; 惯性延迟(inertial delay):输入端信号保持一定时间,输出端才有响应。VHDL规定如果不加声明,默认该宽度为延迟时间。 例:(图2.7) Y <= not X after 5 ns; Y <= transport not X after 5 ns;
(2) 信号的延时赋值 假设一个进程中有下面的顺序信号赋值语句, 现在我们研究其执行过程。 A <= B after 5 ns; B <= A after 5 ns; 两个语句左边信号均延迟5 ns 赋值,当前值不变。右边表达式中信号的值均为当前值。因而,在5 ns时刻,A= '1', B= '0'。 在10 ns时刻,A= '0', B= '1'。依此类推。其结果波形如图2.8所示。
设当前信号值为:A= '0', B= '1'。设当前时刻为0时刻,在执行第一个语句时得到A在5 ns后的值为 '1',当前时刻A的值仍然为 '0'。当执行第2个语句时,要将A当前的值赋给B,得到B在5 ns后的值。因为A当前值仍为 '0', 所以B在5 ns后的值也是 '0'。当模拟时钟走到5 ns时,就得到两个信号在5 ns时刻的当前值:A= '1', B= '0'。这时,用同样的方法,得到10 ns时的值:A= '0', B= '1'。 (3) 无时间子句── δ延迟 B <= A; A <= B; VHδL规定,未指定延迟时间的信号赋值语句,都有一个默认的延迟时间,相当于 B <= A after δ; A <= B after δ; δ是一个时间的无穷小量;信号赋值须经过 δ 时间延迟。 例如:当前值为A= '0', B= '1',则 δ 后,A= '1', B= '0'。 δ是一个虚拟的时间,相对于模拟时钟是无穷小。模拟时如果有的语句显式指定了延迟时间,有的没有指定,在执行未指定延迟时间的语句时,模拟时钟保持不动,而在模拟时钟时刻t的基础上增加一个或多个δ时间,通常记为t+δ,t+2δ,…。δ的规定是为了解决信号赋值语句的并行性问题,δ延迟就相当于零延迟。
|