考虑这个VHDL代码:
process(a, b)
begin
equal <= '0'; --default
gt <= '0'; --default
if a=b then
equal <= '1';
end if;
if a>b then
gt <= '1';
end if;
end process;
所谓的默认&#39;应该保护值不受信号gt
和equal
的锁存。但是,由于这不是一个定时的过程,这不应该是信号gt
和equal
的多个驱动程序的错误?
答案 0 :(得分:4)
这不是多驱动器情况,因为您的信号由一个进程驱动(当然,除非您也从另一个进程驱动它们)。所以很好。也许,让您感到困惑的是,在同一个流程执行期间多次分配相同的信号。对于这个简短的回答,完整而详细的答案太复杂了。但为简单起见,如果仅使用简单信号分配(无after
子句,无波形......),则最后一次分配将获胜。
原因是每次执行gt <= <value>
指令时,<value>
都不会立即分配给gt
信号。相反,它被记录在模拟器存储器中的某处,作为在当前模拟步骤结束时分配给信号gt
的值。并且在当前模拟步骤结束时,在所有进程执行并暂停在wait
语句(或其敏感性列表,相当于wait
语句)之后,模拟器更新信号带有记录值的gt
。
所以,如果你在同一个模拟步骤中执行:
gt <= '0';
...
gt <= '1';
第二个作业将覆盖第一个作业记录的值,gt
将在模拟步骤结束时取值'1'
。