計數器的原理你懂嗎?用Verilog語言更加容易理解

小夥伴們好,小編今天要講的是基於Verilog語言的計數器電路設計。

首先,介紹一下計數器的基本概念:計數其實是一種最簡單最基本的運算,就像我們扳手指計數一樣,不過不同的是,計數器是有一定頻率的計數,具有一樣的時間間隔,而我們扳手指計數的時間間隔不一樣罷了。而計數器就是實現這種運算的邏輯電路,主要是通過對時鐘(上升)脈衝的個數進行計數的。計數器在我們身邊也很普遍,比如手機中自帶的跑步的計數,體育比賽中測試時間的計時器等等,所以,熟悉掌握計數器,不僅對於學習Verilog非常有用,而且,還能鍛鍊我們的邏輯能力和更深刻地理解數字電路的工作原理,從而對科技更加感興趣!

計數器的原理你懂嗎?用Verilog語言更加容易理解

下面是根據計數器的原理,從而編寫出來的代碼Code:

計數器的原理你懂嗎?用Verilog語言更加容易理解

時鐘信號:clk(時鐘信號,就是電路的“心臟”,不可或缺的)

復位信號:rst(復位信號,也是一個合格的電路不應該缺少的一個輸入信號。這裡,當復位信號為低電平時,輸出全部置零)當復位信號為低電平時,開始計數,每一個時鐘信號的上升沿到來就計一次數,每計數滿256個時鐘週期為一個輸出循環,輸出置零,然後重新計數。

計數值信號:out(顯示計數值,根據自己設計的需要,可以對位數進行設置,比如最大計數值為4,那麼位數就可以設置為[2:0])

然後下面是激勵程序TestBench:

計數器的原理你懂嗎?用Verilog語言更加容易理解

仿真結果如圖所示,可以看到,在復位信號無效的時候,當每一個時鐘上升沿到來之後,就會自動計一次數,這樣,就起到了對時鐘進行計數的功能。你想要在多少個時鐘週期之後實現什麼操作,就可以自動設置計數值,代碼中的“256”就是所謂的計數最大值,當計數到“256”的時候,下一個時鐘到來的時候,自動返回“0”值。計數器的功能的實現一目瞭然!

計數器的原理你懂嗎?用Verilog語言更加容易理解

計數器的原理你懂嗎?用Verilog語言更加容易理解

其實,這個既是計數器,又能當分頻器,而且還能當計時器喲(再者還可以當鬧鐘功能)這三者其實都是息息相關的,但是小編並沒有把分頻器和定時器的功能加上去。其實只需要增加一兩個信號即可,小夥伴們能否想到怎麼添加,從而使得這個程序既有計數器的功能,也有分頻器的功能和定時器的功能呢?

大家可以試試,如果有問題的話,歡迎留言討論,小編會一一回復~


分享到:


相關文章: