Học liệu

Thiết kế mạch đếm BCD lên xuống trên KIT Altera dùng VHDL

  • 18/05/2018
  • Học liệu

library ieee;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity Counter_BCD_UD is

Port ( clk, clr, UP_Down: in std_logic, ;

segment7_1 : out std_logic_vector( 6 downto 0);

end Counter_BCD_UD;

architecture Behavioral of Counter_BCD_UD is

signal PRESCALER: integer range 0 to 20000000 :=0;

begin

counter_0_59: process (clk)

 variable bcd1: std_logic_vector(3 downto 0);

begin

if RISING_EDGE(clk) then 

 if PRESCALER <20000000 then

 PRESCALER <= PRESCALER + 1;

 else PRESCALER <= 0;

 end if;

 if (PRESCALER = 0)then

if (Up_Down='1') then

 bcd1:=bcd1+1;

if bcd1 = "1001" then bcd1:="0000";

end if;

elsif (Up_Down='0') then

bcd1:=bcd1-1;

if bcd1 = "0000" then bcd1:="1001";

end if;

end if;

end if;

case  bcd1 is

when "0000"=> segment7_1 <="1000000";  -- '0'

when "0001"=> segment7_1 <="1111001";  -- '1'

when "0010"=> segment7_1 <="0100100";  -- '2'

when "0011"=> segment7_1 <="0110000";  -- '3'

when "0100"=> segment7_1 <="0011001";  -- '4'

when "0101"=> segment7_1 <="0010010";  -- '5'

when "0110"=> segment7_1 <="0000010";  -- '6'

when "0111"=> segment7_1 <="1111000";  -- '7'

when "1000"=> segment7_1 <="0000000";  -- '8'

when "1001"=> segment7_1 <="0010000";  -- '9'

 --nothing is displayed when a number more than 9 is given as input.

when others=> segment7_1 <="1111111";

end case;

END PROCESS;

end Behavioral;

Các tin khác