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