dring.vhd

来自「应用MaxplusII平台的数字时钟的VHDL源程序」· 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 dring IS
 PORT(RESET: IN STD_LOGIC;
      WHOLE: IN STD_LOGIC;
      ALARM: OUT STD_LOGIC;
      rtin:IN INTEGER RANGE 0 TO 7;
      stopin:IN INTEGER RANGE 0 TO 7;
      hourhdis: IN INTEGER RANGE 0 TO 2;
      hourldis: IN INTEGER RANGE 0 TO 9;
      minhdis: IN INTEGER RANGE 0 TO 5;
      minldis: IN INTEGER RANGE 0 TO 9;
      sechdis: IN INTEGER RANGE 0 TO 5;
      secldis: IN INTEGER RANGE 0 TO 9;
      hourhmat: IN INTEGER RANGE 0 TO 2;
      hourlmat: IN INTEGER RANGE 0 TO 9;
      minhmat: IN INTEGER RANGE 0 TO 5;
      minlmat: IN INTEGER RANGE 0 TO 9);
END dring;
ARCHITECTURE archi OF dring IS
   CONSTANT RT:INTEGER:=5;
BEGIN
  PROCESS(secldis)
  VARIABLE CNT:INTEGER;
  VARIABLE RTN:INTEGER;
  VARIABLE STOPN:INTEGER;
BEGIN
   cnt:=sechdis*10+secldis;
   rtn:=rtin;
   stopn:=stopin;
   IF reset='1'THEN
      ALARM<='0';
   ELSIF(hourhdis=0 AND hourldis=6 AND minhdis =0 AND minldis=0 AND sechdis<2)OR
        (hourhdis=2 AND hourldis=2 AND minhdis=3 AND minldis=0 AND sechdis<2)OR
        (hourhdis=hourhmat AND hourldis=hourlmat AND minhdis=minhmat AND minldis=minlmat AND sechdis<3)then
        IF cnt<rtn THEN
           ALARM<='1';
        ELSIF cnt>=rtn AND cnt<rtn+stopn THEN
           ALARM<='0';
        ELSIF cnt<2*rtn+stopn THEN
           ALARM<='1';
        ELSE
           ALARM<='0';
        END IF;
   ELSIF(hourhdis=0 AND hourldis=7 AND minhdis=3 AND minldis=0 AND sechdis=0)OR
        (hourhdis=0 AND hourldis=8 AND minhdis=2 AND minldis=0 AND sechdis=0)OR
        (hourhdis=0 AND hourldis=8 AND minhdis=3 AND minldis=0 AND sechdis=0)OR
        (hourhdis=0 AND hourldis=9 AND minhdis=2 AND minldis=0 AND sechdis=0)OR
        (hourhdis=0 AND hourldis=9 AND minhdis=4 AND minldis=0 AND sechdis=0)OR
        (hourhdis=1 AND hourldis=0 AND minhdis=3 AND minldis=0 AND sechdis=0)OR
        (hourhdis=1 AND hourldis=0 AND minhdis=4 AND minldis=0 AND sechdis=0)OR
        (hourhdis=1 AND hourldis=1 AND minhdis=3 AND minldis=0 AND sechdis=0)then
        IF secldis<RT THEN
           ALARM<='1';
        ELSE ALARM<='0';
        END IF;
   ELSIF(minhdis=0 AND minldis=0 AND sechdis=0)then
        IF whole='1' THEN
           IF secldis<RT THEN
           ALARM<='1';
           ELSE ALARM<='0';
           END IF;
        ELSE ALARM<='0';
        END IF;
   ELSE ALARM<='0';
   END IF;
END PROCESS;
END archi;



⌨️ 快捷键说明

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