在數字系統中,使用得最多的時序電路差不多就是計數器了。計數器不僅能夠用于對時鐘脈沖計數,還可以用于分頻、定時、產生節拍脈沖、產生脈沖序列以及進行數字運算等等。
其實,計數也是一種最簡單最基本的運算,就像我們心里默念的計數一樣。不過不同的是,計數器是有一定頻率的計數,具有一定的時間間隔,而我們心里默念的計數的時間間隔不一樣罷了(也就是不夠準確的啦),而計數器就是實現這種運算的邏輯電路,主要是通過對時鐘(上升)脈沖的個數進行計數的。
計數器在我們身邊也很普遍,比如手機中自帶的跑步的計時器、電腦定時關機等等;所以,熟悉掌握計數器,不僅對于學習 Verilog 非常有用,而且,還能鍛煉我們的邏輯能力和更深刻地理解數字電路的工作原理,從而對科技更加感興趣!
一、計數器的 Verilog 代碼實現和 RTL 電路實現
下面是計數器的 Verilog 代碼實現:
module Counters(
input Clk,
input Up, // 可增可減(可逆)計數器
output reg [7:0] Cout = 8'b0000_0000 // 8 位計數器
);
always @(posedge Clk)
if (Up)
Cout <= Cout + 1'b1;
else
Cout <= Cout - 1'b1;
endmodule
下面是計數器的 RTL 電路實現:
計數器的 RTL 電路圖
時鐘信號:Clk(時鐘信號,就是電路的“心臟”,不可或缺);
復位信號:rst_n(復位信號,也是一個合格的電路不應該缺少的一個輸入信號,當復位信號為低電平時,輸出全部置零,這就是所謂的低電平有效)當復位信號為高電平時,開始計數,每一個時鐘信號的上升沿到來就計一次數,每計數滿 256 個時鐘周期為一個輸出循環,輸出置零,然后重新計數;當然,這里為了更好地讀懂代碼,并沒有加入復位信號啊哈哈哈嗝。
計數值信號:Cout(顯示計數值,根據自己設計的需要,可以對位數進行設置,比如最大計數值為 6,那么位數就可以設置為 3 bits)
其實,這個既是計數器,又能當分頻器,而且還能當計時器喲(再者還可以當鬧鐘功能)這三者其實都是息息相關的,但是博主并沒有把分頻器和定時器的功能加上去,其實只需要增加一兩個信號即可,小伙伴們能否想到怎么添加,從而使得這個程序既有計數器的功能,也有分頻器的功能和定時器的功能呢?
-
計數器
+關注
關注
32文章
2261瀏覽量
94982 -
時序電路
+關注
關注
1文章
114瀏覽量
21742 -
RTL
+關注
關注
1文章
385瀏覽量
59948 -
計時器
+關注
關注
1文章
426瀏覽量
32861 -
Verilog設計
+關注
關注
0文章
20瀏覽量
6545
發布評論請先 登錄
相關推薦
評論