60进制BCD码计数器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
60进制BCD码计数器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY counter60 IS
PORT(
CLK1HZ : IN STD_LOGIC;
EN : IN STD_LOGIC;
ENOUT : OUT STD_LOGIC;
LOW : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
HIGH : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
);
END counter60;
ARCHITECTURE rtl OF counter60 IS
SIGNAL LOW_REG : STD_LOGIC_VECTOR(3 DOWNTO 0):="0000";
SIGNAL HIGH_REG : STD_LOGIC_VECTOR(3 DOWNTO 0):="0000";
BEGIN
--个位计数
LOW_PROC:PROCESS(CLK1HZ,EN)
BEGIN
IF rising_edge(CLK1HZ) THEN
IF EN ='1' THEN
IF LOW_REG ="1001" THEN
LOW_REG <= "0000";
ELSE LOW_REG <= LOW_REG + '1'; --注意:不同位数可以相加END IF;
END IF;
END IF;
END PROCESS;
LOW <= LOW_REG; --将值赋给输出LOW
--十位计数
HIGH_PROC:PROCESS(CLK1HZ,EN)
BEGIN
IF rising_edge(CLK1HZ) THEN
IF EN = '1' THEN
IF LOW_REG = "1001" THEN
IF HIGH_REG = "0101" THEN
HIGH_REG <= "0000";
ELSE
HIGH_REG <= HIGH_REG + '1';
END IF;
END IF;
END IF;
END IF;
END PROCESS;
HIGH <= HIGH_REG; --将值赋给输出HIGH
ENOUT <= '1' WHEN LOW_REG = "1001" AND HIGH_REG = "0101" ELSE '0'; --进位输出END rtl;