VHDL 中的并发和顺序语句

concurrent and sequential statements in VHDL

我有一个关于 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。

据我了解,这是因为信号是并行分配的。但是为什么一个进程里面的语句叫sequential?

例如:

process(Clk)
begin
if(rising_edge(Clk)) then
  a <= b or c;
  a <= b and c;
end if;
end process;

在上面的过程中,'a' 从第二个语句中获取值,我明白,与第一个过程不同,它是如何以顺序方式工作的。

请帮忙。

其实很简单:一个VHDL进程里面的所有语句都是顺序执行的,从上到下,无一例外。然而,

  1. 信号赋值运算符的左侧(<=)不 取它的新值直到进程(和所有其他进程)有 暂停(触底或等待语句)和

  2. 如果你再次分配给一个信号(如你的第二个例子)最后一个 执行的赋值会覆盖之前的赋值。

现在你知道了,在你的脑海中模拟以上两个过程,你会发现它们的行为就像你说的那样。 (第一个示例中的语句不是并行执行的。但是由于上面的 (1),它们似乎是并行的。)