verilog设计十进制计数器(含进位位)

Posted 飞翔的梦的窝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog设计十进制计数器(含进位位)相关的知识,希望对你有一定的参考价值。

十进制计数器:

     设计要求:

1、每当计数器值为4’b001时,自动回到4’b0000

2、每个时钟沿计数器值加1

3、进位输出carry应该与4\'b1001同周期输出

4、异步复位

module cnt10 ( clk, rst_n, carry, cnt );

  input clk, rst_n;
  output carry;
  output [3:0] cnt;
  reg carry;
  reg [3:0] cnt;
  always @( posedge clk or negedge rst_n )
     begin
        if ( ~rst_n )
         begin
           cnt <= 4\'b0000;
         end
       else if ( cnt == 4\'b1001 )
         begin
           cnt <= 4\'b0000;
         end
      else
         begin
           cnt <= cnt + 4\'b0001;
         end
    end

  always @(posedge clk or negedge rst_n)
  begin
     if(!rst_n)
     begin
        carry <= 1\'b0;
     end
     else if(cnt == 4\'b1000)
     begin
        carry <= 1\'b1;
     end
     else
     carry<= 1\'b0;
  end
  endmodule
View Code

测试程序:

  `timescale 1ns/1ps
  module cnt10_tb();

  reg clk, rst_n;
  wire carry;
  wire [3:0] cnt;

  always #10 clk = ~clk;

  cnt10 cnt10_tb(
   .clk(clk),
  .rst_n(rst_n), 
  .carry(carry), 
  .cnt(cnt) 
   );
  initial
  begin
     clk = 1\'b0;
     rst_n = 1\'b1;
     #10 rst_n = 1\'b0;
     #10 rst_n = 1\'b1;
  end
  endmodule


 波形图:

  在这个十进制计数器中,唯一要注意的一点就是进位位carry变化的时刻,如果是为了使下一级能正确接收到前一级的进位位标识,要在计数到九时使进位位有效;如上图波形所示。

 

以上是关于verilog设计十进制计数器(含进位位)的主要内容,如果未能解决你的问题,请参考以下文章

基于verilog的四位全加器设计

使用74LS83构成4位二进制全加\全减器。 具体要求:1)列出真值表; 2)画出逻辑图; 3)用Verilog HDL仿真

教材例子:4位串行进位全加器这样的verilog代码真的正确吗?

408计算机组成原理—进位计数制

通用8位SPI接口模块——verilog实现

verilog之四位全加器的编译及仿真(用开源免费的软件——iverilog+GTKWave)