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