{"title":"LIBRARY IEEE;--引用IEEE库\nUSE IEEE.STD_LOGIC_1164.ALL;--STD_LOGIC、STD_LOGIC_VECTOR数据类型在此程序包中,而且程序包\n--还包含此两种数据类型的逻辑运算。且IEEE库不属于VHDL标准库,必须予以声明\nUSE IEEE.STD_LOGIC_ARITH.ALL;--对STD_LOGIC类型的数据进行算术运算的程序包\nUSE IEEE.STD_LOGIC_UNSIGNED.ALL;--对STD_LOGIC_VECTOR数据类型进行无符号数运算需声明UNSIGNED,\n--如需进行有符号数运算,则需声明SIGNED\n\nENTITY COUNTER_60 IS\nPORT(\n\t\tCLK_1HZ,CLR: IN STD_LOGIC;--输入的计数脉冲\n\t SHIWEI,GEWEI:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--输出个位及十位BCD码\n\t\t\t\t ACC:OUT STD_LOGIC);--60进制计数器输出的进位信号,可作为高位计数器计数脉冲\nEND ENTITY COUNTER_60;\n\nARCHITECTURE RTL OF COUNTER_60 IS\nSIGNAL TMP2,TMP1:STD_LOGIC_VECTOR(3 DOWNTO 0);--引入信号TMP1、TMP2,存储计数器计数结果\nSIGNAL CO:STD_LOGIC;--引入信号CO,用来存储计数器的进位信号\nBEGIN\n\tPROCESS(CLK_1HZ)\n\tBEGIN\n\t\tIF(CLR='0')THEN--当清零控制管脚为低电平时,将中间信号量TMP1、TMP2置零处理\n\t\t\tTMP1<="0000";TMP2<="0000";\n\t\tELSIF(CLK_1HZ'EVENT AND CLK_1HZ='1')THEN--当清零控制管脚为高电平时,判断输入计数脉冲有无上升沿到来\n\t\t\tIF(TMP1="1001")THEN--输入计数脉冲有上升沿到来,且计数结果个位数为9\n\t\t\t\tIF(TMP2="0101")THEN--输入计数脉冲有上升沿到来,且计数结果十位数为5\n\t\t\t\t\tTMP1<="0000";TMP2<="0000";CO<='1';--输出结果清零,进位信号输出高电平\n\t\t\t\tELSE\n\t\t\t\t\tTMP1<="0000";TMP2<=TMP2+1;CO<='0';--输入计数脉冲有上升沿到来,计数结果十位数不为5\n\t\t\t\tEND IF;--个位数清零,十位数实现加1\n\t\t\tELSE\n\t\t\t\tTMP1<=TMP1+1;CO<='0';--输入计数脉冲有上升沿到来,计数结果个位数不为9,则个位数实现加1\n\t\t\tEND IF;\n\t\tEND IF;\n\tEND PROCESS;\n\tACC<=CO;GEWEI<=TMP1;SHIWEI<=TMP2;--将计数器结果赋值给输出的个位和十位,信号CO赋值给输出进位\nEND ARCHITECTURE RTL;

VHDL 60进制计数器设计与实现:COUNTER_60 实体与 RTL 架构

原文地址: https://www.cveoy.top/t/topic/pAuO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录