VHDL
Conversores de cdigo:
Codificadores:
Codificador 4 a 2
library IEEE;
use IEEE.std_logic_1164.all;
entity CODI4a2 is
port(
E: in std_logic_vector(3 downto 0);
S: out std_logic_vector(1 downto 0);
EO: out
std_logic);
end CODI4a2;
Codificador 8 a 3 con prioridad
library IEEE;
use IEEE.std_logic_1164.all;
entity CODI8a3 is
port(
E: in std_logic_vector(7 downto 0);
S: out std_logic_vector(2 downto 0);
C: out std_logic);
end CODI8a3;
architecture arch1 of CODI4a2 is
begin
S <= "11" when E(3) = '1' else
"10" when E(2) = '1' else
"01" when E(1) = '1' else
"00";
EO<='1' when E="0000" else'0';
end arch1;
architecture arch1 of CODI8a3 is
begin
S <= "111" when E(7) = '1' else
"110" when E(6) = '1' else
"101" when E(5) = '1' else
"100" when E(4) = '1' else
"011" when E(3) = '1' else
"010" when E(2) = '1' else
"001" when E(1) = '1' else
"000";
C<='0' when E="00000000" else'1';
end arch1;
Para estos decodificadores se ha usado la estructura when-else. Se trata de
una estructura concurrente. En este caso, usamos varios when-else anidados.
Cuando la entrada E toma un nmero en binario, la lnea correspondiente se
activa. La entrada E es un vector, usamos entonces E() para ir llamando a
los bits correspondientes.
Decodificador 2 a 4
library IEEE;
use IEEE.std_logic_1164.all;
entity DECO2a4 is
port(
input : in
std_logic_vector(1 downto 0);
output : out std_logic_vector(3 downto 0));
end DECO2a4;
architecture arch1 of DECO2a4 is
begin
output <= "1000" when input="11" else
"0100" when input="10" else
"0010" when input="01" else
"0001";
end arch1;
12