Я новичок в 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
Спасибо
g1_562
присваивается текущее значениеoutputs
. Значения сигналов никогда не обновляются, пока ожидается выполнение любого процесса. Вместо этого сигналы имеют проецируемую форму выходного сигнала, которая может планировать обновления для текущего времени симуляции (при этом не предполагается выражение времениafter 0 fs
), что обеспечит выполнение дельта-цикла с новым доступным значениемoutputs
. Решение состоит в том, чтобы переместить назначениеg1_562
за пределы этого процесса (например, сделать его параллельным назначением сигнала). - person   schedule 25.10.2015