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;
打赏帖 | |
---|---|
分享一种检测按键状态的方法被打赏20分 | |
周末总结一下,STM32C0系列的开发经验被打赏50分 | |
【Cortex-M】Systick Timer使用被打赏10分 | |
分享汽车防盗系统的组成与分类(一)被打赏5分 | |
VOFA+波形显示+JYD-31蓝牙发送和解析不定长数据被打赏10分 | |
【换取手持数字示波器】-STM32F4PWM控制LED灯管亮度被打赏22分 | |
【换取手持数字示波器】STM32F4驱动RPR-0521RS照度、接近一体型传感器被打赏23分 | |
宏定义和const关键字定义被打赏5分 | |
【分享开发笔记,赚取电动螺丝刀】几个单片机I2S外设的BLCK时钟对比被打赏20分 | |
【功率监测与控制系统DIY活动成果贴】DIY功率计与LabVIEW数据采集被打赏100分 |