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