seltime_dc.vhd

来自「个人设计的基于VHDL的数字电子日历 在MAX+PLUSH软件平台上编译、仿真」· VHDL 代码 · 共 67 行

VHD
67
字号
LIBRARY ieee; 
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY seltime_dc IS
	PORT(
         clk,reset  : IN  STD_LOGIC;
         sec,min   :in  std_logic_vector(6 downto 0);
         hour      :in std_logic_vector(5 downto 0);
         s        :out std_logic_vector( 6 downto 0);
	    sel       :out std_logic_vector(2 downto 0)                
        );
END seltime_dc;

ARCHITECTURE a OF seltime_dc IS
 signal sel_b :std_logic_vector(2 downto 0);
 signal daout :std_logic_vector(3 downto 0);
 BEGIN
  PROCESS (Clk)
         VARIABLE tmpa         : STD_LOGIC_VECTOR(2 downto 0);
  BEGIN
	IF reset='0' THEN  tmpa:="000";
    ELSE    
         IF (CLK'event AND CLK='1') THEN
               tmpa := tmpa+1;
               END IF; 
            END IF; 
     sel<=tmpa;
     sel_b<=tmpa;
   END PROCESS ;
 process( sel_b)
begin
	CASE sel_b IS
		WHEN "000" =>
		    daout<=sec(3 downto 0);
        WHEN "001" =>
		    daout<='0'&sec(6 downto 4);
        WHEN "010" =>
		    daout<=min(3 downto 0);
        WHEN "011" =>
		    daout<='0'&min(6 downto 4);
        WHEN "100" =>
		    daout<=hour(3 downto 0);
        WHEN "101" =>
		    daout<='0'&'0'&hour(5 downto 4);
		WHEN OTHERS =>
		    daout<="0000";
	END CASE;
	end process;
 PROCESS(daout)
	BEGIN
      CASE daout IS
        WHEN "0000" => S<="1111110";      --0
        WHEN "0001" => S<="0000110";      --1
        WHEN "0010" => S<="1101101";      --2
        WHEN "0011" => S<="1111001";      --3
        WHEN "0100" => S<="0110011";      --4
        WHEN "0101" => S<="1011011";      --5
        WHEN "0110" => S<="1011111";      --6
        WHEN "0111" => S<="1110000";      --7
        WHEN "1000" => S<="1111111";      --8
        WHEN "1001" => S<="1111011";      --9
        WHEN OTHERS => S<="0000000";      
      END CASE;
  END PROCESS;
END a;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?