VHDL闩锁推断使用过程

时间:2019-06-03 08:59:20

标签: vhdl vivado

我希望以下代码可以简单地生成两个AND门,但是该过程的门在输出处会得到一个锁存器。在我的原始代码中,删除(注释)直接路径会摆脱闩锁,但我无法隔离它。

是什么原因导致此闩锁,如何避免?

请注意,这是一个纯组合电路,没有if,并且通常与闩锁推断相关。

我正在Linux Mint 19上使用Vivado 2018.3。

编辑1:将直接路径放在process语句中可以摆脱闩锁。

编辑2:合成后,闩锁不再存在,因此(可能)不会引起问题。问题仍然是为什么首先要生成它。

library IEEE;
use IEEE.std_logic_1164.all;

entity mcve is
    port (
        a, b : in  std_logic;
        o    : out std_logic_vector(1 downto 0)
    );
end entity;

architecture rtl of mcve is

    procedure and_proc (signal pa, pb : in std_logic; signal po : out std_logic) is
    begin
        po <= pa and pb;
    end procedure;

begin

    o(0) <= a and b;
    and_proc(a, b, o(1));

end architecture;

Two AND gates and a latch

0 个答案:

没有答案