《計算機組成原理》課程設計報告——TEC-2實驗系統——微程序設計

一、目的和要求

深入瞭解計算機各種指令的執行過程,以及控制器的組成,指令系統微程序設計的具體知識,進一步理解和掌握動態微程序設計的概念;完成微程序控制的特定功能計算機的指令系統設計和調試。

二、實驗環境

1.    TEC-2機一臺

2.    電腦一臺

3.    TEC-2模擬軟件一套

三、具體內容

1、分析TEC-2機的功能部件組成,分析TEC-2機支持的指令格式等。

1.TEC-2機的控制器部件的組成

TEC2機控制器部件的關鍵內容包括:

(1)由7片S6116隨機讀寫存儲器芯片組成的56位字長的徽程序控制存儲器,用於存放TEC-2機的微程序。其內容在剛加電時不定,加電後將首先從2片ROM(LS2716芯片)中讀出固化的、用於實現53條機器指令的做程序,經組織後寫入這一控制存器,這一過程稱爲裝入微碼。裝入完成後,將從監控程序的零地扯執行指令,完成TEC-2機的啓動過程。這之後,還可以用LDMC指令按規定的辦法向控制存俙器寫入新的微程序,以實現新的機器指令。從簡化邏輯框圖上可以看到,控制存儲器的地址爲µRA9~O,讀出的信息送微指令流水線寄存器PLR。

(2)做指令寄存器PLR由7片8位的寄存器芯片(6片LS374和1片LS273)組成,用於存放當前做指令的內容,更具體的說明將在後面給出。

(3)微程序定序器AM2910芯片(其內部結構、引腳信號和運行原理等稍候詳細說明),是做程序控制器中非常關鍵、也是稍微難懂一點的部分。在學習中要正確理解。它的核心功能是依據機器的運行狀態與當前微指令的有關內容等,正確地形成下一條微指令的地址,以保證微程序按要求的微指令序列關係自動地逐條銜接執行。

(4)程序計數器PC和當前指令地址寄存器IP,是用運算器通用寄存器組中的兩個選定的寄存器R5和R6實現的,這在圖上見不到。

(5)指令寄存器IR,用於存放當前正在執行的指令內容。

(6)爲AM2910提供輸入地址信號的配套線路,包括

①由兩片S2716ROM芯片組成的MAPROM,它變指令寄存器中的操作碼轉換成一段微程序的入口地;

②由片S125和1片S244組成的接收內部總線的IB9~O信號的選擇門電路,它把由水平板上的開關提供的微指令地址送AM2910的地址輸入端;

③由1片LS125和微指令寄存器的PLR55~48組成的一組地址輸入,把當前微指令中的後續地址B55~46送入AM2910的地址輸入端:請注意,1片LS125(共4位獨立的輸入和輸出端)分成兩組(每組兩位)分別用於②和③兩項用途。

這三組信號均爲10位寬,且爲互斥關係,分別由AM2910芯片提供的3個互斥控制信號/MAP、/VECT和/PL加以選通。

(7)由AM2910芯片的10位地址輸出信號驅動的配套電路,包括

①由一片LSI75和一片LS374寄存器組構成的記億電路,用於保存當前微指令的地址,其輸出僅送往顯示燈部分,以顯示當前微指令的地址

②由3片LS257(四位的二選一電路)芯片構成的微控存的地址選擇形成電路,它實現在AM2910的10位輸出地址與存儲器地址寄存器的低10位地址之間的選擇,結果送往微控存的地址輸入端,用於完成微控存單元的讀寫操作;選擇信號是Smux。

③與此有關的還有3片計數器芯片1s161組成的地址計數器電路,其輸出(共10位)通過兩片LS244與剛提到的3片LS257的10位輸出形成“線或"關係,用計數器的一個輸出端Y11實現二者之間的選擇,Y11爲0時,pRA9pRAO是計數器的輸出信號,提供完成裝入微碼過程的微控存的地址,Y11爲1時,表明裝入微碼的過程已結束,微控存的地址uRA9uRA0爲3片LS257的輸出信號,以完成機器指令運行過程中的微控存的讀、寫(寫僅用於LDMC指令)操作。

(8)由2片LS2716ROM芯片組成的、固化的微碼保存電路及讀寫控制電路。這是爲機器加電後完成裝入微碼所配備的專用線路,除2片LにS2716外,還有前邊提到的3片LS161芯片(計數器),1片LS61芯片,2片LS244、1片Gal20v8、1片LS74、1片LS23和1片LS00.其連接關係在邏輯線路圖(二)的右下部分。

2、TEC-2機支持的指令格式

TEC-2機指令系統,採用6位操作碼,故最多支持64條基本指令,其中53條指令已由設計者實現,微程序固化在ROM芯片中,其餘11條留給實驗人員執行實現。

TEC-2機的基本指令格式比較固定。從指令長度區分,有單字指令和雙字指令,用戶也可以實現三字指令;從操作數的個數區分,有無操作數指令、單操作數指令和雙操作數指令;從支持的基本尋址方式區分,有寄存器尋址、寄存器間接尋址、立即數尋址、變址尋址、相對尋址、絕對尋址和堆棧尋址等方式;從指令功能上看,最常用的指令類型和運算是比較齊全的。

爲了方便理解和記憶,把TEC-2機的指令格式歸納爲如下形式:

單字指令僅用一個指令字。

雙字指令用兩個指令字,此時第二個指令字的內容可能是立即數、一個絕對地址或一個變址位移量。

第一個指令字分爲三個主要部分。

最高6位是操作碼。從這個意義上講,TEC-2機的基本指令是固定長度的操作碼結構。最多支持64條基本指令。

中間的兩位,即9、8兩位是條件碼,只能把他用作條件轉移指令的判斷條件。這兩位的值爲00、01、10和11時,分別選擇以處理機狀態字中的C、Z、V和S的值作爲判斷條件。從這個意義上講,我們也可以認爲這兩位是指令的擴展操作碼。由於除了條件轉移指令之外,其餘的指令均不使用這兩位,故我們可以用這兩位擴展新的指令,而不會影響原來的指令功能。

最低的8位有多種用法:

(1)這8位用於給出入/出指令的入/出端口地址。例如,已規定第一個串行口地址爲80h和81h,第二個串行口地址爲82h和83h。並行口、DMA口等都可以被分配幾個合理的地址,以實現入/出接口的各種實驗。

(2)這8位用於給出相對尋址的位移量,其範圍是從-128到+127之間,因此相對地址應在當前指令地址向前向後總共256個字的範圍之內。實現相對地址計算時,這個位移量的最高位用符號位,補碼形式,與16位的當前指令地址(放在IP寄存器中,即增量前的PC值)相加時,這一符號位要擴展到15~8這高8位上去。

(3)這8位被分爲兩個4位的字段,用於給出的所用的通用寄存器編號。對雙操作數指令,這裏可是給出目的與源兩個操作數所在的寄存器編號。對單操作數指令,只用源或目的中的一個操作數,此時,可能用到某一個4位字段,另一個4位字段不用。需要強調的一點是,寄存器用於給出操作數、操作數地址,或用作變址寄存器。

2、使用TEC-2仿真軟件進行微指令級的設計和調試,完成微程序控制的特定功能計算機的指令設計。

(1)把用絕對地址表示的內存單元ADDR1中的內容與內存單元ADDR2中的內容相加,結果存於內存單元ADDR1中。

指令格式:D8××,ADDR1,ADDR2,   三字指令(控存入口110H

功能:    [ADDR1]=[ADDR1] + [ADDR2]

畫出微指令流程圖

微指令詳細設計

設計分析:

根據指令的功能和指令格式,先讀取地址ADDR1單元內容暫時放置於Q寄存器中,然後把PC指向的地址給AR,然後再讀取地址ADDR2單元內容,同時與Q寄存器內容相加,結果也暫存放在Q寄存器中,此時進行PC-1→AR操作,將PC指向地址的上一個地址給AR,此時由於地址寄存器AR中存放的是地址ADDR2,因此只要將Q寄存器內容寫入存儲器就可以完成指令功能。此外,微程序中必須實現兩次PC+1→PC操作,才能確保PC的正確走向。

微程序:

PC→AR,PC+1→PC:   0000   0E00   A0B5   5402

MEM→AR:            0000   0E00   10F0   0002

MEM→Q:             0000    0E00   00F0   0000

PC→AR:              0000    0E00   90B0   5002

MEM→AR:            0000    0E00   10F0   0002

MEM+Q→Q:           0000    0E01   00E0   0000

PC-1→AR:             0000   0E00   91B0   5402

PC+1→PC:             0000   0E00   B0B0   5400

MEM→AR:            0000   0E00   10F0   0002

Q→MEM,CC#=0:                0029   0300   1020   0010

指令分析:

PC→AR,PC+1→PC: 0000 0E00 A0B5 5402  程序計數器加1,開闢1個內存單元

    0     0      0     E      0      0     A     0      B     5      5      4     0     2

0000

0000

0000

1110

0000

0000

1010

0000

1011

0101

0101

0100

0000

0010

(B2-B0)DC2:2/GAR地址寄存器接收,故DC2爲010

(B6-B4)DC1:未向IB總線發送控制,故DC1爲000

(B7)SA=0,作Am2901,即0000

(B3)SB=0,作Am2901,即0000

(B9 B8)SSH:未移位,即00

(B11 B10)SCI:自加1

(B15-B12)B口:使用了寄存器R5,即程序計數器PC,即0101

(B19-B16)A口:使用了寄存器R5,即程序計數器PC,即0101

(B22-B20)MI2-0:此時ALU的R端輸入爲0,S端輸入爲B

(B26-B24)MI5-3:運算功能選擇爲“R+S”,即執行+1功能

(B30-B28)BI8-6:有返回值,且返回值返回至B,而Y的輸出選擇爲A

(B31 B27 B23)MI0#,REQ,WE#:三位用於控制內外數據總線的讀和寫,此處不操作,故取10X

(B34-B32)SST:狀態位不需進行判斷,即爲000

(B35)備用位爲0

(B36)SC        CC#始終低電平有效,即SC=000,CC=0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即爲順序執行

(B55-B44)下地址:由於順序執行,並未使用下地址,故下地址爲0

 

MEM→AR:        0000 0E00 10F0 0002  將指令地址送AR(ADDR1)

  0      0     0      E     0      0      1     0      F     0      0      0     0      2

0000

0000

0000

1110

0000

0000

0001

0000

1111

0000

0000

0000

0000

0010

(B2-B0)DC2:地址寄存器接收,故DC2爲010

(B6-B4)DC1:未向IB總線發送控制,故DC1爲000

(B7)SA=0,作Am2901,即0000

(B3)SB= 0,作Am2901,即0000

(B9 B8)SSH:未移位,即00

(B11 B10)SCI:未進位.,即00

(B15-B12)B口:未使用寄存器,故爲0000

(B19-B16)A口:未使用寄存器,故爲0000

(B22-B20)MI2-0:此時ALU的R端輸入爲D(外部數據),S端輸入爲0

(B26-B24)MI5-3:運算功能選擇爲“R+S”,即執行D+0

(B30-B28)BI8-6:沒有返回值, Y的輸出選擇爲F

(B31 B27 B23)MI0#,REQ,WE#:三位用於控制內外數據總線的讀和寫,此處爲存儲器讀,故取001

(B34-B32)SST:狀態位不需進行控制,故爲000

(B35)備用位爲0

(B36)SC        CC#始終低電平有效,即SC=000,CC=0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即爲順序執行

(B55-B44)下地址:由於順序執行,並未使用下地址,故下地址爲0

[MEM]→Q: 0000 0E00 00F0 0000  將內存單元中的數據送入Q寄存器

  0      0      0     E     0      0      0     0      F      0     0      0      0     0

0000

0000

0000

1110

0000

0000

0000

0000

1111

0000

0000

0000

0000

0000

(B2-B0)DC2:寄存器未接收,故DC2爲000

(B6-B4)DC1:未向IB總線發送控制,故DC1爲000

(B7)SA=0,作Am2901,即0000

(B3)SB=0,作Am2901,即0000

(B9 B8)SSH:未移位,爲00

(B11 B10)SCI:未進位,爲00

(B15-B12)B口:未使用寄存器,故爲0000

(B19-B16)A口:未使用寄存器,故爲0000

(B22-B20)MI2-0:此時ALU的R端輸入爲D(外部數據),S端輸入爲0

(B26-B24)MI5-3:運算功能選擇爲“R+S”,即執行D+0

(B30-B28)BI8-6:有返回值,且返回值返回至Q,而Y的輸出選擇爲F     ,故此處爲000

(B31 B27 B23)MI0#,REQ,WE#:存儲器讀即取001

(B34-B32)SST:狀態位不需進行控制,故爲000

(B35)備用位爲0

(B36)SC        CC#始終低電平有效,即爲0000

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即爲順序執行,

(B55-B44)下地址:由於順序執行,並未使用下地址,故下地址爲0

PC→AR:              0000    0E00   90B0  5002    開闢1個內存單元

  0      0     0      E     0      0      9     0      B     0      5      0     0      2

0000

0000

0000

1110

0000

0000

1001

0000

1011

0000

0101

0000

0000

0010

(B2-B0)DC2:2/GAR地址寄存器接收,故DC2爲010

(B6-B4)DC1:未向IB總線發送控制,故DC1爲000

(B7)SA=0,作Am2901,即0000

(B3)SB=0,作Am2901,即0000

(B9 B8)SSH:未移位,即00

(B11 B10)SCI:未移位,即00

(B15-B12)B口:使用了寄存器R5,即程序計數器PC,即0101

(B19-B16)A口:未使用寄存器,故爲0000

(B22-B20)MI2-0:此時ALU的R端輸入爲0,S端輸入爲B

(B26-B24)MI5-3:運算功能選擇爲“R+S”,即執行0+B

(B30-B28)BI8-6:沒有返回值, Y的輸出選擇爲F

(B31 B27 B23)MI0#,REQ,WE#:三位用於控制內外數據總線的讀和寫,此處不操作,故取10X

(B34-B32)SST:狀態位不需進行判斷,即爲000

(B35)備用位爲0

(B36)SC        CC#始終低電平有效,即SC=000,CC=0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即爲順序執行

(B55-B44)下地址:由於順序執行,並未使用下地址,故下地址爲0

MEM→AR:            0000   0E00  10F0  0002 將指令地址送AR(ADDR2)

  0      0     0      E     0      0      1     0      F     0      0      0     0      2

0000

0000

0000

1110

0000

0000

0001

0000

1111

0000

0000

0000

0000

0010

MEM+Q→Q:       0000 0E01 00E0 0000 完成加法([ADDR1] + [ADDR2]→Q)

  0      0     0      E     0      1      0     0      E     0      0      0     0      0

0000

0000

0000

1110

0000

0001

0000

0000

1110

0000

0000

0000

0000

0000

(B2-B0)DC2:寄存器未接收,故DC2爲000

(B6-B4)DC1:未向IB總線發送控制,故DC1爲000

(B7)SA=0,作Am2901,即0000

(B3)SB=0,作Am2901,即0000

(B9 B8)SSH:未移位,爲00

(B11 B10)SCI:未進位,爲00

(B15-B12)B口:未使用寄存器,故爲0000

(B19-B16)A口:未使用寄存器,故爲0000

(B22-B20)MI2-0:此時ALU的R端輸入爲D(外部數據),S端輸入爲Q

(B26-B24)MI5-3:運算功能選擇爲“R+S”,即執行D+Q

(B30-B28)BI8-6:有返回值,且返回值返回至Q,而Y的輸出選擇爲F     ,故此處爲000

(B31 B27 B23)MI0#,REQ,WE#:存儲器讀即取001

(B34-B32)SST:狀態位控制,接受ALU的標誌位輸出值故爲001

(B35)備用位爲0

(B36)SC        CC#始終低電平有效,即爲0000

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即爲順序執行,

(B55-B44)下地址:由於順序執行,並未使用下地址,故下地址爲0

PC-1→AR:       0000  0E00  91B0  5402 將PC指向地址的上一個地址給AR

  0      0     0      E     0      0      9     1      B     0      5      4     0      2

0000

0000

0000

1110

0000

0000

1001

0001

1011

0000

0101

0100

0000

0010

(B2-B0)DC2:2/GAR地址寄存器接收,故DC2爲010

(B6-B4)DC1:未向IB總線發送控制,故DC1爲000

(B7)SA=0,作Am2901

(B3)SB=0,作Am2901

(B9 B8)SSH:未移位,即00

(B11 B10)SCI:自加1

(B15-B12)B口:使用了寄存器R5,即程序計數器PC,即0101

(B19-B16)A口:未使用寄存器,故爲0000

(B22-B20)MI2-0:此時ALU的R端輸入爲0,S端輸入爲B

(B26-B24)MI5-3:運算功能選擇爲“S-R”,即執行-1功能

(B30-B28)BI8-6:沒有返回值, Y的輸出選擇爲F

(B31 B27 B23)MI0#,REQ,WE#:三位用於控制內外數據總線的讀和寫,此處不操作,故取10X

(B34-B32)SST:狀態位不需進行判斷,即爲000

(B35)備用位爲0

(B36)SC        CC#始終低電平有效,即SC=000,CC=0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即爲順序執行

(B55-B44)下地址:由於順序執行,並未使用下地址,故下地址爲0

PC+1→PC:             0000   0E00   B0B0   5400 程序計數器加1

  0      0     0      E     0      0      B     0      B     0      5      4     0      0

0000

0000

0000

1110

0000

0000

1011

0000

1011

0000

0101

0100

0000

0000

(B2-B0)DC2:寄存器未接收,故DC2爲000

(B6-B4)DC1:未向IB總線發送控制,故DC1爲000

(B7)SA=0,作Am2901

(B3)SB=0,作Am2901

(B9 B8)SSH:未移位,即00

(B11 B10)SCI:自加1

(B15-B12)B口:使用了寄存器R5,即程序計數器PC,即0101

(B19-B16)A口:未使用寄存器,故爲0000

(B22-B20)MI2-0:此時ALU的R端輸入爲0,S端輸入爲B

(B26-B24)MI5-3:運算功能選擇爲“R+S”,即執行+1功能

(B30-B28)BI8-6:有返回值,且返回值返回至B,而Y的輸出選擇爲F

(B31 B27 B23)MI0#,REQ,WE#:三位用於控制內外數據總線的讀和寫,此處不操作,故取10X

(B34-B32)SST:狀態位不需進行判斷,即爲000

(B35)備用位爲0

(B36)SC        CC#始終低電平有效,即SC=000,CC=0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即爲順序執行

(B55-B44)下地址:由於順序執行,並未使用下地址,故下地址爲0

MEM→AR:         0000   0E00   10F0   0002 將指令地址送AR(ADDR1)

  0      0     0      E     0      0      1     0      F     0      0      0     0      2

0000

0000

0000

1110

0000

0000

0001

0000

1111

0000

0000

0000

0000

0010

Q→MEM,CC#=0:0029  0300  1020  0010 將結果送入ADDR3,低電平有效

  2      9      0      3     0      0     1      0      2     0      0      0     1     0

0010

1001

0000

0011

0000

0000

0001

0000

0010

0000

0000

0000

0001

0000

(B2-B0)DC2:寄存器未接收,故DC2爲000

(B6-B4)DC1:向IB總線發送運算器的指令,故DC1爲001

(B7)SA=0,作Am2901

(B3)SB=0,作Am2901

(B9 B8)SSH:未移位,即00

(B11 B10)SCI:未進位,即00

(B15-B12)B口:未使用寄存器,故爲0000

(B19-B16)A口:未使用寄存器,故爲0000

(B22-B20)MI2-0:此時ALU的R端輸入爲0,S端輸入爲Q

(B26-B24)MI5-3:運算功能選擇爲“R+S”,即執行0+Q

(B30-B28)BI8-6:沒有返回值,Y的輸出選擇爲F

(B31 B27 B23)MI0#,REQ,WE#:三位用於控制內外數據總線的讀和寫,此處爲將Q寄存器中值寫入內存單元,故取000

(B34-B32)SST:未用狀態,故爲000

(B35)備用位爲0

(B36)SC        此處低電平有效,故取SCC爲000,SC爲0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第3#命令,即爲條件轉移,低電平有效,有效時,轉入下地址

(B55-B44)下地址:此命令爲最後一條命令,若指令跳轉,將轉入A4H,即下地址爲29

 

 

(2)將一通用寄存器內容減去某內存單元內容,結果放在另一寄存器中。

指令格式:E0 DR SR,ADDR (SR,DR源、目的寄存器各4位)雙字指令(控存入口130H

功能:    DR=SR-[ADDR]

畫出微指令流程圖

微指令詳細設計

設計分析:

根據指令的功能和指令格式,先讀取地址ADDR單元內容暫時放置於Q寄存器中,然後再讀取內存單元中的DATA,同時與Q寄存器內容相減,結果存放在DR寄存器中。

微程序:

PC→AR,PC+1→PC:             0000  0E00  A0B5  5402 

當前程序計數器內容送地址寄存器,爲讀取操作數地址做準備;程序計數器指向下一單元地址

MEM→AR:                   0000  0E00  10F0   0002 

從主存讀取第一個操作數地址送AR,爲讀取操作數做準備

SR - MEM →DR:           0029  0301  31D0     0088 

寄存器SR存放的操作數減去ADDR單元內容,並存入DR

指令分析:

PC→AR,PC+1→PC: 0000  0E00  A0B5  5402  程序計數器加1

  0      0      0      E     0      0      A     0     B     5      5      4     0      2

0000

0000

0000

1110

0000

0000

1010

0000

1011

0101

0101

0100

0000

0010

(B2-B0)DC2:在本條微碼中,地址寄存器接收,故DC2爲010

(B6-B4)DC1:未向IB總線發送控制,故DC1爲000

(B7)SA:爲0,作Am2901

(B3)SB:爲0,作Am2901

(B9 B8)SSH:未移位

(B11 B10)SCI:未進位

(B15-B12)B口:使用了寄存器R5,即程序計數器PC

(B19-B16)A口:使用了寄存器R5,即程序計數器PC

(B22-B20)MI2-0:此時ALU的R端輸入爲0,S端輸入爲B

(B26-B24)MI5-3:運算功能選擇爲“R+S”,即執行+1功能

(B30-B28)BI8-6:有返回值,且返回值返回至B,而Y的輸出選擇爲A

(B31 B27 B23)MI0#,REQ,WE#:三位用於控制內外數據總線的讀和寫,此處不操作,故取10X

(B34-B32)SST:未用狀態,故爲000

(B35)備用位爲0

(B36)SC        未用條件碼,故爲0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即爲順序執行

(B55-B44)下地址:由於順序執行,並未使用下地址,故下地址爲0

②MEM→AR:                   0000  0E00  10F0   0002  將指令地址送AR

  0      0      0      E     0      0     1      0     F      0     0      0     0      2

0000

0000

0000

1110

0000

0000

0001

0000

1111

0000

0000

0000

0000

0010

(B2-B0)DC2:在本條微碼中,地址寄存器接收,故DC2爲010

(B6-B4)DC1:未向IB總線發送控制,故DC1爲000

(B7)SA:爲0,作Am2901

(B3)SB:爲0,作Am2901

(B9 B8)SSH:未移位,即00

(B11 B10)SCI:未進位,即00

(B15-B12)B口:未使用寄存器,故爲0

(B19-B16)A口:未使用寄存器,故爲0

(B22-B20)MI2-0:此時ALU的R端輸入爲D(外部數據),S端輸入爲0

(B26-B24)MI5-3:運算功能選擇爲“+S”,即執行D+0

(B30-B28)BI8-6:沒有返回值, Y的輸出選擇爲F

(B31 B27 B23)MI0#,REQ,WE#:三位用於控制內外數據總線的讀和寫,此處爲存儲器讀,故取001

(B34-B32)SST:未用狀態,故爲000

(B35)備用位爲0

(B36)SC        未用條件碼,故爲0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第14#命令,即爲順序執行

(B55-B44)下地址:由於順序執行,並未使用下地址,故下地址爲0

③SR - MEM →DR:   0029  0301  31D0  0088  完成減法,最後結果送寄存器

  2      9      0      3      0     1     3      0     D      0     0      0     8      8

0010

1001

0000

0011

0000

0001

0011

0000

1101

0000

0000

0000

1000

1000

(B2-B0)DC2:在本條微碼中,,寄存器未接收,故DC2爲000

(B6-B4)DC1:未向IB總線發送控制,故DC1爲000

(B7)SA:用指令給ALU的R端賦值,故爲1

(B3)SB:用指令給ALU的S端賦值,故爲1

(B9 B8)SSH:未移位

(B11 B10)SCI:未進位

(B15-B12)B口:未使用寄存器,故爲0000

(B19-B16)A口:未使用寄存器,故爲0000

(B22-B20)MI2-0:此時ALU的R端輸入爲D(外部數據),S端輸入爲A,即爲101

(B26-B24)MI5-3:運算功能選擇爲“S-R”

(B30-B28)BI8-6:有返回值,且返回值返回至B,而Y的輸出選擇爲F

(B31 B27 B23)MI0#,REQ,WE#:三位用於控制內外數據總線的讀和寫,此處是讀取內存單元內容,並被SR減,故取001

(B34-B32)SST:由運算帶來的狀態保存,故爲001

(B35)備用位爲0

(B36)SC         此處低電平有效,故取SCC爲000,SC爲0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第3#命令,即爲條件轉移,低電平有效,有效時,轉入下地址

(B55-B44)下地址:此命令爲最後一條命令,若指令跳轉,將轉入A4H,即下地址爲29

 

(3)轉移指令。判斷兩個通用寄存器內容是否相等,若不相等則轉移到指定絕對地址,否則順序執行。

指令格式:E9 DR SR,ADDR  雙字指令(控存入口150H

功能:    if  DR!=SR goto  ADDR  else 順序執行。

畫出微指令流程圖

微指令詳細設計

設計設計:

利用指令的CND字段,即IR10~8,令IR10~8=101,即CC=\Z

則當DR==SR時Z=1,微程序不跳轉,接着執行MEM→PC(即ADDR→PC)

而當DR!=SR時Z=0,微程序跳轉至A4。

微程序設計:

DR-SR                                 0000 0E01 9190 0088

PC→AR,PC+1→PC,CC#=CND       0029 03E0 A0B5 5402

MEM→PC,CC#=0                    0029 0300 20F0 5000

指令分析:

DR - SR→DR         0000  0E01  9190  0088 

SR內容減DR內容,若相等,則標誌符Z=1,否則Z=0

    0      0      0     E     0     1      B     1      9      0     0      0     8      8

0000

0000

0000

1110

0000

0001

1011

0001

1001

0000

0000

0000

1000

1000

(B2-B0)DC2:在本條微碼中,,寄存器未接收,故DC2爲000

(B6-B4)DC1:未向IB總線發送控制,故DC1爲000

(B7)SA:用指令給ALU的R端賦值,故爲1

(B3)SB:用指令給ALU的S端賦值,故爲1

(B9 B8)SSH:未移位

(B11 B10)SCI:未進位

(B15-B12)B口:未使用寄存器,故爲0000

(B19-B16)A口:未使用寄存器,故爲0000

(B22-B20)MI2-0:此時ALU的R端輸入爲A,S端輸入爲B,即爲001

(B26-B24)MI5-3:運算功能選擇爲“S-R”

(B30-B28)BI8-6:有返回值,且返回值返回至B,而Y的輸出選擇爲F

(B31 B27 B23)MI0#,REQ,WE#:三位用於控制內外數據總線的讀和寫,此處不操作,故取10X

(B34-B32)SST:由運算帶來的狀態保存,故爲001

(B35)備用位爲0

(B36)SC         此處低電平有效,故取SCC爲000,SC爲0

(B39-B37)SCC   

(B43-B40)CI3-CI0:由於順序執行,並未使用下地址,故下地址爲0

PC→AR,PC+1→PC,CC#=CND     0029  03E0  A0B5  5402

當前程序計數器內容送地址寄存器,條件轉移信號CC#=CND,即判斷Z是否爲1,若爲0則中斷條件成立;程序計數器指向下一單元地址

    2     9     0      3      E      0     A     0      B     5     5      4      0     2

0010

1001

0000

0011

1110

0000

1010

0000

1011

0101

0101

0100

0000

0010

((B2-B0)DC2:2/GAR地址寄存器接收,故DC2爲010

(B6-B4)DC1:未向IB總線發送控制,故DC1爲000

(B7)SA=0,作Am2901

(B3)SB=0,作Am2901

(B9 B8)SSH:未移位

(B11 B10)SCI:自加1

(B15-B12)B口:使用了寄存器R5,即程序計數器PC,即0101

(B19-B16)A口:使用了寄存器R5,即程序計數器PC,即0101

(B22-B20)MI2-0:此時ALU的R端輸入爲0,S端輸入爲B

(B26-B24)MI5-3:運算功能選擇爲“R+S”,即執行+1功能

(B30-B28)BI8-6:有返回值,且返回值返回至B,而Y的輸出選擇爲A

(B31 B27 B23)MI0#,REQ,WE#:三位用於控制內外數據總線的讀和寫,此處不操作,故取10X

(B34-B32)SST:狀態位不需進行判斷,即爲000

(B35)備用位爲0

(B36)SC     用到IR10-8則SC置0  

(B39-B37)SCC  題中需要用到IR10-8所以SCC選擇7則爲111 

(B43-B40)CI3-CI0:Am2901命令第3#命令,即爲條件轉移

   (B55-B44)下地址:由於條件轉移,若判斷相等,則順序執行,若不相等,則指令跳轉,將轉入A4H,即下地址爲29

MEM→PC,CC#=0         0029  0300  30F0  5000

取內存單元ADDR中的地址送PC

   2      9      0     3      0      0     2      0      F     0     5      0      0     0

0010

1001

0000

0011

0000

0000

0010

0000

1111

0000

0101

0000

0000

0000

(B2-B0)DC2:在本條微碼中,,寄存器未接收,故DC2爲000

(B6-B4)DC1:未向IB總線發送控制,故DC1爲000

(B7)SA=0,作Am2901

(B3)SB=0,作Am2901

(B9 B8)SSH:未移位

(B11 B10)SCI:未進位

(B15-B12)B口:使用了寄存器R5,即程序計數器PC,即0101

(B19-B16)A口:未使用寄存器,故爲0000

(B22-B20)MI2-0:R端數據來自主存(外部),S端爲0,即爲111

(B26-B24)MI5-3:運算功能選擇爲“S+R”

(B30-B28)BI8-6:有返回值,且返回值返回至B,而Y的輸出選擇爲A

(B31 B27 B23)MI0#,REQ,WE#:三位用於控制內外數據總線的讀和寫,此處不操作,故取10X

(B34-B32)SST:由運算帶來的狀態保存,故爲001

(B35)備用位爲0

(B36)SC         此處低電平有效,故取SCC爲000,SC爲0

(B39-B37)SCC   

(B43-B40)CI3-CI0:Am2901命令第3#命令,即爲條件轉移

(B55-B44)下地址: 此命令爲最後一條命令,若指令跳轉,將轉入A4H,即下地址爲29

 

3、測試程序設計及調試。

(1)

(一)用E命令輸入微碼:(將微碼輸入到由900H開始的內存單元中)

0000 0E00 A0B5 5402 0000 

0E00 10F0 0002 0000 0E00 

00F0 0000 0000 0E00 90B0 

5002 0000 0E00 10F0 0002 

0000 0E01 00E0 0000 0000 

0E00 91B0 5402 0000 0E00 

B0B0 5400 0000 0E00 10F0 

0002 0029 0300 1020 0010

(二)用D命令查看輸入的微碼:

(三)用A命令輸入加載微碼的程序:(將微碼加載到微控存中)

>A800           ;TEC-2機主存儲器中RAM地址分配爲0800H-0FFFH

0800: MOV R1,900 ;微碼在內存中的首地址

0802: MOV R2,10  ;共10條微指令

0804: MOV R3,100;微碼在微控存中的首地址,題目規定爲100H

0806: LDMC     ;加載微碼指令

0807: RET       ;返回

0808:

(四)用G命令運行加載微碼的程序:

>G800

(五)用A命令輸入程序:

>A820

0820: MOV R0,0023 ;將立即數23賦給寄存器R0

0822: MOV R1,0020 ;將立即數20賦給寄存器R1

0824: MOV [A00],R0;將寄存器R0中數據賦值給內存單元0A00

0826: MOV [A01],R1;將寄存器R0中數據賦值給內存單元0A01

0828: NOP        ;NOP起等待作用,因爲指令佔四個字節,所以用4個NOP

0829: NOP

082A: NOP

082B:  RET       ;返回\

(六)用E命令輸入新指令:

>E828;因爲第一個空操作的地址是0A00所以此處輸入0A01

0828    0000:D400  0000:0A00  0000:0A01 

(七)用U命令查看輸入的程序:(反編譯觀察操作過程)

>U820                                       ;查看

(八)用“G”命令運行程序:

>G820                                       ;運行

(九)用“D”命令查看運行結果:

  在命令行提示符狀態下輸入:

   DA00 (回車)

R

(2)

(一)用E命令輸入微碼:(將微碼輸入到由900H開始的內存單元中)

>E900

0900    0000:0000  0000:0E00  0000:A0B5  0000:5402  0000:0000

0905    0000:0E00  0000:10F0  0000:0002  0000:0029  0000:0301

090A    0000:31D0  0000:0088

;將微程序的16進制代碼輸入到從900H開始的內存單元中

(二)用D命令查看輸入的微碼:

>D900   ;查看單元內容是否正確

(三)用A命令輸入加載微碼的程序:(將微碼加載到微控存中)

>A800

0800: MOV R1,900                           ;微碼在內存中的首地址爲900H

0802: MOV R2,3                        ;微程序一共有9條微指令

0804: MOV R3,130                           ;微碼加載到微控存中的首地址

0806: LDMC                              ;加載微碼指令

0807: RET                                 ;返回

0808:

(四)用G命令運行加載微碼的程序:

>G800                                       ;執行加載微碼程序

(五)用A命令輸入程序:

>A820

0820: MOV R0,0023                   將減數放到通用寄存器R0

0822: MOV R3,0027                   將被減數放到通用寄存器R3

0824: MOV [A00],R0                 將R0中減數放到0A00單元

0826: NOP

0827: NOP

0828: RET

0829:

(六)用E命令輸入新指令:

>E826                                      

;編輯0826開始到0827單元,將新指令輸入,其中SR爲R3, DR爲R2

0826    0000:E023  0000:0A00

(七)用U命令查看輸入的程序:(反編譯觀察操作過程)

>U820                                       ;查看

(八)用“G”命令運行程序:

>G820                                       ;運行

(九)用“D”命令查看運行結果:

  在命令行提示符狀態下輸入:

DA00 (回車)

R

(3)

(一)用E命令輸入微碼:(將微碼輸入到由900H開始的內存單元中)

>E900

0900    0000:0000  0000:0E01  0000:9190  0000:0088  0000:0029

0905    0000:03E0  0000:A0B5  0000:5402  0000:0029  0000:0300

090A    0000:20F0  0000:5000

(二)用D命令查看輸入的微碼:

(三)用A命令輸入加載微碼的程序:(將微碼加載到微控存中)

>A800

0800: MOV R1,900

0802: MOV R2,3

0804: MOV R3,140

0806: LDMC

0807: RET

0808:

(四)用G命令運行加載微碼的程序:

>G800                                       ;執行加載微碼程序

(五)用A命令輸入程序:

兩數相等時;

>A820

0820: MOV R1,0026

0822: MOV R2,0026

0824: NOP

0825: NOP

0826: MOV R1,0023

0828: RET

0829:

(六)用E命令輸入新指令:

>E824

0824    0000:E512  0000:0828

(七)用U命令查看輸入的程序:(反編譯觀察操作過程)

>U820

(八)用“G”命令運行程序:

>G820

(九)用“D”命令查看運行結果:

  在命令行提示符狀態下輸入:

R

(五)*用A命令輸入程序:

兩數不相等時:

>A820

0820: MOV R1,0025

0822: MOV R2,0024

0824: NOP

0825: NOP

0826: MOV R1,0023

0828: RET

0829:

(六)*用E命令輸入新指令:

>E824

0824    0000:E512  0000:0828

(七)*用U命令查看輸入的程序:(反編譯觀察操作過程)

>U820

(八)用“G”命令運行程序:

>G820

(九)用“D”命令查看運行結果:

  在命令行提示符狀態下輸入:

R

4、寫出自己在小組中承擔的任務及發揮的作用。

一人獨立完成

 

四、實驗心得

這個課程設計是對整個學期對計算機組成原理學習的回顧,由於書中內容較多,剛開始時,有點雲裏霧裏的感覺。並且由於對微程序控制器的組成和工作原理不瞭解,導致覺得實驗非常的難,不知從何下手,後來雖然仔細的看了一遍書,又認真聽老師把原理說了一遍,但還是不太知道怎麼做,只是大致瞭解了微程序控制器是如何工作的,後來通過一個微程序設計實例的講解,才基本上知道了該如何設計指令。因爲設計微碼要求對運算器、控制器都要有很深的瞭解,不僅僅是照着書本上的步驟去做,而是要真真正正去設計一些計算機能運行的最底層的指令,因此,做這個課程設計要在短時間內突擊是很困難的,需要平時注意聽老師講的細節上的問題。比如,AM2901外部數據只能從A口進入,結果回存只能通過B口等老師常常強調的,如果沒有注意,實驗起來就會很麻煩。設計過程中與同學有不少的交流,遇到難於理解的地方時就會相互交流各自的想法。

在之前做微程序控制實驗的時候,其實還有一些地方很模糊,比如爲什麼測試新指令的時候要輸入一定數量的NOP空操作,新指令和程序在運行時是怎麼聯繫在一起的,下地址字段的意義,等等。但是通過課程設計,更推動了我對這些問題加深瞭解,對計算機的運行原理比之前要更加透徹了。從這一次實驗中印證一個道理只有通過實踐才能真正的掌握一門知識。

參考文章

https://blog.csdn.net/qq_43594913/article/details/106735166

http://blog.sina.com.cn/s/blog_6392df880100j7ro.html

https://wenku.baidu.com/view/952dc0f648649b6648d7c1c708a1284ac850059f.html

https://blog.csdn.net/denglaiyou4326/article/details/102433098/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章