我是靠谱客的博主 甜甜口红,最近开发中收集的这篇文章主要介绍【FPGA】EDA技术综合设计 带同步复位和使能控制端的4位二进制加1计数器带同步复位和使能控制端的4位二进制加1计数器:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

带同步复位和使能控制端的4位二进制加1计数器:

1、设计原理
计数器的原理本质上和分频器一样,对板子上的原有时钟的周期进行计数,达到一定周期后进行重新计数,这时记为一个数,Q加1,达到最大值后,Q清零,使能端en,当en为低电平无效的时候,不进行计数,Q保持为0,按下复位键后计数器进行重新计数。

2、设计源文件

`timescale 1ns / 1ps
/
// Create Date: 2022/06/07 21:13:22
// Module Name: couter_4
/

module couter_4(clk,rst,en,D,W, Q);
input clk;//时钟输入
input rst;//复位
input en;//使能
output reg[6:0]D;//段选
output reg[1:0]W;//位选
output reg[3:0]Q;//四位二进制输出
reg [25 : 0] cnt_reg=7'h0000000;  //计数值
reg[13:0]x=14'b00000000000000;//两位数码管的段码组合
initial begin//初始化
D=7'b0000000;//不亮
Q=4'b0000;
W=2'b00;
end
always @(posedge clk) 
    begin
    if(en==1)
        begin
        if (rst == 1)  //判断是否清零复位
            cnt_reg <= 0; //如果是,清零
         else
            cnt_reg <= cnt_reg + 1; //没有清零,能使能,计数器才加一 
         end    
     else 
        cnt_reg <= 0;         
    end
//动态显示计数   
reg [19:0] clkdiv;
always@(posedge clk)
    begin
    if(rst==1)
        clkdiv<=0;
    else
        clkdiv<=clkdiv+1;
     end
wire s;   //位选选择
assign s=clkdiv[19];//令s为clkdiv的第一个值,实现较长时间内s的状态改变
 //位选动态显示
always@(*)
    begin
     W=2'b00;
     W[s]=1;//第s位选中的位选端打开,进行显示
    end 
 //对段选码输出十位和个位的选择  
always@(*)
    case(s)
      0:D=x[6:0];
      1:D=x[13:7];
      default:;
    endcase 
always @(posedge clk) 
    begin
    if (en == 1)  //判断是否使能
        begin
        if(rst == 1)//判断是否复位
            Q <=4'b0000;//如果是,清零
        else
            if(cnt_reg == 7'h5f5e100)//100000000,1hz
                     Q<=Q+1; 
        end        
        else
          Q <=4'b0000; 
    end             
always@(*)
begin
    case(Q)
    4'b0000:x = 14'b01111110111111; // 00
    4'b0001:x = 14'b01111110000110; // 01
    4'b0010:x = 14'b01111111011011; // 02
    4'b0011:x = 14'b01111111001111; // 03
    4'b0100:x = 14'b01111111100110; // 04
    4'b0101:x = 14'b01111111101101; // 05
    4'b0110:x = 14'b01111111111101; // 06
    4'b0111:x = 14'b01111110000111; // 07
    4'b1000:x = 14'b01111111111111; // 08
    4'b1001:x = 14'b01111111100111; // 09
    4'b1010:x = 14'b00001100111111; // 10
    4'b1011:x = 14'b00001100000110; // 11
    4'b1100:x = 14'b00001101011011; // 12
    4'b1101:x = 14'b00001101001111; // 13
    4'b1110:x = 14'b00001101100110; // 14
    4'b1111:x = 14'b00001101101101; // 15
    default:x = 14'b00000000000000;
  endcase 
 end
endmodule

3、仿真测试文件

`timescale 1ns / 1ps
module sim_couter4();
reg clk;
reg rst;
reg en;
wire [6:0] D;  //段选信号
wire [1:0] W;  //片选信号
wire [3:0] Q;  //四位二进制数计数器的值
couter_4 u1(clk,rst,en,D,W, Q);
parameter PERIOD = 10;
always begin
clk = 0;//开始时clk为0
#(PERIOD/2) clk = 1; 
#(PERIOD/2);
end
initial begin
rst=1;//开始时清零位为1
en=0;//没有使能
#10
rst=0;//改变rst状态
en=1;//改变使能状态
#10
rst=1;
#10
rst=0;
end
endmodule

仿真结果
在这里插入图片描述
实验板部分结果
在这里插入图片描述

在这里插入图片描述

最后

以上就是甜甜口红为你收集整理的【FPGA】EDA技术综合设计 带同步复位和使能控制端的4位二进制加1计数器带同步复位和使能控制端的4位二进制加1计数器:的全部内容,希望文章能够帮你解决【FPGA】EDA技术综合设计 带同步复位和使能控制端的4位二进制加1计数器带同步复位和使能控制端的4位二进制加1计数器:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部