这应该是vhdl中的多驱动器错误

时间:2017-08-08 10:52:29

标签: vhdl fpga

考虑这个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;应该保护值不受信号gtequal的锁存。但是,由于这不是一个定时的过程,这不应该是信号gtequal的多个驱动程序的错误?

1 个答案:

答案 0 :(得分:4)

这不是多驱动器情况,因为您的信号由一个进程驱动(当然,除非您也从另一个进程驱动它们)。所以很好。也许,让您感到困惑的是,在同一个流程执行期间多次分配相同的信号。对于这个简短的回答,完整而详细的答案太复杂了。但为简单起见,如果仅使用简单信号分配(无after子句,无波形......),则最后一次分配将获胜。

原因是每次执行gt <= <value>指令时,<value>都不会立即分配给gt信号。相反,它被记录在模拟器存储器中的某处,作为在当前模拟步骤结束时分配给信号gt的值。并且在当前模拟步骤结束时,在所有进程执行并暂停在wait语句(或其敏感性列表,相当于wait语句)之后,模拟器更新信号带有记录值的gt

所以,如果你在同一个模拟步骤中执行:

gt <= '0';
...
gt <= '1';

第二个作业将覆盖第一个作业记录的值,gt将在模拟步骤结束时取值'1'