目錄
一、實驗目的
二、實驗內容
三、實驗器件
四、實驗原理
五、實驗步驟
六、思考題
一、實驗目的
1、了解算術邏輯運算器(74LS181)的組成和功能。
2、掌握基本算術和邏輯運算的實現方法。
二、實驗內容
設計算數邏輯運算器系統的通路;運用算術邏輯運算器74LS181進行有符號數/無符號數的算術運算和邏輯運算。
三、實驗器件
1. 算術邏輯運算器(74LS181)。
2. 三態門(74LS244)及寄存器(74LS273、74LS373)。
3. RESPACK-8:排阻
4. DIPSWC_8:撥碼開關
5. 7SEG-BCD:顯示一位數字
6. 7SEG-BCD-GRN:顯示一位數字
7. 4078:8輸入端的或門
8. 74LS04 :反相器,非門
9. BUS:總線
10. SW-SPDT:單刀雙擲開關
11. LED-GREEN:用來表示ZF/CF/SF的值
12. LED-RED:用來表示ZF/CF/SF的值
13. LED-YELLOW:用來表示ZF/CF/SF的值。
四、實驗原理
說明:由于筆者能力有限,加上覺得實驗指導的描述專業性、條理性較強,所以摘抄到下文。
本實驗的算術邏輯運算器電路:輸入單元(撥碼開關)用來提供參與運算的數據,輸出單元(數碼顯示管7SEG-BCD/7SEG-BCD-GRN)顯示總線BUS的內容。運算器則由兩個集成電路芯片74LS181以串行進位形式構成8位運算器(ALU):ALU_L4B為低 4 位運算芯片, ALU_H4B 為高4位運算芯片。ALU_L4B 的進位輸出端 CN+4與 ALU_H4B 的進位輸入端CN相連,使低4位運算產生的進位送進高 4位運算中。 ALU_L4B 的進位輸入端CN連接到外來進位端開關ALU_CN,ALU_H4B的進位輸出端 CN+4 經過反相器74LS04,通過三態門接到溢出標志位CF指示燈(CF=1,即ALU運算結果溢出)。
ALU 有三個標志位:溢出標志位CF(最高位產生進位),零標志位ZF(ZF=1,ALU 運算結果為0)和符號標志位SF(SF=1,運算結果為負數;SF=0,運算結果為正數或0)。
ALU 的工作方式可通過設置兩個74LS181芯片的控制信號(ALU_S0、S1、S2、 S3、 M及CN)來實現, 其邏輯功能表如表2-1所示,表中“A”和“B”分別表示參與運算的操作數,“+”表示邏輯或,“加”表示算術求和。
圖 6?????? 74LS181邏輯功能表
注意:+表示或,加表示算數加法,0表示00000000,1表示00000001.
也就是說CN其實控制的是ALU算數器件輸入的,CN=0代表
,CN=1代表
。
運算器ALU的輸出經過三態門(74LS244)和數據總線BUS相連。當運算器使能開關低電平有效(ALU_OE=0)的時候,運算器三個部位的三態門 244狀態為直通:74LS181的控制信號(S0~S3、M、CN)全部連通;74LS181的運算標志位(CF、ZF和 SF)的指示燈全部連通;以及 74LS181 的運算結果輸出到數據總BUS。當 ALU_OE=1 的時候,74LS181停止工作,此時74LS181的輸出端數據為無效數據,與數據總線BUS隔斷。
運算器ALU的兩個數據輸入端分別由兩個數據鎖存器(74LS273)DRA、DRB鎖存,74LS181 將DRA、DRB內的數據作為上述圖6中參與運算的數A和B。由于 DRA、DRB已經把數據暫存,只要74LS181的控制信號不變,那么74LS181的輸出數據也不會發生改變。數據鎖存器 DRA、DRB 的輸入連至數據總線 BUS,在 DRA_CLK、DRB_CLK 端開關出現上升沿跳變的時候,總線 BUS的數據分別打入 DRA、DRB鎖存。
五、實驗步驟
1、放置RESPACK-8和DIPSWC_8,通過總線將這兩個器件連接起來,注意接電源 和接地。 2、放置多個單刀雙擲開關,用來控制S0,S1,S2,S3,CN,M,還有ALU輸出 (低電平有效),DIPSWC_8(低電平有效)輸出和兩個存儲A和B的寄存器,并且都 高電平連接電源,低電平接地。
3、放置兩個74LS244 和 74LS273,DIPSWC_8 與兩個 74LS244 通過總線相連, 74LS244 與 74LS273通過總線相連,74LS244的作用為控制總線上DIPSWC_8的數據流 通,避免與結果數據沖突,74LS273的作用為儲存進行運算的兩個數值。
4、放置兩個74LS181和74LS244,74LS273通過總線與74LS181相連,依次連接單 刀雙擲開關(S0,S1...)和74LS244和74LS181。
5、放置3個74LS244,一個4078,一個74LS04,三個LED,其中一個74LS244與三個LED相連。
6、放置一個7SEG-BCD,一個7SEG-BCD-GRN,用來顯示數字與總線相連。每一個總線都必須命名,總線的命名格式為:name[0..n],name為總線的名字,n為總線數量,與總線相連的每一條線都要命名,格式為:namei,name為相連的總線的名字, i=0,1,2,3.....n
7、啟動仿真前,令(S3,S2,S1,S0,M,CN) = (1,1,1,1,1,1),DRA_CLK = DRB_CLK = 0,SW_BUS=ALU_OE=1;
8、啟動仿真后,SW_BUS=0,使用撥碼開關,選擇一個8位的二進制值0xAA,將 DRA-CLK置為1,將值存進鎖存器DRA,再將DRA-CLK置為0,再次使用撥碼開關, 選擇一個8位的二進制值0x55,將DRB-CLK置為1,將值存進鎖存器DRB,再將 DRB-CLK置為0,再令SW_BUS=1。
說明:本實驗的兩個操作數對于48組操作保持固定,同時0xAA和0x55具有特殊性,能夠體現泛華計算中更多的特殊情況,比如條件信號輸出零標志位ZF=1。
圖 7?????? 0xAA/0x55操作數預裝載,手動產生上升沿信號
9、設置ALU_OE=0,然后改變運算器的控制信號(S3,S2,S1,S0,M,CN),觀察運算器的輸出F和標志位CF、SF、ZF,并且把輸出F填入下表。
圖 8 ????? M=0算術運算,CN=0有進位,4/16種s3s2s1s0運算控制
圖 9?????? M=0算術運算,CN=1無進位,五種細分控制
圖 10????? 0xAA XOR 0x55 (逐位)
六、思考題
1.74LS181 運算器可以區分有符號數運算和無符號數運算么?可以執行無符號數的加法和減法運算么?對于有符號數的運算,74LS181運算器是補碼運算器還是原碼運算器?
這個問題可以參考實驗1思考題1和2的回答。74LS181運算器是可以區分有符號和無符號數的運算的,只需要根據SF和CF進行(組合)判別,就可以實現8位有符號輸入(1)-8位有符號輸出、8位無符號輸入(2)-8位無符號輸出或者9位有符號輸出。
在實驗一中使用M表示加法減法控制,實驗二中?對應減法運算,
對應加法運算,因為ALU的功能更加強大,控制信號也從實驗一簡單的加減法單位控制信號變成了6位控制信號,最多可以對應64種控制情況;再結合條件信號輸出CF位和SF位就可以校驗溢出情況了。結合實驗1的思考題,情況(1)只需要用到SF位、控制信號和操作數的MSB,而情況(2)需要用到控制信號和CF位。
2.在74LS181 運算器的通路中,輸入鎖存器DRA、DRB的作用是什么?假設去掉其中一個輸入鎖存器,使得 74LS181 的輸入直連總線,運算器還能正常工作么?運算結果輸出端連接的74LS244緩沖器的作用是什么?假設去掉輸出端74LS244 緩沖器,使得74LS181 運算器的輸出直連總線,運算器還能正常工作么?
DRA和DRB的作用可能屬于信號邊沿有效型的寄存器而非高低電平有效型的鎖存器,其作用有兩個,一是緩存輸入數據,并確保數據的穩定性和準確性,沒有這兩個寄存器兩個操作數永遠相同,第二點更重要,如果沒有寄存器,ALU輸出使能之后結果會作為操作數再次參與運算,會出現無限計算循環的致命問題。
具有三態門結構的74LS244緩沖器的作用很重要,從電路結構圖可以發現數據輸入和數據輸出總線是同一條,因此在數據輸入端和數據輸出端都需要連接緩沖器;
如果去掉輸入端的緩沖器,由于DRA和DRB的存在,ALU(74LS181)的工作不會受到影響,但是一旦輸出使能之后,數據會通過總線“反流”到撥碼開關處,造成信號沖突——一個在硬件電路設計過程中很忌諱的問題。
而如果去掉的是題目問到的輸出端的緩沖器,同樣會產生信號沖突,因為輸入電路的三態門緩沖器輸出端一定存在高低電平,雖然在斷開左右連接后軟件顯示的是灰色信號,但是實際上數據輸入電路74LS244的輸出端的0-1高低電平,會直接通過總線“反流”到ALU輸出端,和ALU產生的計算輸出相互沖突,直接導致結果不穩定。
3.當74LS181運算器進行無符號數運算的過程中,運算結果的標志位SF有無意義?在有符號數運算過程中,標志位CF的含義是一致的么?如果做兩個有符號數加法“A+0”,標志位CF會置位么?如果做兩個有符號數減法“A-0”,標志位CF會置位么?在什么情況下有符號數的加法會出現標志位CF置位?
這個問題很有意思,和實驗一的思考題、實驗二的思考題1本質是一個問題。把操作數當成無符號類型是,只需要考慮CF位而不需要考慮SF位,因此并無意義,SF就是一個普通的位而非符號位。同理,操作數作為有符號類型輸入時,CF位是沒有意義的,甚至對于溢出的判斷都沒有幫助(除非在內部有使用,并向外部提供專門的溢出標志位),由于74LS181包括前述加法器的封裝特性,和外界不連通,所以也沒有辦法直接使用這種辦法判斷溢出。
筆者認為,A+0和A-0都不會使CF=1;CF=1可能出現在同符號的兩個有符號數相加或者不同符號的兩個有符號數相減時,后者轉化成前者,最終因為兩個操作數的絕對值之和超過了當前位數有符號數的表示范圍而產生溢出(下溢或上溢),8位的表示范圍是[-128,127]。