计数器3
功能
- 一位十进制加法计数器,异步复位,同步加载功能
输入
- 时钟 CLK:提供一定频率的脉冲信号
- 时钟使能信号 EN:EN=’1’,时钟信号为上升沿(RST=‘1’),才允许计数
- 异步清零 RST:在任何时候RST=‘0’,D触发器的输出端立即被清零
- 输入 LOAD: 为低电平时,允许加载
- 计数值输入DATA:4位,类型为标准逻辑位矢量
输出
- 计数值输出DOUT:
- 计数进位输出C:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT10 IS
PORT (CLK,RST,EN,LOAD:IN STD_LOGIC;
DATA :IN STD_LOGIC_VECTOR(3 DOWNTO 0);
DOUT :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
C :OUT STD_LOGIC);
END CNT10;
ARCHITECTURE behav OF CNT10 IS
BEGIN
PROCESS (CLK,RST,EN,LOAD)
VARIABLE Q: STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
IF RST='0' THEN Q:=(OTHERS=>'0');
ELSIF CLK'EVENT AND CLK='1' THEN
IF EN='1' THEN
IF (LOAD='0' ) THEN Q:=DATA; ELSE
IF Q<9 THEN Q:=Q+1;
ELSE Q:=(OTHERS=>'0'); END IF;
END IF;
END IF;
END IF;
IF Q="1001" THEN C<='1'; ELSE C<='0'; END IF;
DOUT<=Q;
END PROCESS;
END behav;
计数器4
功能
- 8位二进制加法计数器,异步复位、异步加载、同步时钟使能
输入
- 时钟 CLK:提供一定频率的脉冲信号
- 时钟使能信号 EN:同步时钟使能,每来一个时钟(上升沿或者下降沿),允许计数
- 异步清零 RST:在任何时候RST=‘0’,D触发器的输出端立即被清零
- 输入 LOAD: 为低电平时,允许加载。与时钟信号无关。
- 计数值输入DATA:8位二进制,类型为标准逻辑位矢量
输出
- 计数值输出DOUT:
- 计数进位输出C:
–复位 低电平时,计数寄存器清零
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT8b IS
PORT (CLK,RST,EN,LOAD:IN STD_LOGIC;
DATA :IN STD_LOGIC_VECTOR(7 DOWNTO 0);
DOUT :OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
C :OUT STD_LOGIC);
END CNT8b;
ARCHITECTURE behav OF CNT8b IS
BEGIN
PROCESS (CLK,RST,EN,LOAD)
VARIABLE Q: STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
IF RST='0' THEN Q:=(OTHERS=>'0');--在任何时候RST=‘0’,D触发器的输出端立即被清零
ELSIF CLK'EVENT AND CLK='1' THEN
IF EN='1' THEN--同步时钟使能,每来一个时钟(上升沿或者下降沿),允许计数
IF (LOAD='0' ) THEN Q:=DATA; ELSE--为低电平时,允许加载。与时钟信号无关。
IF Q<1 THEN Q:=Q+1;ELSE Q:=(OTHERS=>'0'); END IF;
END IF;
END IF;
END IF;
IF Q="11111110" THEN C<='1'; ELSE C<='0';
END IF;
DOUT<=Q;
END PROCESS;
END behav;
8位并行转串行寄存器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SHFRT IS
PORT (CLK,LOAD:IN STD_LOGIC;
DATAIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
QB:OUT STD_LOGIC);
END SHFRT;
ARCHITECTURE behav OF SHFRT IS
BEGIN
PROCESS (CLK,LOAD)
VARIABLE REG8:STD_LOGIC_VECTOR (7 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK='1'
THEN
IF LOAD='1'
THEN REG8:=DATAIN;
ELSE REG8(6 DOWNTO 0):=REG8(7 DOWNTO 1);END IF;
END IF;
QB<=REG8(0);
END PROCESS;
END behav;
串行转并行
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SHFRT2 IS
PORT (CLK,LOAD:IN STD_LOGIC;
DATAIN: IN STD_LOGIC;
DATAOUT:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
--QB:OUT STD_LOGIC);
END SHFRT2;
ARCHITECTURE behav OF SHFRT2 IS
BEGIN
PROCESS (CLK,LOAD)
VARIABLE REG8:STD_LOGIC_VECTOR (7 DOWNTO 0);
BEGIN
IF CLK'EVENT AND CLK='1'
THEN
IF LOAD='1'
THEN REG8(0):=DATAIN;
ELSE REG8(7 DOWNTO 1):=REG8(6 DOWNTO 0);END IF;
END IF;
DATAOUT<=REG8;
END PROCESS;
END behav;