可逆计数器vhdl

该文描述了一个用VHDL编写的可逆计数器,包括了复位、使能、预置、数据输入、加减控制及进位输出等关键功能。当DIR为0时,计数器递增,为1时递减。COUT作为进位/借位信号在达到最大值或最小值时产生变化。
摘要由CSDN通过智能技术生成

CLR是复位控制输入端;ENA是使能控制输入端;LOAD是预置控制输入端;D[3..0]是4位并行数据输入端;DIR是加减控制输入端,当DIR=0时,计数器作加法操作,DIR=1时,计数器作减法操作;COUT是进/借位输出端。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity Rev_Counter is
    Port ( CLK : in STD_LOGIC;
           CLR : in STD_LOGIC;
           ENA : in STD_LOGIC;
           LOAD : in STD_LOGIC;
           D : in STD_LOGIC_VECTOR (3 downto 0);
           DIR : in STD_LOGIC;
           Q : out STD_LOGIC_VECTOR (3 downto 0);
           COUT : out STD_LOGIC);
end Rev_Counter;

architecture Behavioral of Rev_Counter is
    signal R : STD_LOGIC_VECTOR (3 downto 0);
begin
    process(CLK, CLR)
    begin
        if CLR = '1' then
            R <= "0000";
        elsif CLK'event and CLK = '1' then
            if ENA = '1' then
                if LOAD = '1' then
                    R <= D;
                else
                    if DIR = '0' then
                        if R = "1111" then
                            COUT <= '1';
                        else
                            COUT <= '0';
                        end if;
                        R <= R + 1;
                    else
                        if R = "0000" then
                            COUT <= '1';
                        else
                            COUT <= '0';
                        end if;
                        R <= R - 1;
                    end if;
                end if;
            end if;
        end if;
    end process;
    Q <= R;
end Behavioral;

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值