如果你對其他計算機組成原理知識感興趣,請考慮閱讀我的專欄:
須知
本文僅作學習筆記使用,僅在CSDN網站發佈,如果在其他網站發現,均爲侵權行爲,請舉報。作者:小王在努力。.
實驗要求
基本要求
-
理解CPU運算器中寄存器的作用
-
設計並驗證寄存器組(至少四個寄存器)
-
利用寄存器或組合邏輯電路實現移位運算功能(至少含左移、右移、循環左移、循環右移四種運算功能)
擴展要求
-
(擴展)實現更多的寄存器
-
(擴展)實現多總線結構寄存器訪問
思考內容
思考隨着寄存器的增多,電路設計的複雜度是什麼比例增大
實驗步驟
一、理論分析
本次實驗需要驗證寄存器組,我們選擇74LS373來充當寄存器,在此處我們選擇用299芯片來實現移位運算功能,包含了左移、右移、循環左移、循環右移,299的功能圖(圖片截自電子發燒友網站)如下:
由於擴展要求:用74LS138配合一個讀開關和寫開關實現選中8個寄存器中的一個並對其進行讀寫控制,所以我們用到了一些與或運算,因此,我們採用74LS04來實現非運算,4073來實現3位與運算、4075來實現3位或運算。
二、實現方法
基礎要求:
四位寄存器的設計:
通過使用74LS245將數據輸入到總線上,然後數據在總線上流動。如果需要進行移位操作,則進入74LS299芯片,並將數據保存在74LS299芯片中,同時關閉74LS245,進行移位操作,最後將數據放回到總線上,數據流動到寄存器輸入端位置,通過74LS138和兩個開關進行與或運算,實現選中並控制寄存器的操作,用74LS138選中寄存器之後,打開寫開關,將數據寫入到選中寄存器中,然後打開讀開關,將數據讀出到總線上。
擴展要求:
八個寄存器的設計:
在四個的基礎上縱向延伸4個寄存器,其重要功能與四個的一樣。
擴展要求:實現138和讀、寫開關與或運算實現選中讀、選中寫功能。
介紹一下讀、寫開關和74LS138進行的與或運算。
通過真值表可得:
OE非=A非+B+C
LE=(A非)與B與(C非)
三、實驗結果分析
四個八位寄存器讀寫:
讓編號爲010的寄存器寫入0001 0001,輸出結果:
讀出結果:
四個寄存器右移(由於篇幅原因,左移右移選擇一個實現):
四個寄存器循環右移(由於篇幅原因,循環左移循環右移選擇一個實現):
八個八位寄存器讀寫:
讓編號爲110的寄存器寫入0001 0001,輸出結果:
讀出結果:
八個寄存器右移(由於篇幅原因,左移右移選擇一個實現):
八個寄存器循環右移(由於篇幅原因,循環左移循環右移選擇一個實現):
四、思考問題
我在增加寄存器的時候,並沒有感到電路設計複雜難度有明顯的提高(不是博主裝X,應該是博主沒有理解題目意思吧!)。
五、問題和解決辦法
一、 299的使用:
在接觸到這個299的芯片的時候,我就納悶了,你說你弄成個輸入輸出分開的不好嗎?非要輸入輸出在一起,不吐槽了,不如正題。
首先我們先看功能圖:
從這張圖上,我們得出,299的功能有:清零、保持、左移、右移和置數功能。但是我們只需要用到他的三個功能:左移、右移和置數功能。
proteus裏面的74LS299:
簡單說一下上面的端口對應:
proteus | 真實端口 |
---|---|
MR | CLR非 |
OE2非 | G2非 |
OE1非 | G1非 |
CLK | CLK |
S1 | S1 |
S0 | S0 |
D7 | SL |
D0 | SR |
看完功能表和端口對應,想必大家對299芯片有了一個初步的認識了,接下來我就來演示如何實現左移功能:
總體來說,想要讓其實現移位,得讓要移位的數據存儲進299芯片內部,也就是第一步,置數,通過查看功能表,只需要將:MR置爲1,OE2非和OE1非置爲0,S1和S0置爲1,D7和D0置爲0。然後讓數據流入,此時撥動CLK,實施置數功能即可,然後改變S1或S0通過撥動CLK來實現自己想要的功能。
具體步驟:
(1).將299的端口值設置爲置數功能(參考功能表進行設置)
(2).打開245,讓245內保存的數據流入總線,同時流經299。
(3).此時總線上有了數據,而且299還設置爲置數功能,此時只需要撥動兩下下CLK,實現這個功能即可。
(4).撥動完一次CLK之後,記得將其復原爲低電平,以便形成下一次上升沿。
(5).此時關閉245,因爲299已經實現了置數功能,也就是將數據保存在了299芯片中了,我們就不需要245的數據了,而且待會299也需要往總線上輸出數據,所以現在需要將245關閉。
(6).此時,我們的299內部已經保存了要移位的數據了,我們只需要設置S0和S1來實現我們想要的功能,此處我將S1置爲0,S0置爲1來實現右移的功能,我們看到,在我設置S1和S0之後,299內部保存的數據就放出來了。
(7).撥動CLK,實現數據右移。
二、74LS373的使用:
我一直以爲74LS373就是一個簡單的鎖存器,其接口OE非是類似“總閘”的一個芯片開關,LE是讓數據流過的開關,結果打錯特錯!
OE非是74LS373的讀開關,此處的讀是講74LS373芯片內鎖存的數據讀出芯片,而LE則是74LS373的寫開關,同理,此處的寫是將外部數據寫入到74LS373中。
六、結論
通過本次實驗,我深刻了解了74LS373的功能,並學會了74LS299芯片的使用,重要的是瞭解了運算器內部寄存器的工作方式,並運用了數電知識來解決自己遇到的問題。
後話
- 首先給大家說一下,博主經常在線,如果有什麼問題或者想法,可以在下方評論,我會積極反饋的。
- 其次還是要請大家能夠多多指出問題,我也會在評論區等候大家!
.