當完成了各個部件之後,接著要做的就是把各個部件組裝起來,配合運作,要使所有部件能夠協調地運作,首先得要有乙個比較明朗的思路,我們先來分析一下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);
至此一條指令已經執行完成。
然後就只要把各個部件的輸入輸出埠對應連線就可以了,下面是我的總設計邏輯圖:
其中有一些小細節需要注意:
從ram讀資料的時候必須要使移位邏輯的輸出為高阻態,所以這裡移位邏輯的三個輸入(f,rl,fr)都與ram的使能輸入取非後做與運算,這樣可以避免衝突。在設定時鐘訊號的時候也有類似的處理。
z的值只與add和sub有關,這個我用了乙個檢測器去作為z暫存器的使能訊號。
在某些部位加上輸出埠可以檢視執行過程中的資料是否正確。
下面是對多個指令的執行結果:
初始化ram的.mif檔案的具體內容:
測試結果:
下面對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綜合設計工程,算是留作紀念了。
簡易計算機系統綜合設計 概述
概述 我們的計算機在執行的過程中,操作流程可以大致看成乙個 取指令 執行指令 的過程。這次的設計便是基於這一思想進行簡易計算機系統的設計。本次設計中的指令是乙個8為的二進位制串,通過不同的指令來實現不同的具體操作。我們分析一下需要幹什麼?首先考慮取指令 我們首先需要儲存指令,這樣計算機才能去讀取指令...
簡易計算機系統綜合設計 時鐘節拍
根據部件各個的控制訊號,我們知道有些部件需要時鐘有些不需要時鐘,這些需要時鐘訊號的部件有些可以同時運作,不如pc計數器的加一操作和指令暫存器的存指令操作,但是有些部件就一定需要乙個先後順序,比如說加法,肯定是要等運算完以後才給通用暫存器時鐘訊號去吧運算結果存進指定的暫存器。所有這裡的多個時鐘訊號的週...
簡易計算機系統綜合設計 C,Z暫存器
看過了控制器的設計以後,你可能會注意到控制器有兩個輸入c和z不是 於解碼器的輸出,這裡對c和z進行說明。c和z的值分別是跳轉指令jc和jz是否有效的乙個判斷條件 當c 1時,jc有效 z 1時,jz有效。c是邏輯運算的進製輸出,包括加法的進製 減法的借位以及移位時被移出去的那一位 注意是移出去的那一...