Info Terbaru
Loading...
Saturday, March 22, 2014

Info Post

Rangkaian Logika dengan bahasa VHDL,
contoh soal:
"Write the behavioral VHDL code for converting an 8-bit unsigned binary number to two 4-bit BCD numbers. These two BCD numbers represent the tenth and unit digits of a decimal number. Also, turn on the decimal point LED for the unit digit if the 8-bit binary number is in the one hundreds range, and turn on the decimal point LED for the tenth digit if the 8-bit binary number is in the two hundreds range. This circuit is used as the output circuit for many designs in later chapters."

Jawabannya :
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity Tugas2 is
    Port ( 
                   number   : in  std_logic_vector (7 downto 0);
      hundreds : out std_logic_vector (6 downto 0);
      tens     : out std_logic_vector (6 downto 0);
      ones     : out std_logic_vector (6 downto 0)
                                );
end Tugas2;

architecture Behavioral of Tugas2 is
signal ratusan,puluhan,satuan : STD_LOGIC_VECTOR (3 downto 0);
begin
   bin_to_bcd : process (number)
      -- Internal variable for storing bits
      variable shift : unsigned(19 downto 0);

      -- Alias for parts of shift register
      alias num is shift(7 downto 0);
      alias one is shift(11 downto 8);
      alias ten is shift(15 downto 12);
      alias hun is shift(19 downto 16);
   begin
      -- Clear previous number and store new number in shift register
      num := unsigned(number);
      one := X"0";
      ten := X"0";
      hun := X"0";

      -- Loop eight times
      for i in 1 to num'Length loop
         -- Check if any digit is greater than or equal to 5
         if one >= 5 then
            one := one + 3;
         end if;

         if ten >= 5 then
            ten := ten + 3;
         end if;

         if hun >= 5 then
            hun := hun + 3;
         end if;

         -- Shift entire register left once
         shift := shift_left(shift, 1);
      end loop;
      -- Push decimal numbers to output
      ratusan     <= std_logic_vector(hun);
      puluhan     <= std_logic_vector(ten);
      satuan      <= std_logic_vector(one);
   end process;
               
                                PROCESS (ratusan) --seven segmen 1
                begin
                case  ratusan is
                when "0000"=> hundreds <="0000001";  -- '0'
                when "0001"=> hundreds <="1001111";  -- '1'
                when "0010"=> hundreds <="0010010";  -- '2'
                when "0011"=> hundreds <="0000110";  -- '3'
                when "0100"=> hundreds <="1001100";  -- '4'
                when "0101"=> hundreds <="0100100";  -- '5'
                when "0110"=> hundreds <="0100000";  -- '6'
                when "0111"=> hundreds <="0001111";  -- '7'
                when "1000"=> hundreds <="0000000";  -- '8'
                when "1001"=> hundreds <="0000100";  -- '9'
                when others=> hundreds <="1111111";
                end case;
                end process;
               
                PROCESS (puluhan) --seven segmen 2
                begin
                case  puluhan is
                when "0000"=> tens <="0000001";  -- '0'
                when "0001"=> tens <="1001111";  -- '1'
                when "0010"=> tens <="0010010";  -- '2'
                when "0011"=> tens <="0000110";  -- '3'
                when "0100"=> tens <="1001100";  -- '4'
                when "0101"=> tens <="0100100";  -- '5'
                when "0110"=> tens <="0100000";  -- '6'
                when "0111"=> tens <="0001111";  -- '7'
                when "1000"=> tens <="0000000";  -- '8'
                when "1001"=> tens <="0000100";  -- '9'
                when others=> tens <="1111111";
                end case;
                end process;
               
                PROCESS (satuan) --seven segmen 3
                begin
                case  satuan is
                when "0000"=> ones <="0000001";  -- '0'
                when "0001"=> ones <="1001111";  -- '1'
                when "0010"=> ones <="0010010";  -- '2'
                when "0011"=> ones <="0000110";  -- '3'
                when "0100"=> ones <="1001100";  -- '4'
                when "0101"=> ones <="0100100";  -- '5'
                when "0110"=> ones <="0100000";  -- '6'
                when "0111"=> ones <="0001111";  -- '7'
                when "1000"=> ones <="0000000";  -- '8'
                when "1001"=> ones <="0000100";  -- '9'
                when others=> ones <="1111111";
                end case;
                end process;
               

end Behavioral;

0 comments:

Post a Comment

Ayo diskusi disini ..

Blog Kemasaja

Pengumuman BKN

Cakrawala News

  • Bajigur Legit - Rp 18000 Bajigur minuman khas sunda yang mengandung banyak manfaat, salah satunya yaitu untuk menghangatkan badan disaat terasa udara terasa dingin. Bajig...
    9 years ago
Related Posts Plugin for WordPress, Blogger... Gapura Indonesia | Kemasaja