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變化的時刻,如果是為了使下一級能正確接收到前一級的進位位標識,要在計數到九時使進位位有效;如上圖波形所示。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM