iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
Software Development

數位 IC 設計起手式系列 第 16

Day 16: 計數器概論

  • 分享至 

  • xImage
  •  

學會正反器之後,我們該應用一下了吧!之前提到正反器是一種有記憶的電路,透過這種電路,我們可以有不同的初始狀
態。而我們要介紹的計數器就是其中一種應用。

以 0 ~ 7 計數器來說明。如果以純組合電路來實作,第一秒後,計數器顯示 1 ,但是下一秒他又會是 1 ,因為每次電路結束,計數器就會被初始化為 0 ,而不是接續著計數。因此計數器仰賴正反器來記錄前一個數值,如此就可以實現不同功能的計數器。

今天我們介紹兩種計數器:Johnson Counter, Ring Counter 。這兩種計數器並不是像我們認知的計數器一樣,從 1 開始,接著 2, 3, ...,而是遵照內部訂定的的規則來計數,我覺得是很特別的應用。

Johnson Counter

這種計數器的中文是「詹森計數器」,但我還是習慣以英文來稱呼他。先來看看他的電路圖吧!(圖片來源:Javatpoint)
https://ithelp.ithome.com.tw/upload/images/20230720/20150982yFdNTZNsp9.png

從圖上可以看到 Johnson Counter 的規則其實沒有很複雜,簡單來說就是不斷地往右位移 (shift right) ,而最右邊的位元則是反轉之後放到最左邊的位置。假設四位元初始狀態為 0000 ,那麼下一個狀態為 1000, 1100, ...,最後又會回到 0000。

Johnson Counter 的實作方式大致可以分成兩種:

  1. 根據電路圖實作:先實作正反器,再以四個正反器結合出 Johnson Counter
  2. 透過他的規則,將線路做簡單的順序掉換即可

第一種方式我認為是較困難的,因為我們首先要對正反器的原理有基本的認識,再者在引用模組時,時常發生因觀念不清導致語法錯誤的問題,需要花更多時間來完成。第二種方式就簡單多了!無需太多數位邏輯的概念就可以完成,這也是 Verilog 的強大之處。不過,之後再實作時,我糊欸選用第一種方式,較具有挑戰性。、

Ring Counter

這種計數器叫做「環形計數器」。而種計數器的規則就如其名,不斷將數值做「向右的邏輯位移」(logical right shift) ,就像環形一般。假設四位元初始狀態為 0010 ,那麼下一個狀態就是 0001, 1000, 0100, 0010,如此不斷循環下去。先來看一下電路圖吧! (圖片來源:Wikipedia)
https://ithelp.ithome.com.tw/upload/images/20230721/20150982QW8Q389IFb.png

其實 Ring Counter 跟 Johnson Counter 極相似,不同之處只在於最後一個正反器的輸出是否需要加一個 Not-Gate ,僅此而已。因此做法近乎相同,我們會在下一篇實作這兩種計數器。

後話

這兩種計數器其實是比較特別的計數器,其實計數器還有許多種,如: mod-N 計數器。mod-N 計數器就是平常常見的計數器,可以從 0 數到 N-1 ,共經過 N 個數。另外計數器為了求更加彈性,我們會新增更多功能,如:enable, reset 等。計數器也可分成同步計數器和非同步計數器,取決於時脈的設定。因此計數器千變萬化,大家可以試著設計不同的計數器!


上一篇
Day 15: Blocking & Nonblocking
下一篇
Day 17: 計數器實作
系列文
數位 IC 設計起手式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言