verilog學習(11)實戰之計數器
一:紋波計數器
1:紋波計數器的面積最小,易於結構化實現。這種計數器的觸發器是前一級輸出數據的邊沿作為時鐘來驅動。前一級的輸出連在後一級的時鐘端,每當時鐘的輸入端口的數據產生了上升沿,輸出就會翻轉。這個計數器必須從一個確定的狀態開始工作,這要求我們要對它復位,否則,計數器的翻轉則沒有意義。3比特的紋波計數器如下圖所示,輸出位Q[0],Q[1],Q[2](圖中未標出)
2:代碼(4bit紋波計數器)
vcs dump的波形
可見,毛刺很大;這是因為紋波計數器中高階觸發器沒有時鐘,只有等到低階觸發器的輸出變化後才能變化,所以當計數器的位寬增大時,這是個線性漸慢器件。在每個時鐘上升沿之後,觸發器的輸出端會出現很多毛刺。然而,各階的進位不會立刻由時鐘傳輸下去,因此和同步計數器相比,功耗和噪聲都減小了。
改進:慢一拍輸出,使用鎖存器將輸出鎖存一拍,再輸出
vcs dump的波形
可見,減少了毛刺,計數正常。
二:同步(超前進位)計數器
1:這類計數器增加了超前進位邏輯,在每個時鐘有效沿對所有寄存器比特進行更新。
同步計數器偶爾會產生極大的瞬時功率,而這種尖峰功率會生成噪聲。
如下圖,每個寄存單元的輸入端口都是由1比特加法器(異或門)驅動;做設計的時候也應該遵循這個原則,組合邏輯後應該跟上寄存器以保證電路的時序。
時鐘連在每個觸發器的時鐘端上,前面寄存器輸出Q‘端進行或操作,然後用異或門進行隔離,直到進位溢出該比特。
2:代碼(4bit同步計數器)
vcs dump波形
三:行為級計數器
1:4bit行為級計數器代碼
vcs dump波形
四:使用pll時鐘,將以上三個計數器放在一起,看計數快慢
verilog學習(11)實戰之計數器