【数字电路与逻辑设计】实验二 计数器

文章总览:YuanDaiMa2048博客文章总览


一、实验内容

用 VHDL 语言实现计数状态连续的模值为 2N的计数器。这是一个同步清零的 4 为二进制加计数器,其计数的状态是从“0000~1111”进行变化。整个的计数周期是 16 个时钟周期,即 24个时钟周期。凡是这种技术周期为 2N且对计数状态无特殊要求的计数器,可以通过直接定义 N 位的计数信号和端口,对信号进行加或减操作,而不必进行计数状态的判断和控制。使用波形图进行仿真。

二、设计过程

本次代码的编写,是从4位二进制计数出发,利用清零端rst来进行循环计数。过程中使用if语句,当计数信号为“1111”时,计数信号r_counter再重零开始计数。这样可以达到计数效果。

三、源代码

(一)代码说明:

① clk:cp时钟脉冲信号,上升沿触发。

② rst:输入,清零端。

③ Z:输出,输出计数结果,即经过了几个cp时钟脉冲。

④ 本次设置的每次计数循环为16个为一个周期,每次计数信号r_counter加1,在每次cp上升沿到来时将计数值赋给输出Z;在计数信号为“1111”后,计数信号r_counter再重零开始计数。

(二)代码内容:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter is
port(clk:in std_logic;
     rst:in std_logic;
	  Z:out std_logic_vector(3 downto 0));
end entity;
architecture behave of counter is
  signal r_counter:std_logic_vector(3 downto 0);
begin
    process(clk,rst)
    begin
        if(rst='1')then
            r_counter<="0000";
        elsif(clk'event and clk='1')then
            if(r_counter="1111")then
	            r_counter<="0000";
	        else
	            r_counter<=r_counter+1;
	        end if;
        end if;
    end process;
    Z<=r_counter;
end architecture behave;

四、仿真验证与实验结果

(一)波形图

在这里插入图片描述

(二)波形图说明

图中,利用clk表示cp时钟脉冲,周期设置为10.0ns(起始值为0);rst表示清零端(此处保持为低电平,不启用);Z表示为计数输出。

(三)实验结果

如图所示,当cp的周期过一次,计数则加一,在经历了16个周期后,又从0开始计数。证明可以实现计数效果。

五、全部实验

第一部分 组合逻辑

第二部分 时序逻辑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值