VHDL进程中多IF语句赋值优先级问题咨询
VHDL进程内多IF语句赋值的优先级问题
核心结论
当A=0且B=2时,第二个IF语句的赋值会生效,最终C会被赋值为'1'。你仿真得到第一个IF生效的结果,大概率是仿真场景设置有误,或者代码存在未提及的其他逻辑影响。
优先级规则说明
VHDL进程内的信号赋值遵循顺序执行、延迟更新的逻辑:
- 进程内的语句严格按书写顺序依次执行;
- 每次信号赋值不会立即改变信号当前值,只是把赋值目标和待赋数值存入该信号的驱动更新队列;
- 当进程执行完毕(或遇到
wait语句挂起)时,所有信号的驱动更新队列中的最终值才会同步生效; - 同一进程内对同一信号的多次赋值,后面的赋值会直接覆盖前面的更新队列内容,因此最后一次赋值拥有最高优先级。
规范定义出处
该规则在IEEE 1076(VHDL官方标准)的进程执行模型章节中有明确规定:进程的顺序执行阶段,信号赋值仅修改对应信号驱动源的未来值;当进程进入挂起状态时,所有信号的驱动源才会将预定值更新到信号实际值。同一驱动源(单个进程内的赋值属于同一驱动源)对同一信号的多次赋值,后续赋值会覆盖之前的预定值。
内容的提问来源于stack exchange,提问作者Lars Mathisson
相关产品推荐
相关产品推荐

