Размещение разрешающего входа на декодере (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'.