10進制計數器Verilog編程

計數器不僅能用於對時鐘脈衝計數,還可以用於分頻,定時,產生節拍脈衝序列以及進行數字運算等,分爲同步計數器和異步計數器,在同步計數器中,當時鍾脈衝的輸入時,觸發器的翻轉是同時發生的。而在異步計數中,觸發器的翻轉有先有後,不是同時發生的。

1.同步四位二進制加法計數器:

各觸發器的驅動方程:

T0 = 1;

T1 = Q0

T2 = Q0Q1

T3 = Q0Q1Q2

2.四位10進制的計數器

在四位二進制計數器的基礎上修改,當計算到1001時,則下一個clk狀態回到0000

驅動方程:

T0 = 1;

T1 = Q0Q3`

T2 = Q0Q1

T3 = Q0Q1Q2 + Q0Q3`

其verilog編程比較簡單:用一個always塊即可實現:

`timescale 1ns/10ps
module counter10(clk,rst,count);
input clk,rst;
output [3:0] count;
reg [3:0] q;
assign count = q;

always@(posedge clk)
begin
  if(!rst)
    q <= 0;
  else if(q >= 4'd9)
    q <= 0;
  else
    q <= q + 1;
end
endmodule

編寫一個testbench

module counter10_tb();

reg rst;
reg clk;
wire [3:0] count;

counter10 wt(.clk(clk),.rst(rst), .count(count));

initial 
begin
  rst <= 1;
  clk <= 0;
  #50 rst <= 0;
  #1000 rst <= 1;
  #2000 rst <= 0;
end
always
  #10 clk = ~clk;
endmodule

通過vcs仿真:vcs add10 -R -gui +v2k

得到的波形:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章