题目:给出含有异步清零和计数使能的16位二进制加减可控计数器的VHDL描述
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT16 IS
PORT(CLK, RST, EN : IN STD_LOGIC;
CHOOSE : IN BIT;
SETDATA : BUFFER INTEGER RANCE 65535 DOWNTO 0;
COUT : BUFFER INTEGER RANCE 65535 DOWNTO 0);
END CNT16;
ARCHITECTURE ONE OF CNT16 IS
BEGIN
PROCESS(CLK,RST,SDATA)
VARIABLE QI : STD_LOGIC_VECTOR(15 DOWNTO 0);--或者 INTEGER RANCE 65535 DOWNTO 0)
BEGIN
IF RST = '1' THEN --计数器异步复位
QI := (OTHERS=>'0');
ELSIF SET = '1' THEN--计数器异步置位
QI := SETDATA;
ELSIF CLK'EVENT AND CLK = '1' THEN --检测时钟上升沿
IF EN = '1' THEN --检测是否允许计数
IF CHOOSE = '1' THEN --选择加法计数
QI := QI+1; --计数器加一
ELSE QI := QI-1;--计数器减一
END IF;
END IF;
END IF;
COUT <= QI;--将计数值向端口输出
END PROCESS;
END ONE;