【发布时间】:2014-05-14 20:06:07
【问题描述】:
我正在努力学习 VHDL 并努力学习它的一些基础知识。问题如下:
Process 语句被描述为包含顺序运行的代码(一行接一行)。我想问为什么不能在流程语句中运行并发代码(意味着所有行并行执行)。其次,如果流程语句包含顺序代码,它如何建模,例如,三个触发器同时并发,例如,
--内部流程声明
Q1 <= D1;
Q2 <= Q1;
Q3 <= Q2;
【问题讨论】:
我正在努力学习 VHDL 并努力学习它的一些基础知识。问题如下:
Process 语句被描述为包含顺序运行的代码(一行接一行)。我想问为什么不能在流程语句中运行并发代码(意味着所有行并行执行)。其次,如果流程语句包含顺序代码,它如何建模,例如,三个触发器同时并发,例如,
--内部流程声明
Q1 <= D1;
Q2 <= Q1;
Q3 <= Q2;
【问题讨论】:
顺序与评估语句的顺序有关,而不是分配生效的时间。
VHDL 仿真周期
信号分配不会立即生效,它们被安排在当前或未来的时间,并且在当前模拟周期中对信号事务敏感的所有进程都在分配生效之前完成。 (而在 VHDL 中,所有内容都转化为等效的块层次结构、过程和函数调用以进行仿真。)
当所有当前活动的进程完成模拟时,除非在当前模拟时间有事件,否则我们将下一个模拟周期称为下一个模拟周期增量循环。
执行对信号事务敏感的每个过程,并对相应的投影输出波形进行任何进一步的信号分配。每个信号的当前仿真时间在队列中只有一个“槽”。
通过这种方式,没有任何进程撞击移动目标。一次只执行一个进程,直到所有进程都完成执行后,信号分配才会生效。这模拟了并发性,当包含顺序语句的进程按顺序执行时模拟并行执行。
Q1 <= D1; 等赋值等价于Q1 <= D1 after 0 ns;,表示当前模拟时间。如果进程中的一系列顺序语句包含在当前仿真时间对同一信号的后续分配并且分配的值不同,则第二个分配将替换投影输出波形中的第一个分配。
当在当前仿真时间没有为信号安排更多事件时,仿真时间将提前到任何预测输出波形队列推进仿真时间中任何事务时间的最早时间。
当没有更多队列事件时,模拟时间将提前到 Time'HIGH(可能的最高模拟时间)并且模拟将停止。
还可以通过控制允许模拟运行多长时间的实现或通过执行严重级别为 FAILURE 或实现定义的停止模拟的严重级别阈值的断言语句来停止模拟。
【讨论】: