这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 高校专区 » 周师电子设计创新社区 » 给出含有异步清0和计数使能的16位二进制加减可控计数器的VHDL描述。

共1条 1/1 1 跳转至

给出含有异步清0和计数使能的16位二进制加减可控计数器的VHDL描述。

菜鸟
2015-01-09 09:06:15     打赏
LIBRARY IEEE;
  USE IEEE.STD_LOGIC_1164.ALL;
      USE IEEE.STD_LOGIC_UNSIGNED.ALL;
     ENTITY ADD_SUB_LOAD_16 IS
       PORT (CLK,RST,ADD_EN,SUB_EN,LOAD :  IN STD_LOGIC;                                            DATA :  IN STD_LOGIC_VECTOR(15  DOWNTO  0)  ;                                                 CQ : OUT STD_LOGIC_VECTOR(15  DOWNTO  0)  ;
              COUT : OUT STD_LOGIC);
      END ENTITY ADD_SUB_LOAD_16;
        ARCHITECTURE A_S_16 OF ADD_SUB_LOAD_16 IS
     BEGIN
       PROCESS(CLK,RST,ADD_EN,SUB_EN,LOAD)
          VARIABLE CQI: STD_LOGIC_VECTOR(15 DOWNTO 0);
              --VARIABLE LS_LOAD : STD_LOGIC;
       BEGIN              --LS_LOAD:=LOAD;
          IF RST = '1' THEN CQI:=(OTHERS => '0');--计数器异步复位
         ELSIF LOAD = '1' THEN CQI:=DATA;--LS_LOAD:='0';     --计数器异步复位
         ELSIF CLK'EVENT AND CLK='1' THEN    --检测时钟上升沿
           IF ADD_EN='1'THEN    --检测是否允许计数(同步他能)
              IF CQI<16#FFFF# THEN  CQI:=CQI+1;    --允许计数,检测是否小于65535
             ELSE CQI:=(OTHERS => '0');    --大于65535,计数值清零
             END IF;
              IF CQI=16#FFFF# THEN COUT<='1';    --计数大于9,输出进位信号
             ELSE COUT <= '0';
             END IF;
           END IF;
            IF SUB_EN='1'THEN    --检测是否允许计数(同步他能)
              IF CQI>0 THEN  CQI:=CQI-1;    --允许计数,检测是否小于65535
             ELSE CQI:=(OTHERS => '1');    --大于65535,计数值清零
             END IF;
              IF CQI=0 THEN COUT<='1';    --计数大于9,输出进位信号
             ELSE COUT <= '0';
             END IF;
           END IF;
         END IF;
          CQ<=CQI;    --将计数值向端口输出
       END PROCESS;
      END ARCHITECTURE A_S_16;

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]