我有一个关于VHDL的基本问题。
考虑以下过程:
process(Clk)
begin
if(rising_edge(Clk)) then
a <= data_in;
b <= a;
c <= b;
data_out <= c;
end if;
end process;
上述过程充当延迟寄存器,其中data_in在4个时钟周期之后被输出到data_out。
根据我的理解,这是因为信号是并行分配的。但是,为什么在一个称为顺序的过程中的语句呢?
例如:
process(Clk)
begin
if(rising_edge(Clk)) then
a <= b or c;
a <= b and c;
end if;
end process;
在上面的过程中,"a"从第二个语句中获取值,我理解它是如何以与第一个过程不同的顺序工作的。
请帮忙。
实际上非常简单:VHDL进程中的所有语句都是按顺序从上到下执行的,没有例外。然而,
-
信号分配算子(
<=
(的左手边不取其新值,直到进程(以及所有其他进程(暂停(要么触底,要么命中等待语句(和 -
如果你再次分配给一个信号(如第二个例子(,最后一个执行的赋值将覆盖以前的赋值。
现在你知道了,在你的脑海中模拟以上两个过程,你会发现它们的行为就像你说的那样。(第一个例子中的语句不是并行执行的。但由于上面的(1(,它们似乎是并行的。(