(直接開始正題)
1. 鎖存器
鎖存器是一種具有保持前一個狀態留下的資料不變、讀入資料兩種功能的基本存盤單元,
下圖為RS-鎖存器,它由兩個與非門構成,我們稱上面的與非門為A,下面的與非門為B,那么,A的第一個輸入為R,第二個輸入是B的輸出;B的第一個輸入為S,第二個輸入為A的輸出,

下面先來分析一下,對于R、S不同的輸入情況,RS-鎖存器會產生怎樣的效果,
在《計算機系統概論》這本書上,作者先分析的是R、S同時為1的情況,但這種情況無法產生可推理的輸出,因為在R、S同時為1的情況下,與非門的輸出不具有必然性,必須假設前一個狀態是什么,而這個前一個狀態是怎么來的呢?書上并沒有提及,事實上,根據邏輯常識,只有令R、S其中一個(假設是R)為0,才能讓這個與非門(即A)的輸出確定為1,也就能讓另外一個與非門(即B)的輸入確定為S和1,在這種情況下Q端輸出的是1,也就是書上說的“置1”操作;相反地,若S為0,R為1,則Q端輸出的結果是0,也就是書上的“置0”操作,這就是所謂的“前一個狀態”的來源,換句話說,只有0/1或1/0的組合,才能讓鎖存器讀入資料,注意,只有輸出端Q才能代表鎖存器目前存盤的資料,Q非只是作為互補端存在,在這里也產生了一個新的細節:Q和Q非的資料必須是互補的,否則就會出現例外,這個例外在下下一段會提及,
接下來要講的,就是R、S同時為1的情況,假設Q端已經輸出了一個資料1,也就是鎖存器存下了1這個值,那么在這個即將過去的狀態下,R、S必然是0/1或1/0,假設此時R=1,S=0,Q=1,如果突然將S改為1,B與非門輸出的就是0,也就是Q非,這個輸出的0會到達A與非門的輸入,和R=1共同決定了A的輸出為1,也就是Q=1,很顯然,Q和Q非是互補的,也就是這個操作是合理的,同時留意到,Q的輸出仍為1,這是不是意味著保存的值仍為1不變?同理,假設前一個狀態輸出的是0,也會滿足這樣的結果,即輸出保持0不變,因此可以得到結論:若R、S從0/1狀態切換到1/1狀態,代表的是鎖存器的保存操作,輸出的值不會發生改變,順帶提一句,1/1也代表著鎖存器的初始狀態(即靜態),因為這種狀態下不會讀入或擦除資料,
最后一種情況,即R、S同時為0的情況,也就是我上文提到的會發生例外的情況,和上一段的假設一樣,Q端存下了1這個值,且R=1,S=0,Q=1,如果將R瞬間置為0,B與非門會輸出1,即Q非=1,這個1到達A與非門后,和S共同產生輸出為1,也就是Q=1,這時候就產生矛盾了:Q和Q非都等于1,這顯然違背了輸出端和互補端必須互補的原則,這時鎖存器的狀態就是不確定的,所以絕對不要讓R和S同時為0,
下圖為門控D鎖存器:

和RS-鎖存器相比,門控D鎖存器多了兩個與門,我們稱上面的與門為C,下面的為D,C的輸入一個來源于D,另一個來源于WE信號;同理,D的輸入一個來源于D非,一個來源于WE信號,
WE信號是一個稱為可寫入的信號,和計算機的時鐘相關聯,可以發現,當WE=1時,若D=1,則R=0,S=1,此時寫入的值為1;反之,若D=0,則R=1,S=0,寫入的值為0,可以看出,當WE=1時,寫入的值等于D的值,
但是當WE=0時,R和S將永遠為1,也就是上文提到的靜態,無論D輸入什么,鎖存器保存的值都保持不變,
2. 組合邏輯電路設計
書中以交通警告燈為例,設計了一個組合邏輯電路,
組合邏輯電路包括兩組輸出,一組是指示燈的控制信號,一組是次態的狀態資訊,
下面首先展示指示燈控制信號的真值表:

顯然,Z、Y、X分別代表1、2燈,3、4燈和5燈的開關,
接下來是狀態轉移的真值表:

其中,IN代表電路總開關,S1和S0的組合分別代表了不同的狀態,S1’和S0‘的組合代表了各現態的次態,
此處給出邏輯實作,其中上半部分的實作可憑借譯碼器的基本原理看懂,下面重點要講的就是下方的存盤單元里究竟有什么玄妙,

通過這個邏輯電路的原理可以知道,在每個時鐘周期內,存盤單元的輸出是電路的輸入,而電路的輸出也是存盤單元的輸出,這句話聽著很繞,同樣地,單憑一個門控D鎖存器,要實作起來也很困難,因為在這個情況下,當前周期輸入的時候,會直接把存盤的值覆寫,就相當于編程時想交換兩個數,如果不用一個臨時變數去存其中一個變數當前的值,就無法實作交換了,于是大佬們想了一個辦法,使用“主從鎖存器“,就能解決這個問題,
什么是“主從鎖存器“呢?我們可以看看下面的圖片:

左邊的是鎖存器B,右邊的是鎖存器A,因為時鐘實際上就是WE信號,在時鐘周期的前半段,真正的時鐘信號為1,因此對于A,WE=0,A為只讀狀態,不允許寫入新資料,而將原本存盤的資料輸出到B寄存起來;對于B,WE=1,自然就可以寫入資料了,這就相當于用臨時變數保存的操作,而到了時鐘周期的后半段,時鐘的信號變為0,對于A,WE=1,A可以寫入新資料了;而對于B,WE=0,不允許寫入,所以,通過將一個時鐘周期分割為兩個小周期,相當于在一個周期內實作了利用存盤單元已有資料和更新存盤單元資料的操作,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/275472.html
標籤:其他
下一篇:Java2021春招實習面經整理
