clock.vhd

来自「自动打铃系统」· VHDL 代码 · 共 74 行

VHD
74
字号
Library IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL; 
ENTITY clock IS
 PORT(clk:     IN STD_LOGIC;   --system clock,1HZ
      settime: IN STD_LOGIC;   --received from "control"module
      hourhset: IN INTEGER RANGE 0 TO 2;--received adjuster time from"control"module
      hourlset: IN INTEGER RANGE 0 TO 9;
      minhset:  IN INTEGER RANGE 0 TO 5;
      minlset:  IN INTEGER RANGE 0 TO 9;
      sechset:  IN INTEGER RANGE 0 TO 5;
      seclset:  IN INTEGER RANGE 0 TO 9;
      hourhdis: out INTEGER RANGE 0 TO 2;--time to be sent to"display" module
      hourldis: out INTEGER RANGE 0 TO 9;
      minhdis:  out INTEGER RANGE 0 TO 5;
      minldis:  out INTEGER RANGE 0 TO 9;
      sechdis:  out INTEGER RANGE 0 TO 5;
      secldis:  out INTEGER RANGE 0 TO 9);
END clock;
ARCHITECTURE archi OF clock IS
  SIGNAL seclow,minlow,hourlow:INTEGER RANGE 0 TO 9;
  SIGNAL sechigh,minhigh:INTEGER RANGE 0 TO 5;
  SIGNAL hourhigh:INTEGER RANGE 0 TO 2;
BEGIN
   secldis<=seclow;
   sechdis<=sechigh;
   minldis<=minlow;
   minhdis<=minhigh;
   hourldis<=hourlow;
   hourhdis<=hourhigh;
normal_run: 
   PROCESS(clk,settime)
     BEGIN 
             IF settime='1' THEN
                seclow<=seclset;
                sechigh<=sechset;
                minlow<=minlset;
                minhigh<=minhset;
                hourlow<=hourlset;
                hourhigh<=hourhset; 
            ELSE 
               IF clk'event and clk='1' THEN 
                IF seclow=9 THEN
                  seclow<=0;
                  IF sechigh=5 THEN
                     sechigh<=0;
                    IF minlow=9 THEN
                      minlow<=0;
                      IF minhigh=5 THEN
                      minhigh<=0;
                        IF hourlow=9 THEN
                           hourlow<=0;
                           hourhigh<=hourhigh+1;
                          ELSIF hourlow=3 and hourhigh=2 THEN
                           hourhigh<=0;
                           hourlow<=0;
                          ELSE 
                           hourlow<=hourlow+1;
                        END IF;
                        ELSE 
                             minhigh<=minhigh+1;
                        END IF;
                       ELSE  minlow<=minlow+1;
                        END IF;
                     ELSE sechigh<=sechigh+1;
                     END IF;
                 ELSE seclow<=seclow+1;
                 END IF;
           END IF;
         END IF;
       END PROCESS;
  END archi;

⌨️ 快捷键说明

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