Estoy tratando de poner una entrada de habilitación en un decodificador de 4 a 16 para poder seleccionar entre dos decodificadores. Aquí hay un esquema:
EstoyusandodosdecodificadoresparaseleccionardosdireccionesdiferentesenunaSRAM16x16.Estoypensandoenusarunaentradadehabilitaciónparacambiarentrelosdosdecodificadores.Porejemplo,sihabilitaresalto,eldecodificadorsuperiorseleccionaunadirección.Silaactivaciónesbaja,eldecodificadorinferiorseleccionaunadirección.
Esteeseldecodervhdl,perocuandointentocolocarunaentradaenable
yhacerifenable='1'then
,nofunciona.
libraryIEEE;useIEEE.STD_LOGIC_1164.all;entitydecode4to16isport(enable:instd_logic;oct:instd_logic_vector(3downto0);dec:outstd_logic_vector(15downto0));enddecode4to16;architecturearchofdecode4to16isbeginifenable='1'thenwithoctselectdec<="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 arch;
Alguien sugirió:
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
process(e, oct)
begin
if e = '1' then
case oct is
when "0000" => dec <= "0000000000000001";
when "0001" => dec <= "0000000000000010";
when "0010" => dec <= "0000000000000100";
when "0011" => dec <= "0000000000001000";
when "0100" => dec <= "0000000000010000";
when "0101" => dec <= "0000000000100000";
when "0110" => dec <= "0000000001000000";
when "0111" => dec <= "0000000010000000";
when "1000" => dec <= "0000000100000000";
when "1001" => dec <= "0000001000000000";
when "1010" => dec <= "0000010000000000";
when "1011" => dec <= "0000100000000000";
when "1100" => dec <= "0001000000000000";
when "1101" => dec <= "0010000000000000";
when "1110" => dec <= "0100000000000000";
when "1111" => dec <= "1000000000000000";
when others => dec <= "0000000000000000";
end case;
else null;
end if;
end process;
end arch;
Pero cuando lo probé, la salida permanece cuando e = '0', esto entrará en conflicto con el otro decodificador si comparten el mismo cable de bus. ¿Hay alguna forma (como en otro caso) donde si e = '0', no produzca nada?