Wired-OR не синтезируется - PullRequest
0 голосов
/ 26 июня 2018

Я хочу иметь два комбинационных процесса, управляющих одним сигналом в проводном или в стиле. Каждый процесс может выводить значение «Z» или «1» в сигнал, и происходит глобальное снижение до «L».

Синтез Vivado 2017.1 «оптимизирует» мой код, чтобы получить постоянный 0 для выходного порта. Почему это происходит? Как мне обойти эту проблему?

Код:

library ieee;
use ieee.std_logic_1164.all;

entity test is
    port(
        input_0 : in    std_logic;
        input_1 : in    std_logic;
        output  : out   std_logic
    );
end entity test;

architecture rtl of test is
    signal s_output : std_logic;
begin
    output  <=  to_X01(to_bit(s_output));

    process(input_0)
    begin
        s_output    <=  'Z';

        if input_0='1' then
            s_output    <=  '1';
        end if;
    end process;

    process(input_1)
    begin
        s_output    <=  'Z';

        if input_1='1' then
            s_output    <=  '1';
        end if;
    end process;

    s_output    <=  'L';
end architecture rtl;

Результат синтеза:

WARNING: [Synth 8-3917] design test has port output driven by constant 0

enter image description here

...