流程处理有什么不同

What's the difference in process handling

像我五岁一样解释一下,

之间的真正区别是什么
process (a,b)
begin
if rising_edge (a) then
--my code here
end if;
if rising_edge (b) then
--my code here
end if;
end process;

process (a)
begin
if rising_edge (a) then
--my code here
end if;
end process;
process (b)
begin
if rising_edge (b) then
--my code here
end if;
end process;

在同一架构中使用。 更新:在一个进程中使用两个信号的区别,以及每个信号的单独进程

如果您只是在谈论语言是如何定义的(换句话说,模拟器做什么或应该做什么),那么答案是 'very little'。作用域不同——例如,第一个示例中的两个代码块可以共享一个普通变量,仅此而已。第一个示例中的过程会触发 a 或 b 上的任何事件,然后依次测试 a 和 b。对于第二个示例中的 2 个进程,这是独立发生的。如果您的进程包含任何等待语句,答案会有所不同,但在此示例中不允许这样做。

我认为您缺少的是模拟和综合是不同的。合成器不会执行模拟来决定描述做什么或应该做什么。这是一个完全静态的过程,它依赖于代码中的启发式和模板搜索,这意味着它只会理解语言的一个子集。它不会理解您的第一个示例,因为有描述时钟硬件的标准化方法,而这不是其中之一。

Paebbels - 如果有任何合成器可以处理第一个示例,我会感到非常惊讶;随时告诉我我错了。当两个不同的进程写入同一个共享变量时,XST 和 Quartus 显然都可以推断出双时钟内存元素,但我还没有尝试过。

根据 "my code",如果 a 和 b 同时上升,行为可能会有所不同。在组合过程中,您知道 a 代码将 运行 在 b 代码之前,但是当您将过程分成两个时,您不再知道顺序。如果两个代码块共享一些资源,这可能会有所不同。例如,如果一个正在写入共享变量而另一个正在读取。在那种情况下,您不知道将读取旧值还是新值。