VHDL题目(高分求解)

来源:百度知道 编辑:UC知道 时间:2024/05/13 18:28:11
architecture Behave of Test is
signal x,y,z: Integer:=0;
begin
P1:process(x,y)
begin
x <= x+1 after 2 ns; y<= y+z after 3 ns;
end process P1;
P2:process(x)
begin
if (x mod 2)=0 then z<=z+x; end if;
end process P2;
end Behave;

仿真后:
y:0~8ns是0 9~11ns是2 12~16ns是8 17~19ns是20 20ns变成40。。。
请问为什么?为什么在9ns才变为2?12ns以后的值也想不通。望高手赐教,最好能详细分析,谢谢~

这段程序的关键之处在于区别信号驱动源Y上的惯性延迟和传输延迟,理解了这个,就知道Y为什么如此变化。
y<= y+z after 3 ns 属于惯性延迟,
y<= transport y+z after 3 ns 属于传输延迟,
这两个的区别能过仿真可以很明确的看出来。
至于惯性延迟和传输延迟分别会对信号驱动源产生什么样的影响,可以查查VHDL编程的书有关延迟的部分。

另外一些技术方面要注意的是:
首先明确X值的变化会触发P1和P2,Y的变化会触发P1,每次变化都会触发,都会对信号驱动源X和Y产生影响,要根据惯性延迟的规则去分析。
其次每次Z的赋值与X触发P2事件之间有一个δt延时,比如4ns时X变为2,但此时Z仍是0,在4+δtns时才变为2。

比如Y在9ns变为2,是因为6ns时X从2变到3触发了P1。
4ns时X从1变到2没有影响Y是因为Z的改变有δt延迟,Z还是0。
8ns时X从3变到4没有影响Y是因为此时Z还是2,由惯性延迟的性质,赋给Y的都是2,所以6ns时的老事项保留。

又比如为什么Y没有在15ns变为14,是因为在14ns时X从6变到7,触发了P1,此时给Y赋的是20,覆盖掉了12ns给Y赋14的事件。