1. 程式人生 > >CODE學習筆記五——自動操作(偽): 累加與計數

CODE學習筆記五——自動操作(偽): 累加與計數

咳,還是篇幅問題,自動操作還是用兩篇文章寫吧。

目錄

加法器實現累加

之前的加法器執行加法時需要手動輸入兩個數,運算結果不能儲存,現在我們有了鎖存器,可以嘗試著進行累加計算了; 鎖存器儲存開關斷開,不儲存結果;反之儲存; 第二排開關閉合,進行累加;否則由外界輸入; 沒錯,此處存在的一個問題是,加法器的結果如果進位了,鎖存器無法儲存;當然我們可以通過合併兩個八位加法器來擴充套件運算的位, 但是這並不能完美解決進位儲存問題。

略加改進

上述的累加計算裝置還不甚方便,需要我們頻繁的開關兩個或者至少一個開關,我們希望找到更簡單的方法; 通過對鎖存器進行一些改變,我們可以得到更適合的鎖存器,相對於原來的鎖存器(Or觸發器),下面的電路增加了清零輸入;

稍加改變我們可以得到一個也許跟麻煩但是更傻瓜的累加器; 減少部件以及冗餘過程的結果是重複單一的操作變多了。

計數器

自動操作要達到“自動”水準,就要求我們的電路組合可以對時間進行描述。

邊沿觸發的鎖存器

通過對鎖存器進行一些改變,我們可以得到邊沿觸發的鎖存器,相對於電平觸發,它看起來更像一個“觸發”器 為了使時鐘輸入(Clk)變成觸發型,必須把它自己相反的訊號進行觸發器的迭代;近當時鍾輸入由零變一時資料端資料才得以傳導到輸出端;就像彭的一聲:教學樓的燈亮了; 把訊號由0變1成為正跳變,由1變0稱為負跳變;

D Clk Q ~Q
0 + 0 1
1 + 1 0
X 0 Q ~Q

說得形象些,把鎖存器看作二級水庫; 當Clk為0時,一級閘門開啟,二級關閉,D傳到到一半; 當Clk為1時,一級閘門關閉,二級開啟,D才能繼續傳輸;

振盪器的妙用:分頻器

如果把振盪器(clock)接到時鐘輸入上會有什麼結果呢? (這裡假設觸發器運算頻率遠大於振盪器頻率) (Clk左側的三角形標誌代表邊沿觸發) 我們看看隨時間過去的真值表

D Clk Q ~Q
1 0 0 1
1 1(+) 1 0
0 0 1 0
0 1(+) 0 1
1 0 0 1

或許時序圖更好觀察

對,這個電路成倍降低了原clock的頻率! 這就是分頻器;

分頻器的串並聯:計數器

我們嘗試著把上述分頻器進行“串聯” Clk為原始頻率,Q1半之,Q2再半之,Q3又半之; 我們把這四個輸出一起來看 再旋轉90度,然後就有下表啦!

二進位制 十進位制 二進位制 十進位制
0000 0 1000 8
0001 1 1001 9
0010 2 1010 10
0011 3 1011 11
0100 4 1100 12
0101 5 1101 13
0110 6 1110 14
0111 7 1111 15

不正是自動計數的計數器嗎!!!

八位行波計數器

上述的計數器僅僅串聯了三個,如果我們串聯七個或者是更多就可以得到計數範圍更廣的計數器啦,比如: Clk和八位合併輸出: 但這或許仍不是我們想要的,它只會一位一位的數數,無法定時啊

帶預置和清零的觸發器

我們在構造累加器的時候,加了預置清零的選項,對邊沿觸發器同樣也可以這樣做 電路圖符號 有了這樣的邊沿觸發器,在通過串聯等一系列的方式組成計數器,自然功能會更加強大啦!