Вывод защелки VHDL с использованием процедуры - PullRequest
0 голосов
/ 03 июня 2019

Я ожидаю, что следующий код просто сгенерирует два элемента И, но ворота процедуры получат защелку на выходе. В моем исходном коде удаление (комментирование) прямого пути избавляет от защелки, но я не смог изолировать это.

Что вызывает эту защелку и как ее избежать?

Обратите внимание, что это чисто комбинаторная схема без if с, которая обычно связана с выводом защелки.

Я использую Vivado 2018.3 на Linux Mint 19.

Редактировать 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

...