我对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),似乎它们是并行的。)
是的。简单的。多谢。
请问,变量如何更新?它是否也是顺序的但不遵守规则(1)。
@vipin编号。变量会立即更新。