CASE нечетная проверка четности

Я новичок в vhdl и пытаюсь написать vhdl нечетную проверку четности, используя Case в процессе. Когда я компилирую, ошибок нет, но форма волны выходного вектора для вывода по какой-то причине плоская. Что я делаю не так? Может ли кто-нибудь помочь мне с этим или указать мне правильное направление? Есть ли другой способ сделать это?

Вот мой код:

library ieee;
use ieee.std_logic_1164.all;

entity test3 is 
port (
    w, x, y, z  : in std_logic;
    g1_562      : out std_logic);       
end entity test3;

architecture sig of test3 is

signal inputs : std_logic_vector(3 downto 0);
signal outputs: std_logic;
begin  

process(inputs) is
begin
case inputs is
    when "0000" => outputs <= '1';
    when "0011" => outputs <= '1';
    when "0101" => outputs <= '1';
    when "0110" => outputs <= '1';
    when "1001" => outputs <= '1';
    when "1010" => outputs <= '1';
    when "1100" => outputs <= '1';
    when "1111" => outputs <= '1';
    when others => outputs <= '0';
    g1_562 <= outputs;  
end case;
end process;
end architecture sig;

Результат: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

но должно быть: 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1

Спасибо


person Mac    schedule 25.10.2015    source источник
comment
Что происходит с сигнальными входами, когда вы управляете w, x, y и z?   -  person lasplund    schedule 25.10.2015
comment
Посмотрите внимательнее на назначение g1_562. Когда он исполняется? Также читайте о том, когда такие сигналы, как выходы, обновляются после назначения.   -  person lasplund    schedule 25.10.2015
comment
g1_562 присваивается текущее значение outputs. Значения сигналов никогда не обновляются, пока ожидается выполнение любого процесса. Вместо этого сигналы имеют проецируемую форму выходного сигнала, которая может планировать обновления для текущего времени симуляции (при этом не предполагается выражение времени after 0 fs), что обеспечит выполнение дельта-цикла с новым доступным значением outputs. Решение состоит в том, чтобы переместить назначение g1_562 за пределы этого процесса (например, сделать его параллельным назначением сигнала).   -  person    schedule 25.10.2015
comment
Спасибо за советы, решил!   -  person Mac    schedule 25.10.2015


Ответы (1)


Ваш сигнал inputs никогда ничему не присваивается. Вам нужна строка вне процесса, где вы объединяете входные данные w, x, y и z. Такие как:

inputs <= w & x & y & z;

Вы также должны переместить g1_562 <= outputs; за пределы процесса.

person anderswb    schedule 25.10.2015