【问题标题】:concurrent and sequential statements in VHDLVHDL 中的并发和顺序语句
【发布时间】: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”从第二个语句中获取值,我理解它是如何以顺序方式工作的,与第一个过程不同。

请帮忙。

【问题讨论】:

标签: vhdl


【解决方案1】:

其实很简单:VHDL 进程中的所有语句按顺序执行,从上到下,没有例外。然而,

  1. 信号赋值运算符的左侧 (&lt;=) 没有 取其新值,直到进程(和所有其他进程)具有 暂停(要么达到底部,要么达到等待语句)和

  2. 如果您再次分配给一个信号(如在第二个示例中)最后一个 执行的分配会覆盖之前的分配。

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

【讨论】:

  • 请问,变量如何更新呢?是否也有顺序但不遵守规则(1)。
  • @vipin No. 变量会立即更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多