【VHDL】计数器/串转并/并转串电路VHDL设计

计数器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;

这里写图片描述

  • 17
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值