对于process,有一个很疑惑的地方。
书上说,仿真器对进程中的各语句自上至下地进行处理。当进程所有语句执行完毕,或者中途碰到WAIT语句时,该进程执行结束,信号代入过程最后被执行。代入同样应该按顺序自上至下地执行。
接着给出来一个这样的例子。
process (A, B, C, D) is
begin
D <= A;
X <= B + D;
D <= C;
Y <= B + D;
end process;
在这个进程中,X和Y的最后代入值都是B + C,因为像这种在一个进程中对对某信号有两次代入要取最后一个。
在一些网页上面看到。这么一个例子(同步整形电路)
process(clk)
begin
if clk'event and clk='1' then
x<=din;
y<=x;
end if;
dout<=x and (not y);
end process;
说在进程中,信号不是在改变值之后立即变化的,其他语句使用的还是该信号的旧值(未执行进程时的值),所以假设y=0,那么在时钟的上升沿:
如果din="1"小于一个时钟宽:则有x=1,y=0(虽然进程中改变了值,但不会立即被使用),则有dout=x and (not y)=1 and (not 0)=1;