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和八位合併輸出: 但這或許仍不是我們想要的,它只會一位一位的數數,無法定時啊
帶預置和清零的觸發器
我們在構造累加器的時候,加了預置清零的選項,對邊沿觸發器同樣也可以這樣做 電路圖符號 有了這樣的邊沿觸發器,在通過串聯等一系列的方式組成計數器,自然功能會更加強大啦!