EDA循环计数器设计

本文详细介绍了使用Verilog HDL在DE0开发板上设计两种循环计数器的过程,包括时间基准电路、计数器模块和显示电路。计数器在复位后按设定的最大值循环计数,显示在数码管上,每个周期1秒。通过Quartus Ⅱ 8.1编译和Signal Tap逻辑分析验证了设计的正确性。
摘要由CSDN通过智能技术生成

一、实验内容1

1、设计功能描述

在 DE0 开发板上,设计一个变换计数最大值的循环计数器:在电路复位后会循环的从0值递增计数到最大值,第一次计数最大值是6,然后是7、8、9,然后计数最大值又变成6,如此往复循环; 计数数值以十进制数在最右侧的 HEX LED 数码管上显示,变化的时间间隔是1秒 ,复位时,数码管熄灭。

2、电路设计思路RTL电路图

这里写图片描述
设计电路主要有三部分组成:第一部分是时间基准电路模块,用以产生定时1秒的时钟使能信号,即1秒计一个数;第二部分是计数器模块,该模块有两个计数器组成,一个计数器进行循环主计数,另一个循环计数改变计数模值;第三部分是计数值译码显示电路。

3、Quartus Ⅱ 8.1 编译生成RTL电路图

这里写图片描述

4、Verilog HDL 模块代码

1秒时间基准电路模块/
module cnt_sync(
  CLK   ,   // clock
  CNTVAL,   // counter value
  OV    );  // overflow
input CLK;
output [32-1:0] CNTVAL;
output OV;
parameter MAX_VAL = 50_000_000;
reg [32-1:0] CNTVAL;
reg OV;

always @ (posedge CLK) begin
  if(CNTVAL >= MAX_VAL)
    CNTVAL <= 0;
  else
    CNTVAL <= CNTVAL + 1'b1;
end

always @ (CNTVAL) begin
  if(CNTVAL == MAX_VAL)
    OV = 1'b1;
  else
    OV = 1'b0;
end
endmodule   

///变模(6~9)循环计数模块
module cnt_cycle(
  EN   ,   
  RST  ,  
  CNT);   //计数值输出 
input EN;
input RST;
output [4-1:0] CNT;

parameter CNT_VAL_MIN=6; //计数最小模值为6
parameter CNT_VAL_MAX=9; //计数最大模值为9
reg [4-1:0] CNT;
reg [4-1:0] CNT_VAL=CNT_VAL_MIN;

always @ (posedge EN or posedge RST)begin
    if(RST)begin         //异步高电平复位
        CNT <= 0;
        CNT_VAL <= CNT_VAL_MIN;
    end
    else begin  
        if(CNT >= CNT_VAL)begin         
            CNT <= 0;
            CNT_VAL <= CNT_VAL + 1'b1;  
            if(CNT_VAL >= CNT_VAL_MAX)          
                CNT_VAL <= CNT_VAL_MIN;
        end
        else CNT <= CNT + 1'b1;      
    end
end
endmodule

///计数值译码显示模块
module dec_4to8(
IN  ,   //计数值输入
RST ,
OUT);
input  [4-1:0] IN  ;
input  RST ;
output [8-1:0] OUT ;

reg [8-1:0] OUT ;

always @ (IN) begin
 if(RST)
    OUT = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值