天天看點

簡易計算機系統綜合設計--CPU綜合

  當完成了各個部件之後,接着要做的就是把各個部件組裝起來,配合運作,要使所有部件能夠協調地運作,首先得要有一個比較明朗的思路,我們先來分析一下CPU的運作流程:

簡易計算機系統綜合設計--CPU綜合

上圖為簡易計算機系統的整體構架,現對其運作整體流程進行說明:

(1)取址階段:

Ⅰ)不受時鐘控制的輸入(由SM=0确定)有:

①MADD=“00”(選擇器選擇從PC傳輸來的位址);

②LDPC=‘1’,INPC=‘1’(PC計數器的計數信号);

③EN=‘1’(RAM的輸出使能),WE=‘X’(RAM的寫入使能);

④LDIR=‘1’(指令寄存器IR的寫入使能)。

Ⅱ)受時鐘控制的為:

①由時鐘信号CLK1控制存儲器RAM對目标位址進行取指令操作。

②由時鐘信号CLK2控制指令寄存器IR将從RAM讀取的指令進行存儲。同時CLK2控制PC計數器中的位址加一。

(2)執行階段:

Ⅰ)不受時鐘控制的操作有:

①指令譯碼器對從IR輸出的指令進行譯碼,将譯碼結果傳輸到各個具體的部件。

②ALU對A,B兩個端口得到的資料進行運算并輸出。

③位移子產品對輸入的資料進行操作并輸出到BUS總線。

Ⅱ)受時鐘控制的信号有:

①由CLK3控制RAM在對應的位址進行讀取或者寫入(如果具體指令需要—MOVB,MOVC,JMP,JC,JZ);

②由CLK4控制通用寄存器将BUS總線上的資料存入指令中指定的寄存器(如果需要—MOVA,MOVC,ADD,NOT,AND,SUB,SHL,SHR)。

③由CLK4控制PC計數器對BUS總線上的資料進行加載(如果需要—JMP,JC,JZ);

至此一條指令已經運作完成。

然後就隻要把各個部件的輸入輸出端口對應連接配接就可以了,下面是我的總設計邏輯圖:

簡易計算機系統綜合設計--CPU綜合

其中有一些小細節需要注意:

  1. 從RAM讀資料的時候必須要使移位邏輯的輸出為高阻态,是以這裡移位邏輯的三個輸入(F,RL,FR)都與RAM的使能輸入取非後做與運算,這樣可以避免沖突。在設定時鐘信号的時候也有類似的處理。
  2. Z的值隻與ADD和SUB有關,這個我用了一個檢測器去作為Z寄存器的使能信号。
  3. 在某些部位加上輸出端口可以檢視運作過程中的資料是否正确。

下面是對多個指令的執行結果:

初始化RAM的.mif檔案的具體内容:

簡易計算機系統綜合設計--CPU綜合

 測試結果:

簡易計算機系統綜合設計--CPU綜合
簡易計算機系統綜合設計--CPU綜合
簡易計算機系統綜合設計--CPU綜合

下面對320.0ns前的指令進行分析:

0~20ns:取PC=“0”,得到指令“01010000”,對A寄存器的内容取反,A由152變成103;

20~40ns:取PC=“1”,得到指令“01010100”,對B寄存器的内容取反,B由7變成248;

40~60ns:取PC=“2”,得到指令“10010001”,對A與B求和,将結果95存入A寄存器;

60~80ns:取PC=“3”,得到指令“00010000”,該指令為跳轉指令JMP,直接跳轉到該指令的後一位址對應的位址“00001100”=12,跳轉到位址12;

80~100ns:取PC=“12”,得到指令“11110001”,為MOVA指令,将B寄存器中的内容存入A中,得到A=B=248;

100~120ns:取PC=“13”,得到指令“00010010”,為跳轉指令JC,由于在40~60ns的ADD運算中存在進位,故可以跳轉,跳轉到位址“00000110”=6;

120~140ns:取PC=“6”,得到指令“10100000”,為右移指令,将A寄存器的内容右移,由原來的248變為124;

140~160ns:取PC=“7”,得到指令“10100100”,為右移指令,将B寄存器的内容右移,由原來的248變為124;

160~180ns:取PC=“8”,得到指令“01100001”,為減法指令,将A-B的結果0存入寄存器A中,故結束後A=‘0’;

180~200ns:取PC=“9”,得到指令“10010001”,為加法指令,将A+B的結果124存入寄存器A中,故結束A=124;

200~220ns:取PC=“10”,得到指令“10010001”,為加法指令,将A+B的結果248存入寄存器A中;

220~240ns:取PC=“11”,得到指令“10010001”,為加法指令,将A+B的結果116存入寄存器A中;

240~260ns;取PC=“12”,得到指令“11110001”,為MOVA指令,将B寄存器中的内容存入A中,得到A=B=124;

260~280ns:取PC=“13”,得到指令“00010010”,為跳轉指令JC,但由于C/=“1”,故不進行跳轉,并跳過下一位址;

280~300ns:取PC=“15”,得到指令“00010010”,為跳轉指令JC,但由于C/=“1”,故不進行跳轉,并跳過下一位址;

300~320ns:取PC=“17”,得到位址“01010100”,為左移指令,将B寄存器的内容左移,故結束得到,B=131。

最後給出整個CPU綜合設計工程,算是留作紀念了。

繼續閱讀