計算機組成與體系結(jié)構(gòu)_第1頁
計算機組成與體系結(jié)構(gòu)_第2頁
計算機組成與體系結(jié)構(gòu)_第3頁
計算機組成與體系結(jié)構(gòu)_第4頁
計算機組成與體系結(jié)構(gòu)_第5頁
已閱讀5頁,還剩98頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

6.1CPU的設(shè)計規(guī)范6.2一個非常簡單CPU的設(shè)計與實現(xiàn)6.3相對簡單CPU的設(shè)計和實現(xiàn)6.4簡單CPU的缺點6.5實例:8085微處理器的內(nèi)部結(jié)構(gòu)第六章CPU設(shè)計CPU的設(shè)計的兩種方法:硬布線邏輯控制(hardwiredcontrol)微序列控制器(microsequencer)

(微序列控制或微程序控制)6.1CPU的設(shè)計規(guī)范1.設(shè)計CPU的步驟◆確定它的用途

關(guān)鍵:使CPU的處理能力和它所執(zhí)行的任務(wù)匹配。◆設(shè)計指令集結(jié)構(gòu)◆設(shè)計狀態(tài)圖

列出在每個狀態(tài)中執(zhí)行的微操作從一個狀態(tài)轉(zhuǎn)移到另外一個狀態(tài)的條件2.CPU執(zhí)行如下的操作序列

取指令周期:從存儲器中取出一條指令,然后轉(zhuǎn)到譯碼周期。譯碼周期:對該指令進行譯碼,即確定取到的是哪一種指令,然后轉(zhuǎn)移到這種指令對應的執(zhí)行周期。執(zhí)行周期:執(zhí)行該指令,然后轉(zhuǎn)移到取指令周期去取下一條指令3.一般CPU狀態(tài)圖6.2.1非常簡單CPU的設(shè)計規(guī)范

1.64字節(jié)的存儲空間,每個字節(jié)是8位。

6位寬的地址:A[5..0]

存儲器的8位值:D[7..0]

2.一個程序員可以訪問的寄存器AC(8位累加器)

3.指令集(4條指令)6.2一個非常簡單CPU的設(shè)計與實現(xiàn)

指令指令碼操作ADD00AAAAAAAC←AC+M[AAAAAA]AND01AAAAAAAC←AC∧M[AAAAAA]JMP10AAAAAAGOTOAAAAAAINC11XXXXXXAC←AC+1

4.寄存器

一個6位的地址寄存器AR:它通過A[5..0]向存儲器提供地址。一個6位的程序計數(shù)器PC:它包含下一條將被執(zhí)行指令的地址。一個8位的數(shù)據(jù)寄存器DR:它通過D[7..0]從存儲器接收指令和數(shù)據(jù)。一個2位的指令寄存器IR:它用來存放從存儲器中取回的指令的操作碼部分。

一個CPU僅僅就是一個復雜的有限狀態(tài)機。

設(shè)計CPU的途徑:

設(shè)計CPU的狀態(tài)圖。設(shè)計必要的數(shù)據(jù)通路和控制邏輯,以便實現(xiàn)這個有限狀態(tài)機,最終實現(xiàn)這個CPU。6.2.2從存儲器中取指令一、從存儲器中取出指令的操作序列

1.

將地址放在地址引腳A[5..0]上,把地址送給存儲器。

2.

在給存儲器足夠的時間處理內(nèi)部譯碼并將需要的指令取出來之后,向存儲器發(fā)一個信號,使存儲器將此指令輸出到它的輸出引腳,這些引腳與CPU的D[7..0]相連接。CPU從這些引腳讀入數(shù)據(jù)。二、取指令周期的狀態(tài)

FETCH1:AR←PCFETCH2:DR←M,PC←PC+1FETCH3:IR←DR[7..6],AR←DR[5..0]◆為什么CPU在取指令周期將PC加1?三、取指令周期的狀態(tài)圖

6.2.3指令譯碼

◆當CPU把一條指令從存儲器中取出來之后,它必須判斷所取的是哪種指令,從而可以調(diào)用正確的執(zhí)行周期。

◆在狀態(tài)圖中,此過程表示為一系列的從取指令周期結(jié)束到各個執(zhí)行周期之間的分支。

◆對于本CPU,有四條指令,因此有四個不同的執(zhí)行周期。

取指令和譯碼周期的狀態(tài)圖

6.2.4指令執(zhí)行6.2.4.1ADD指令

CPU必須完成兩件事情:◆從存儲器中取出一個操作數(shù)?!魧⑦@個操作數(shù)和累加器中的值相加,并把結(jié)果存回到累加器中。

ADD1: DR←MADD2: AC←AC+DR

6.2.4.2AND指令

AND1: DR←MAND2: AC←AC∧DR6.2.4.3JMP指令

JMP1: PC←DR[5..0]

另外一種選擇;PC←AR

6.2.4.4INC指令

INC1: AC←AC+1

◆本CPU的狀態(tài)圖

包括了取指、譯碼和執(zhí)行周期。6.2.5建立所需的數(shù)據(jù)通路考察存在哪些數(shù)據(jù)傳送從而設(shè)計CPU的內(nèi)部數(shù)據(jù)通路。

一、與CPU的每個狀態(tài)相關(guān)聯(lián)的操作

FETCH1:AR←PC FETCH2:DR←M,PC←PC+1 FETCH3:IR←DR[7..6],AR←DR[5..0] ADD1:DR←MADD2:AC←AC+DRAND1:DR←M AND2:AC←AC∧DR JMP1:PC←DR[5..0]

INC1:AC←AC+1二、設(shè)計數(shù)據(jù)通路的兩種不同方案

1.在所有需要傳送數(shù)據(jù)的部件之間創(chuàng)建一條直接通路。使用多路選擇器或者緩沖器為那些有多個數(shù)據(jù)源的寄存器從多個可能的輸入中選擇一個。隨著CPU復雜度的增加,這種方案將變得不現(xiàn)實。

2.在CPU的內(nèi)部創(chuàng)建一條總線。在各個部件之間使用總線傳遞數(shù)據(jù)。三、將操作重新分組分組的依據(jù):他們所修改的寄存器。

AR: AR←PC;AR←DR[5..0] PC: PC←PC+1;PC←DR[5..0] DR: DR←M IR: IR←DR[7..6] AC: AC←AC+DR;AC←AC∧DR;AC←AC+1四、對每一個操作進行分析從而決定每個部件應該完成的功能◆AR,DR以及IR總是從其它一些部件中裝入數(shù)據(jù)◆PC和AC能夠從其它一些部件中裝入數(shù)據(jù),但它們還要能夠自增他們的當前值。▲創(chuàng)建一個單獨的硬件用來使這兩個寄存器的當前值加1,并且使結(jié)果能夠重新裝入寄存器;

▲把每個寄存器設(shè)計為一個計數(shù)器而且能夠并行的裝載。五、把每個部件都連接到系統(tǒng)總線上六、修改設(shè)計注意如下幾點:

1.

AR僅僅向存儲器提供數(shù)據(jù),除此之外不跟任何部件傳送數(shù)據(jù)。因此,沒有必要將它的輸出連接到內(nèi)部總線上。

2.

IR不通過內(nèi)部總線向任何其他部件提供數(shù)據(jù),所以

IR

的輸出到內(nèi)部總線的連接可以刪除。

3.

AC不向其他任何單元提供數(shù)據(jù);因此與內(nèi)部總線的連接也可以刪除。

4.

總線是8位寬,但是并非所有被傳送的數(shù)據(jù)都是8位寬;有一些是6位寬,有一個是2位寬。

必須確定哪些寄存器從總線的哪些位上接收和發(fā)送數(shù)據(jù)。

5.

AC必須能夠裝載AC和DR的和,以及AC和DR的邏輯與的結(jié)果。CPU必須包含一個能夠產(chǎn)生這些結(jié)果的ALU。

七、修改后的CPU內(nèi)部組織結(jié)構(gòu)(圖中的控制信號將會由控制單元來產(chǎn)生)6.2.6非常簡單ALU的設(shè)計

1.ALU完成兩個功能◆將兩個輸入相加◆將兩個輸入相與

2.設(shè)計方法◆創(chuàng)建兩個單獨的硬件來實現(xiàn)每個功能,◆使用一個多路選擇器從兩個結(jié)果中選擇一個輸出。

3.電路圖6.2.7用硬布線邏輯設(shè)計控制單元控制單元:產(chǎn)生控制信號,從而使所有的操作能以正確的順序執(zhí)行。設(shè)計控制單元有兩種主要的方法:▲硬布線控制:使用時序邏輯和組合邏輯產(chǎn)生控制信號?!⒊绦蚩刂疲ɑ蛭⑿蛄锌刂疲菏褂么鎯ζ鞑楸矸绞絹磔敵隹刂菩盘?。本章重點:硬布線控制方法◆簡單的控制單元包括三個部分

一個計數(shù)器:保存當前狀態(tài);

一個譯碼器:接受當前狀態(tài)并為每個狀態(tài)生成單獨的信號;

一些組合邏輯:接受單獨的狀態(tài)信號為每一部件生成控制信號,以及那個計數(shù)器的控制信號。◆一般硬布線控制單元◆對于本CPU,總共有9個狀態(tài)。因此,需要一個4位的計數(shù)器和一個4-16位的譯碼器。譯碼器的輸出位中有7個用不到。一、確定如何將狀態(tài)分配到譯碼器的各個輸出

1.

原則:◆將FETCH1規(guī)定為計數(shù)器的0值,并使用計數(shù)器的

CLR輸入來達到這個狀態(tài)。◆將順序的狀態(tài)指派為計數(shù)器的連續(xù)值,并且使用計數(shù)器的INC輸入來遍歷所有的這些狀態(tài)。

FETCH2:計數(shù)器值1FETCH3:計數(shù)器值2

同樣,將ADD1和ADD2指派為連續(xù)的計數(shù)值,對AND1和AND2也是一樣?!舾鶕?jù)指令操作碼和執(zhí)行周期的最大狀態(tài)數(shù)量來指派執(zhí)行周期的第一個狀態(tài)。用操作碼產(chǎn)生計數(shù)器的數(shù)據(jù)輸入,并用計數(shù)器的LD輸入使之達到合適的執(zhí)行周期。2.

為了裝入正確執(zhí)行周期的地址,控制單元必須完成兩件事情?!舯仨毮軌?qū)⒄_的執(zhí)行周期的第一個狀態(tài)的地址放到計數(shù)器的輸入上。◆必須發(fā)出計數(shù)器的LD信號。3.

如何將計數(shù)器的值分配給各個狀態(tài)?計數(shù)器的輸入是IR值的一個函數(shù)。

目標:使這個函數(shù)越簡單越好。一個可能的映射:10IR[1..0]

如果IR=00,那么計數(shù)器的輸入就是1000;

當IR=01,則輸入為1001,

以此類推。非常簡單CPU的指令,第一狀態(tài),以及操作碼指令第一狀態(tài)IRADDADD100ANDAND101JMPJMP110INCINC111

文中給出的映射函數(shù)的計數(shù)值IR[1..0]計數(shù)值狀態(tài)001000(8)ADD1011001(9)AND1101010(10)JMP1111011(11)INC14.

存在一些問題由于狀態(tài)ADD1的計數(shù)值是8,而AND1的計數(shù)值是9,那我們應該給ADD2安排一個什么值?如何從ADD1去訪問ADD2呢?解決方法:使執(zhí)行周期的第一個狀態(tài)的計數(shù)值之間的間隔至少為2。通過映射1IR[1..0]0可以達到這個目的?!沟肁DD1,AND1,JMP1,INC1的計數(shù)值分別是8,10,12,14▲將ADD2指派為計數(shù)值9▲

AND2的計數(shù)值指派為11二、為計數(shù)器以及CPU的其它部分產(chǎn)生控制信號◆對于計數(shù)器,我們必須產(chǎn)生INC,CLR和LD信號?!舢斂刂茊卧闅v順序狀態(tài),從FETCH1,F(xiàn)ETCH2,

ADD1到AND1時,INC信號有效?!?/p>

CLR則用來從每一個執(zhí)行周期的末尾返回到取指令周期,這可能發(fā)生在ADD2,AND2,JMP1和INC1

狀態(tài)。◆

LD信號在每個取指令周期的末尾FETCH3狀態(tài)中發(fā)出。三、控制單元電路圖4.

組合形成控制AR,PC,DR,IR,M,ALU以及緩沖器的控制信號。◆首先考慮AR寄存器,它是在狀態(tài)FETCH1

(AR←PC)和FETCH3(AR←DR[5..0])期間裝載的。通過將這兩個狀態(tài)信號進行邏輯OR操作,CPU

就為AR產(chǎn)生了LD信號。為PC,DR,AC以及IR創(chuàng)建如下的控制信號:

PCLOAD=JMP1 PCINC=FETCH2

DRLOAD=FETCH2∨ADD1∨AND1ACLOAD=ADD2∨AND2ACINC=INC1IRLOAD=FETCH3◆ALU的控制輸入ALUSEL

把ALUSEL設(shè)置為AND2,就能保證當CPU執(zhí)行ADD或AND指令時,有正確的結(jié)果從ALU流向AC。

當ALUSEL=0時,ALU輸出的是兩個輸入的算術(shù)和;當ALUSEL=1時,那么輸出就是輸入的邏輯與?!舢a(chǎn)生緩沖器的有效信號例如:在FETCH3(IR←DR[7..6],AR←DR[5..0]),

ADD2(AC←AC+DR),

AND2(AC←AC∧DR)以及JMP1(PC←DR[5..0])的時候,DR的內(nèi)容必須放到總線上。將這些狀態(tài)值進行邏輯或,就能夠得到

DRBUS信號。

這個過程也可以用于產(chǎn)生其它緩沖器的控制信號:

MEMBUS=FETCH2∨ADD1∨AND1PCBUS=FETCH1◆產(chǎn)生一個READ信號該信號從CPU輸出,并要求存儲器輸出它讀到的數(shù)據(jù)。READ=FETCH2∨ADD1∨AND15.

控制單元中用來產(chǎn)生這些控制信號的部分電路圖6.2.8設(shè)計驗證對每條指令的取指令、譯碼以及執(zhí)行周期進行跟蹤。

1.

考慮如下這段代碼,它每條指令僅僅包含了一次。

0:ADD4 1:AND5 2:INC 3:JMP0 4:27H 5:39H2.

CPU遵循狀態(tài)圖并以合適的狀態(tài)順序取出、譯碼和執(zhí)行每條指令:

ADD4: FETCH1→FETCH2→FETCH3→ADD1→ADD2AND5: FETCH1→FETCH2→FETCH3→AND1→AND2INC: FETCH1→FETCH2→FETCH3→INC1JMP0:FETCH1→FETCH2→FETCH3→JMP13.

對這段程序的一次循環(huán)的跟蹤情況(所有寄存器的初始值都是0)

指令狀態(tài)有效信號所執(zhí)行的操作下一個狀態(tài)ADD4FETCH1PCBUS,ARLOADAR←0FETCH2FETCH2READ,MEMBUS,DRLOAD,PCINCDR←04H,PC←1FETCH3FETCH3DRBUS,ARLOAD,IRLOADIR←00,AR←04HADD1ADD1READ,MEMBUSDRLOADDR←27HADD2ADD2DRBUS,ACLOADAC←0+27HFETCH1AND5FETCH1PCBUS,ARLOADAR←1FETCH2FETCH2READ,MEMBUS,DRLOAD,PCINCDR←45H,PC←2FETCH3FETCH3DRBUS,ARLOADIRLOADIR←01,AR←05HAND1AND1READ,MEMBUSDRLOADDR←39HAND2AND2DRBUS,ALUSEL,ACLOADAC←27H^39H=21HFETCH1INCFETCH1PCBUS,ARLOADAR←2FETCH2FETCH2READ,MEMBUS,DRLOAD,PCINCDR←C0H,PC←3FETCH3FETCH3DRBUS,ARLOAD,IRLOADIR←11,AR←00HINC1INC1ACINCAC←21H+1=22HFETCH1JMP0FETCH1PCBUS,ARLOADAR←3FETCH2FETCH2READ,MEMBUS,DRLOAD,PCINCDR←80H,PC←4FETCH3FETCH3DRBUS,ARLOAD,IRLOADIR←10,AR←00HJMP1JMP1DRBUS,PCLOADPC←0FETCH16.3.1相對簡單CPU的規(guī)格說明

1.64K字節(jié)的存儲器,每個存儲單元8位寬。地址引腳A[15..0]

數(shù)據(jù)引腳D[7..0]

2.CPU的三個內(nèi)部寄存器◆

8位累加器AC:接受任何算術(shù)或者邏輯運算的結(jié)果,并為使用兩個操作數(shù)的算術(shù)或者邏輯操作指令提供一個操作數(shù)。6.3相對簡單CPU的設(shè)計和實現(xiàn)◆寄存器R:一個8位通用寄存器。它為所有的雙操作數(shù)算術(shù)和邏輯運算指令提供第二個操作數(shù)。它也可以用來暫時存放累加器馬上要用到的數(shù)據(jù)。

(減少存儲器訪問次數(shù)提高CPU的性能)◆零標志位Z:每次執(zhí)行算術(shù)運算或者邏輯運算的時候,它都將被置位。3.指令集結(jié)構(gòu)指令指令碼操作NOP00000000無LDAC00000001ΓAC←M[Γ]STAC00000010ΓM[Γ]←ACMVAC00000011R←ACMOVR00000100AC←RJUMP00000101ΓGOTOΓJMPZ00000110ΓIF(Z=1)THENGOTOΓJPNZ00000111ΓIF(Z=0)THENGOTOΓADD00001000AC←AC+R,IF(AC+R=0)THENZ←1ELSEZ←0SUB00001001AC←AC-R,IF(AC-R=0)THENZ←1ELSEZ←0INAC00001010AC←AC+1,IF(AC+1=0)THENZ←1ELSEZ←0CLAC00001011AC←0,Z←1AND00001100AC←AC∧R,IF(AC∧R=0)THENZ←1ELSEZ←0OR00001101AC←AC∨R,IF(AC∨R=0)THENZ←1ELSEZ←0XOR00001110AC←AC⊕R,IF(AC⊕R=0)THENZ←1ELSEZ←0NOT00001111AC←AC’,IF(AC’=0)THENZ←1ELSEZ←04.一些寄存器◆16位的地址寄存器AR:通過引腳A[15..0]向存儲器提供地址?!?6位的程序計數(shù)器PC:存放的是將要執(zhí)行的下一條指令的地址,或者指令需要的下一個操作數(shù)的地址。◆

8位的數(shù)據(jù)寄存器DR:通過D[7..0]從存儲器中接收指令和數(shù)據(jù)并且向存儲器傳送數(shù)據(jù)?!?位的指令寄存器IR:存放的是從存儲器中取出來的操作碼?!?位的臨時寄存器TR:在指令執(zhí)行過程中,臨時存儲數(shù)據(jù)。(程序員不能訪問)6.3.2取指令和譯碼

FETCH1:AR←PC FETCH2: DR←M,PC←PC+1 FETCH3: IR←DR,AR←PC

取指令和譯碼周期的狀態(tài)圖:

(注意:兩條指令,JMPZ和JPNZ,具有兩個不同的執(zhí)行周期。

)6.3.3執(zhí)行指令

6.3.3.1NOP指令

NOP1: (無操作)

6.3.3.2LDAC指令

LDAC是一條多字指令。它包含三個字:

操作碼地址的低半部分地址的高半部分

功能:從存儲器中獲得地址,然后從存儲器中獲得數(shù)據(jù),并把數(shù)據(jù)裝載到累加器中。第一個狀態(tài):

LDAC1: DR←M,PC←PC+1,AR←AR+1第二個狀態(tài):

LDAC2: TR←DR,DR←M,PC←PC+1LDAC3: AR←DR,TRLDAC4: DR←MLDAC5: AC←DR6.3.3.3STAC指令

STAC指令執(zhí)行的是與LDAC完全相反的操作。

STAC1: DR←M,PC←PC+1,AR←AR+1STAC2: TR←DR,DR←M,PC←PC+1STAC3: AR←DR,TRSTAC4: DR←ACSTAC5: M←DR6.3.3.4MVAC和MOVR指令

MVAC1: R←AC MOVR1: AC←R

6.3.3.5JUMP指令

JUMP1:DR←M,AR←AR+1 UMP2:TR←DR,DR←M JUMP3:PC←DR,TR6.3.3.6JMPZ和JPNZ指令JMPZ指令的狀態(tài):

JMPZY1: DR←M,AR←AR+1 JMPZY2: TR←DR,DR←M JMPZY3: PC←DR,TR

JMPZN1: PC←PC+1 JMPZN2: PC←PC+1PNZ指令的狀態(tài):

JPNZY1: DR←M,AR←AR+1 JPNZY2: TR←DR,DR←M JPNZY3: PC←DR,TR

PNZN1: PC←PC+1 JPNZN2: PC←PC+16.3.3.7其余的指令其余的指令都是在一個狀態(tài)內(nèi)完成的。

ADD1:AC←AC+R,IF(AC+R=0)THENZ←1ELSEZ←0SUB1: AC←AC-R,IF(AC-R=0)THENZ←1ELSEZ←0INAC1:AC←AC+1,IF(AC+1=0)THENZ←1ELSEZ←0CLAC1:AC←0,Z←1AND1: AC←AC∧R,IF(AC∧R=0)THENZ←1ELSEZ←0OR1: AC←AC∨R,IF(AC∨R=0)THENZ←1ELSEZ←0XOR1: AC←AC⊕R,IF(AC⊕R=0)THENZ←1ELSEZ←0NOT1:AC←AC',IF(AC'=0)THENZ←1ELSEZ←0◆

整個CPU的狀態(tài)圖1.根據(jù)目的地將數(shù)據(jù)傳送進行分類

AR:AR←PC;AR←AR+1;AR←DR,TRPC:PC←PC+1;PC←DR,TRDR:DR←M,DR←ACIR: IR←DRR: R←ACTR: TR←DR

6.3.4創(chuàng)建數(shù)據(jù)通路

AC:AC←DR;AC←R;AC←AC+R;

AC←AC-R;AC←AC+1;AC←0;

AC←AC∧R;AC←AC∨R;AC←AC⊕R;

AC←AC'Z:Z←1;Z←0(二者是有條件的)2.選擇每個部件的功能

AR和PC必須能夠執(zhí)行并行的裝載和遞增的操作。兩個寄存器都從內(nèi)部總線上接受數(shù)據(jù)?!?/p>

DR,IR,R,TR必須能夠并行裝載數(shù)據(jù)?!?/p>

CPU用一個ALU來完成所有這些功能。

ALU能夠接受AC的數(shù)據(jù)作為一個輸入,接受內(nèi)部總線上的數(shù)據(jù)作為另外一個輸入。

AC總是從ALU得到它的輸入。

CPU同時也根據(jù)ALU的輸出來決定結(jié)果是否0,從而設(shè)置Z。3.相對簡單CPU初步的寄存器部分4.對設(shè)計進行改進

AR和IR不向其他的部件提供數(shù)據(jù)??梢詣h除它們到內(nèi)部總線的連接?!粢_D[7..0]是雙向的。

實現(xiàn)雙向引腳的標準方法:使用一對緩沖器,每個方向一個。(一個用來從引腳輸入數(shù)據(jù),另外一個用來將數(shù)據(jù)輸出到引腳。)◆

16位寬的總線并沒有被所有的寄存器充分的利用。必須確定寄存器的哪些位連接到總線的哪些位上。◆寄存器Z沒有跟任何部件相連。5.引起下面的問題◆在FETCH3,CPU必須同時完成IR←DR和AR←PC兩個操作。建立一條從DR輸出端到IR輸入端的直接通路,使得IR←DR不使用內(nèi)部總線。斷開IR從內(nèi)部總線輸入的連接,因為它不再從總線上接收數(shù)據(jù)?!粼贚DAC2和其他一些狀態(tài)中,TR←DR和

DR←M需要同時用到總線。

TR只從DR接受數(shù)據(jù),所以CPU可以包含一條從DR的輸出到TR的輸入的直接通路,

TR的輸入可以從內(nèi)部總線上斷開?!粼贚DAC3和其他一些狀態(tài)中,DR和TR必須被同時送到總線上,DR在位15..8,TR在位7..0。將DR的輸出同時連接到總線15..8和7..0上,并使用兩個具有不同選擇信號的緩沖器。

6.連接寄存器Z

將ALU的輸出進行NOR操作。

NOR門的輸出作為Z的輸入。7.經(jīng)過改進之后的內(nèi)部組織圖6.3.5相對簡單ALU的設(shè)計

1.列出所有會修改AC內(nèi)容的傳送。

LDAC5: AC←DR MOVR1: AC←R ADD1: AC←AC+R SUB1: AC←AC-R INAC1: AC←AC+1 CLAC1: AC←0AND1: AC←AC∧R OR1: AC←AC∨R XOR1: AC←AC⊕R NOT1: AC←AC'2.設(shè)計兩個運算單元

算術(shù)運算單元邏輯運算單元使用一個多路選擇器從正確的輸出中選擇數(shù)據(jù)送入AC。(1)設(shè)計算術(shù)單元

◆把算術(shù)指令進行改寫以便看出它們操作數(shù)的來源:

LDAC5: AC←BUS MOVR1:AC←BUS ADD1: AC←AC+BUS SUB1: AC←AC-BUS INAC1: AC←AC+1 CLAC1: AC←0◆把每個操作改寫成為兩個值與進位的和每一條指令用一個帶進位的并行加法器實現(xiàn)。

LDAC5: AC←0+BUS+0 MOVR1: AC←0+BUS+0ADD1: AC←AC+BUS+0SUB1: AC←AC+BUS’+1 INAC1: AC←AC+0+1 CLAC1: AC←0+0+0減法通過兩個補碼的加法來實現(xiàn)。

◆設(shè)計數(shù)據(jù)通路(2)設(shè)計邏輯單元總共有4個邏輯運算。使用一個8位4選一的多路選擇器。

MUX的輸入是:

AC∧BUS,AC∨BUS,AC⊕BUS以及AC'。3.設(shè)計整個ALU

最后,一個多路選擇器用來在并行加法器和邏輯多路選擇器的輸出之間選擇一個輸出送AC。6.3.6用硬布線邏輯設(shè)計控制單元總共有37個狀態(tài)。

1.使用兩個寄存器并且將他們的輸出組合起來產(chǎn)生狀態(tài)值。

指令中的操作碼一個計數(shù)器:用來記錄取指令或者執(zhí)行過程中的哪個狀態(tài)應該是有效的。2.設(shè)計操作碼的值使用IR的輸出作為譯碼器的輸入。

指令代碼的形式:0000XXXX

對低四位進行譯碼。將高四位NOR在一起來控制譯碼器有效。3.相對簡單CPU的硬布線控制單元4.產(chǎn)生相對簡單CPU的狀態(tài)

取指令周期取指令周期是唯一不使用指令譯碼器值的周期。

FETCH1

——T0FETCH2——T1FETCH3——T2

執(zhí)行周期取決于操作碼和時序計數(shù)器的值??刂茊卧凑者m當?shù)闹噶畎颜_的時鐘值和指令多路選擇器的輸出進行邏輯與運算。

例如,LDAC執(zhí)行周期的狀態(tài)是:

LDAC1=ILDAC∧T3 LDAC2=ILDAC∧T4 LDAC3=ILDAC∧T5 LDAC4=ILDAC∧T6 LDAC5=ILDAC∧T7◆

狀態(tài)的完全列表狀態(tài)功能狀態(tài)功能FETCH1T0JMPZY1IJMPZ∧Z∧T3FETCH2T1JMPZY2IJMPZ∧Z∧T4FETCH3T2JMPZY3IJMPZ∧Z∧T5NOP1INOP∧T3JMPZN1IJMPZ∧Z’∧T3LDAC1ILDAC∧T3JMPZN2IJMPZ∧Z’∧T4LDAC2ILDAC∧T4JPNZY1IJPNZ∧Z’∧T3LDAC3ILDAC∧T5JPNZY2IJPNZ∧Z’∧T4LDAC4ILDAC∧T6JPNZY3IJPNZ∧Z’∧T5LDAC5ILDAC∧T7JPNZN1IJPNZ∧Z∧T3STAC1ISTAC∧T3JPNZN2IJPNZ∧Z∧T4STAC2ISTAC∧T4ADD1IADD∧T3STAC3ISTAC∧T5SUB1ISUB∧T3STAC4ISTAC∧T6INAC1IINAC∧T3STAC5ISTAC∧T7CLAC1ICLAC∧T3MVAC1IMVAC∧T3AND1IAND∧T3MOVR1IMOVR∧T3OR1IOR∧T3JUMP1IJMP∧T3XOR1IXOR∧T3JUMP2IJMP∧T4NOT1INOT∧T3JUMP3IJMP∧T5

5.產(chǎn)生時序計數(shù)器需要的CLR信號和INC信號◆

CLR信號:把每個執(zhí)行周期的最后一個狀態(tài)進行邏輯與來產(chǎn)生CLR信號。◆

INC信號:在其他所有時候有效。

通過對所有剩下的狀態(tài)進行邏輯或操作來產(chǎn)生INC信號。將CLR輸入的補碼作為INC輸入。6.緩沖器和AR的值信號值PCBUSFETCH1∨FETCH3DRHBUSLDAC3∨STAC3∨JUMP3∨JMPZY3∨JPNZY3DRLBUSLDAC5∨STAC5TRBUSLDAC3∨STAC3∨JUMP3∨JMPZY3∨JPNZY3RBUSMOVR1∨ADD1∨SUB1∨AND1∨OR1∨XOR1ACBUSSTAC4∨MVAC1MEMBUSFETCH2∨LDAC1∨LDAC2∨LDAC4∨STAC1∨STAC2∨JUMP1∨JUMP2∨JMPZY1∨JMPZY2∨JPNZY1∨JPNZY2BUSMEMSTAC5ARLOADFETCH1∨FETCH3∨LDAC3∨STAC3ARINCLDAC1∨STAC1∨JUMP1∨JMPZY1∨JPNZY17.產(chǎn)生ALU的控制信號

例如:

ALUS1=ADD1∨SUB1∨INAC1

以及ALUS4=SUB1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論