library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Binary to BCD (0 – 99)
entity CodBinBCD is
Port(Bin : in STD_LOGIC_VECTOR (6 downto 0); -- Numero a ser convertido
Uni : out STD_LOGIC_VECTOR (3 downto 0); -- Unidades del BCD
Dec : out STD_LOGIC_VECTOR (3 downto 0) -- Decenas del BCD
);
end CodBinBCD;
architecture Behavioral of CodBinBCD is
signal R : STD_LOGIC_VECTOR (6 downto 0); -- Resultado de la resta
begin
process (Bin)
begin
R <= "0000000";
if (Bin >= "0000001" and Bin <= "0001001") then R <= (Bin - "0000000");
Dec <= "0000";
elsif (Bin >= "0001010" and Bin <= "0010011") then R <= (Bin - "0001010");
Dec <= "0001";
elsif (Bin >= "0010100" and Bin <= "0011101") then R <= (Bin - "0010100");
Dec <= "0010";
elsif (Bin >= "0011110" and Bin <= "0100111") then R <= (Bin - "0011110");
Dec <= "0011";
elsif (Bin >= "0101000" and Bin <= "0110001") then R <= (Bin - "0101000");
Dec <= "0100";
elsif (Bin >= "0110010" and Bin <= "0111011") then R <= (Bin - "0110010");
Dec <= "0101";
elsif (Bin >= "0111100" and Bin <= "1000101") then R <= (Bin - "0111100");
Dec <= "0110";
elsif (Bin >= "1000110" and Bin <= "1001111") then R <= (Bin - "1000110");
Dec <= "0111";
elsif (Bin >= "1010000" and Bin <= "1011001") then R <= (Bin - "1010000");
Dec <= "1000";
elsif (Bin >= "1011010" and Bin <= "1100011") then R <= (Bin - "1011010");
Dec <= "1001";
else Dec <= "0000"; end if;
end process;
Uni <= R(3)&R(2)&R(1)&R(0);
end Behavioral;
---- Another code
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Binary to BCD (0 – 99)
entity Bin2BCD is
Port ( Bin : in STD_LOGIC_VECTOR (6 downto 0);
D : out STD_LOGIC_VECTOR (3 downto 0);
U : out STD_LOGIC_VECTOR (3 downto 0));
end Bin2BCD;
architecture Behavioral of Bin2BCD is
begin
process (Bin)
begin
case Bin is
when "0000000" => D <= "0000"; U <= "0000";
when "0000001" => D <= "0000"; U <= "0001";
when "0000010" => D <= "0000"; U <= "0010";
when "0000011" => D <= "0000"; U <= "0011";
when "0000100" => D <= "0000"; U <= "0100";
when "0000101" => D <= "0000"; U <= "0101";
when "0000110" => D <= "0000"; U <= "0110";
when "0000111" => D <= "0000"; U <= "0111";
when "0001000" => D <= "0000"; U <= "1000";
when "0001001" => D <= "0000"; U <= "1001";
when "0001010" => D <= "0001"; U <= "0000";
when "0001011" => D <= "0001"; U <= "0001";
when "0001100" => D <= "0001"; U <= "0010";
when "0001101" => D <= "0001"; U <= "0011";
when "0001110" => D <= "0001"; U <= "0100";
when "0001111" => D <= "0001"; U <= "0101";
when "0010000" => D <= "0001"; U <= "0110";
when "0010001" => D <= "0001"; U <= "0111";
when "0010010" => D <= "0001"; U <= "1000";
when "0010011" => D <= "0001"; U <= "1001";
when "0010100" => D <= "0010"; U <= "0000";
when "0010101" => D <= "0010"; U <= "0001";
when "0010110" => D <= "0010"; U <= "0010";
when "0010111" => D <= "0010"; U <= "0011";
when "0011000" => D <= "0010"; U <= "0100";
when "0011001" => D <= "0010"; U <= "0101";
when "0011010" => D <= "0010"; U <= "0110";
when "0011011" => D <= "0010"; U <= "0111";
when "0011100" => D <= "0010"; U <= "1000";
when "0011101" => D <= "0010"; U <= "1001";
when "0011110" => D <= "0011"; U <= "0000";
when "0011111" => D <= "0011"; U <= "0001";
when "0100000" => D <= "0011"; U <= "0010";
when "0100001" => D <= "0011"; U <= "0011";
when "0100010" => D <= "0011"; U <= "0100";
when "0100011" => D <= "0011"; U <= "0101";
when "0100100" => D <= "0011"; U <= "0101";
when "0100101" => D <= "0011"; U <= "0111";
when "0100110" => D <= "0011"; U <= "1000";
when "0100111" => D <= "0011"; U <= "1001";
when "0101000" => D <= "0100"; U <= "0000";
when "0101001" => D <= "0100"; U <= "0001";
when "0101010" => D <= "0100"; U <= "0010";
when "0101011" => D <= "0100"; U <= "0011";
when "0101100" => D <= "0100"; U <= "0100";
when "0101101" => D <= "0100"; U <= "0101";
when "0101110" => D <= "0100"; U <= "0110";
when "0101111" => D <= "0100"; U <= "0111";
when "0110000" => D <= "0100"; U <= "1000";
when "0110001" => D <= "0100"; U <= "1001";
when "0110010" => D <= "0101"; U <= "0000";
when "0110011" => D <= "0101"; U <= "0001";
when "0110100" => D <= "0101"; U <= "0010";
when "0110101" => D <= "0101"; U <= "0011";
when "0110110" => D <= "0101"; U <= "0100";
when "0110111" => D <= "0101"; U <= "0101";
when "0111000" => D <= "0101"; U <= "0110";
when "0111001" => D <= "0101"; U <= "0111";
when "0111010" => D <= "0101"; U <= "1000";
when "0111011" => D <= "0101"; U <= "1001";
when "0111100" => D <= "0110"; U <= "0000";
when "0111101" => D <= "0110"; U <= "0001";
when "0111110" => D <= "0110"; U <= "0010";
when "0111111" => D <= "0110"; U <= "0011";
when "1000000" => D <= "0110"; U <= "0100";
when "1000001" => D <= "0110"; U <= "0101";
when "1000010" => D <= "0110"; U <= "0110";
when "1000011" => D <= "0110"; U <= "0111";
when "1000100" => D <= "0110"; U <= "1000";
when "1000101" => D <= "0110"; U <= "1001";
when "1000110" => D <= "0111"; U <= "0000";
when "1000111" => D <= "0111"; U <= "0001";
when "1001000" => D <= "0111"; U <= "0010";
when "1001001" => D <= "0111"; U <= "0011";
when "1001010" => D <= "0111"; U <= "0100";
when "1001011" => D <= "0111"; U <= "0101";
when "1001100" => D <= "0111"; U <= "0110";
when "1001101" => D <= "0111"; U <= "0111";
when "1001110" => D <= "0111"; U <= "1000";
when "1001111" => D <= "0111"; U <= "1001";
when "1010000" => D <= "1000"; U <= "0000";
when "1010001" => D <= "1000"; U <= "0001";
when "1010010" => D <= "1000"; U <= "0010";
when "1010011" => D <= "1000"; U <= "0011";
when "1010100" => D <= "1000"; U <= "0100";
when "1010101" => D <= "1000"; U <= "0101";
when "1010110" => D <= "1000"; U <= "0110";
when "1010111" => D <= "1000"; U <= "0111";
when "1011000" => D <= "1000"; U <= "1000";
when "1011001" => D <= "1000"; U <= "1001";
when "1011010" => D <= "1001"; U <= "0000";
when "1011011" => D <= "1001"; U <= "0001";
when "1011100" => D <= "1001"; U <= "0010";
when "1011101" => D <= "1001"; U <= "0011";
when "1011110" => D <= "1001"; U <= "0100";
when "1011111" => D <= "1001"; U <= "0101";
when "1100000" => D <= "1001"; U <= "0110";
when "1100001" => D <= "1001"; U <= "0111";
when "1100010" => D <= "1001"; U <= "1000";
when "1100011" => D <= "1001"; U <= "1001";
when others => D <= "0000"; U <= "0000";
end case;
end process;
end Behavioral;