📄 counter10_updown.vhd
字号:
Library IEEE ;
USE IEEE.STD_LOGIC_1164.all;
ENTITY counter10_updown IS
PORT(clr,ena,clk : IN STD_LOGIC; --clr计数器清零,en计数使能,clk时钟
up_down : IN STD_LOGIC; --计数方向
load : IN STD_LOGIC; --同步加载信号
d : IN INTEGER RANGE 0 TO 9; --同步加载数据
q : BUFFER INTEGER RANGE 0 TO 9;--计数器输出
cout : OUT STD_LOGIC); --计数器进位
END counter10_updown;
ARCHITECTURE rtl OF counter10_updown IS
BEGIN
PROCESS(clk,clr)
--变量direction当做加法时为1,做减法时为-1
VARIABLE direction : INTEGER RANGE -1 TO 1;
BEGIN
IF (up_down = '1') THEN --计数器加情况
direction := 1;
ELSE --计数器减情况
direction := -1;
END IF;
IF clr='1' THEN --异步清零
q<=0;
ELSE
IF clk='1' and clk'event THEN --时钟上升沿
IF load='1' THEN
q<=d;
ELSIF ena='1' THEN
IF q=9 and up_down='1' THEN --加法时计数值为9时,计数器值变为0
q<=0;
ELSIF q=0 and up_down='0' THEN --减法时计数值为0时,计数器值变为9
q<=9;
ELSE --计数器值加一
q<=q+direction;
END IF;
END IF;
END IF;
END IF;
IF up_down='1' THEN
IF q=9 THEN --加法计数器时的进位信号
cout<='1';
ELSE
cout<='0';
END IF;
ELSE
IF q=0 THEN --减法计数器时的进位信号
cout<='1';
ELSE
cout<='0';
END IF;
END IF;
END PROCESS;
END rtl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -