Размещение разрешающего входа на декодере (VHDL)

У меня есть 4-16 декодер в VHDL. Я хочу включить входной сигнал, но я новичок в кодировании VHDL. Я хочу сохранить эту структуру кода (я не хочу никаких других ярлыков или полностью измененного кода). Я пытался написать e вход для включения, и попытался сделать if e = "1" then но это не работает

library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity decode4to16 is
port(
oct : in std_logic_vector(3 downto 0);
e : in std_logic;
dec : out std_logic_vector(15 downto 0));
end decode4to16;
architecture arch of decode4to16 is
begin
if e = "1" then
with oct select
dec <=
"0000000000000001" when "0000",
"0000000000000010" when "0001",
"0000000000000100" when "0010",
"0000000000001000" when "0011",
"0000000000010000" when "0100",
"0000000000100000" when "0101",
"0000000001000000" when "0110",
"0000000010000000" when "0111",
"0000000100000000" when "1000",
"0000001000000000" when "1001",
"0000010000000000" when "1010",
"0000100000000000" when "1011",
"0001000000000000" when "1100",
"0010000000000000" when "1101",
"0100000000000000" when "1110",
"1000000000000000" when "1111",
"0000000000000000" when others;
end if;
end arch;

1 ответ

Решение

Пожалуйста, используйте правильные отступы в футуре, чтобы облегчить чтение.

Оператор if может использоваться только в процессе, и, как указал @Josh, e является std_logic, который требует одинарных кавычек при проверке или присвоении его значения. Окончательные результаты примерно такие:

DECODER: process(e, oct) -- e and oct are in sensitivity list, which means output the process statements are executed whenever one of these change
begin
    if e = '1' then
        case oct is
            when "0000" => dec <= X"0001";
            when "0001" => dec <= X"0002";
            ...
            when others => dec <= X"0000";
        end case;
    end if;
end process DECODER;

С другой стороны, это создаст защелку, поскольку существует неявное поведение, при котором значение сигнала не изменится, если он не назначен. В этом случае это происходит, когда e равно 0; то есть больше нет в вашем утверждении. Это, вероятно, не то, что вам нужно, и следует назначить значение dec, когда e равно '0'.

Другие вопросы по тегам