Warm tip: This article is reproduced from serverfault.com, please click

其他-VHDL中的并发和顺序语句

(其他 - concurrent and sequential statements in VHDL)

发布于 2020-12-04 14:44:23

我对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”从第二条语句中获取值,据我所知,它与第一过程不同,它是如何以顺序方式工作的。

请帮忙。

Questioner
vipin
Viewed
1
Matthew Taylor 2020-12-05 00:01:10

这实际上非常简单:VHDL进程中的所有语句都按顺序从上到下顺序执行,没有例外然而,

  1. 信号分配运算符<=的左侧在进程(和所有其他进程)暂停(达到最低点或等待语句)之前不采用其新值, 并且

  2. 如果你再次分配信号(如第二个示例),则最后执行的分配将覆盖先前的分配。

现在你已经知道,在脑海中模拟上述两个过程,你将看到它们的行为与你说的一样。(你的第一个示例中的语句不是并行执行的。但是由于上面的(1),似乎它们是并行的。)