过程处理的区别是什么?

时间:2015-09-01 10:08:18

标签: vhdl

请解释我五,请问,

之间的真正区别
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;

在同一架构中使用。 upd:在一个过程中使用两个信号的差异,以及每个信号的单独过程

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

取决于"我的代码"如果a和b同时上升,则行为可能存在差异。在组合过程中,您知道代码将在b代码之前运行,但是当您将流程拆分为两个时,您将不再了解订单。如果两个代码块共享某些资源,这可能会有所不同。例如,如果一个正在写入共享变量而另一个正在读取。在这种情况下,您不知道是否会读取旧值或新值。