请解释一下,我五岁了,有什么区别呢?
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:在一个进程中使用两个信号的差异,以及每个信号的独立进程。
发布于 2015-09-01 14:26:22
如果您只是在讨论语言是如何定义的(换句话说,模拟器做什么,或者应该做什么),那么答案就是“非常少”。范围是不同的--例如,第一个示例中的两个代码块可以共享一个普通变量,但仅此而已。您的第一个示例中的过程会触发a或b上的任何事件,然后依次测试a和b。对于第二个示例中的两个进程,这是独立的。如果您的流程包含任何等待语句,则答案将不同,但在本例中不允许这样做。
我认为你缺少的是模拟和合成是不同的。合成器不进行模拟来决定描述做什么或者应该做什么。这是一个完全静态的过程,它依赖于代码中的启发式和模板搜索,这意味着它将只理解语言的一个子集。它不会理解你的第一个例子,因为有一些标准的方法来描述时钟硬件,而这不是其中之一。
帕培尔-如果任何合成器能处理第一个例子,我会感到非常惊讶;请告诉我,我错了。当两个不同的进程写入同一个共享变量时,XST和Quartus显然都可以推断出双时钟内存元素,但我没有尝试过。
发布于 2015-09-01 15:40:44
根据“我的代码”,如果a和b同时上升,行为可能会有所不同。在组合的过程中,您知道a代码将在b代码之前运行,但是当您将进程分成两部分时,您就不知道顺序了。如果这两个代码块共享一些资源,这可能会产生不同的效果。例如,如果一个正在写入共享变量,而另一个正在读取。在这种情况下,您不知道旧的或新的值是否会被读取。
https://stackoverflow.com/questions/32328901
复制相似问题