




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、哈爾濱理工大學軟件學院課程設計報告課 程 片上計算機系統(tǒng)題 目 CPU模型機設計 班 級 集成12-1班專 業(yè) 集成電路設計與集成系統(tǒng) 學 生 張 銘學 號 1214020130指導教師 崔林海 2014年 07 月 02日索 引:1課程設計的目的及要求32處理器的設計思想和設計內(nèi)容33設計處理器的結(jié)構(gòu)和實現(xiàn)方法34模型機的指令系統(tǒng)45處理器的狀態(tài)跳轉(zhuǎn)操作過程46. CPU的VHDL代碼77. 模型機在Quartus II環(huán)境下的應用328. 仿真波形339. 課程設計的總結(jié)35一 課程設計的目的及要求:1. 目的:了解Quartus II軟件的應用,學習Quartus II環(huán)境下設計CPU的
2、基本過程;掌握CPU設計代碼的含義以及CPU的工作原理;了解CPU與內(nèi)存RAM間的連接數(shù)據(jù)的傳輸過程;學習在Quartus II環(huán)境下建立模型機的具體過程。融會貫通本課程各章節(jié)的內(nèi)容,通過知識的綜合運用,加深對計算機系統(tǒng)各模塊的工作原理及相互聯(lián)系的認識。學習設計和調(diào)試計算機的基本步驟和方法,提高使用軟件仿真工具和集成電路的基本技能。培養(yǎng)科學研究的獨立工作能力,取得工程設計與組裝調(diào)試的實踐和經(jīng)驗。2. 要求:以計算機組成與設計書中123頁的簡化模型為基礎,更改其指令系統(tǒng),形成設計者的CPU,在Quartus II環(huán)境下與主存連接,調(diào)試程序,觀察指令的執(zhí)行是否達到設計構(gòu)想。二 處理器的設計思想和設
3、計內(nèi)容:處理器的字長為16b;包括四種指令格式,格式1、格式2、格式3的指令字長度為8b,格式4的指令字長度為16b;處理器內(nèi)部的狀態(tài)機包括6個狀態(tài)。關(guān)于CPU:操作碼5位,一共設計20條指令,主要包括空操作指令、中斷指令、加法指令、減法指令、三種邏輯運算指令、循環(huán)移位操作指令,數(shù)據(jù)傳輸指令,轉(zhuǎn)移類指令,特權(quán)指令,取反,取絕對值等等。關(guān)于RAM:地址線設置成16bits,主存空間為64words。書中原CPU的主要修改:(1) 模型機CPU指令集中的邏輯左移與邏輯右移改成邏輯循環(huán)右移與邏輯循環(huán)左移。(2) 模型機CPU指令集中的or改成not。(3) 模型機CPU指令的執(zhí)行流程及狀態(tài)跳轉(zhuǎn)。三
4、設計處理器的結(jié)構(gòu)和實現(xiàn)方法:(指令格式)格式1:寄存器尋址方式15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP Rx Ry 空白格式2:立即數(shù)尋址方式15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP I 空白格式3:無操作數(shù)尋址方式15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP 空白 空白格式4:直接尋址方式15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OP Addr內(nèi)存(2的12次方)四 模型機的指令系統(tǒng)CPU的指令集:操作碼OPIR(15.12)指令格式指 令 的
5、 助 記 符指 令 的 內(nèi) 容000003Idle無操作 PC=PC+1000012Load DataR0ßI 立即數(shù)操作000101Move Rx RyRx ß(Ry) PC=PC+1000111Add Rx RyRx ß(Rx)+(Ry) PC=PC+101001Sub Rx RyRx ß(Rx)-(Ry) PC=PC+1001011AND Rx RyRx ß(Rx) AND(Ry) PC=PC+1001101NOT Rx RyRx ß(Rx) NOT (Ry) PC=PC+1001111XOR Rx RyRx ß(Rx
6、) XOR (Ry) PC=PC+1010001Swap Rx Ry Aß(Ry) Ryß(Rx) Rxß(A) PC=PC+1010011Shr Rx Ry倒置數(shù)據(jù)PC=PC+1010101Shl Rx Ry邏輯循環(huán)左移PC=PC+1010114Jmp AddrPCßAddr PC=PC+1011004Jz AddrIf (R0)=0 then PCßAddr else PC=PC+1011014Read AddrR0ß(Addr) PC=PC+1011104Write Addr Addrß(R0) PC=PC+1 011
7、113Stop無操作 PC保持不變100001comp 比較 pc=pc+1100011notp 取反 pc=pc+1100101clearpc=pc+1100111absppc=pc+1五 處理器的狀態(tài)跳轉(zhuǎn)操作過程:(1) 、模型機每一狀態(tài)下的操作及狀態(tài)跳轉(zhuǎn)當前狀態(tài)執(zhí)行操作次態(tài)與讀下一條指令的有關(guān)的操作St_0取指令IR(15.0)ßM_data_in(15.0)St_1Write-Readß0 PC=PC+1St_1IF OP=Load THENR0ßIR(11.8)|”000000000000”MARßPCIF(OP=Stop)THENSt_1EL
8、SE St_2END IFIF OP=Move THEN Rx ß(Ry)IF OP= Shr THEN Rx ß(Rx) 倒置數(shù)據(jù)IF OP= Shl THEN Rx ß(Rx) 邏輯循環(huán)左移IF OP= Add THEN Aß(Ry)IF OP= Sub THEN Aß(Ry)IF OP= AND THEN Aß(Ry)IF OP=NOT THEN Aß(Ry)IF OP= XOR THEN Aß(Ry)IF OP= Swap THEN Aß(Ry)IF OP=Stop THEN NULLIF OP=
9、Idle THEN NULLIF OP=Jmp THEN NULLIF OP=Jz THEN NULLIF OP=Read THEN NULLIF OP=Write THEN NULLSt_2IF OP= Load OR OP=Move OR OP=Shr OR OP=Shl OR OP=Idle THEN NULLSt_0Write-Readß0IF OP= Add THEN Rx ß(Rx)+AIF OP= Sub THEN Rx ß(Rx)-AIF OP= AND THEN Rx ß(Rx)ANDAIF OP= NOT THEN Rx ß
10、(Rx) NOT AIF OP= XOR THEN Rx ß(Rx) XORAIF OP= Swap THEN Ryß(Rx)St_3Write-Readß0IF OP= Jmp THEN(PCßIR(1.0) MARßIR(11.0)IF OP= Jz THENIF (R0)=0 THEN(PCßIR(1.0) MARßIR(11.0)ELSE MARßPCIF OP= Read THEN MARßIR(11.0)IF OP= Write THEN MARßIR(11.0) MDAß
11、R0St_3IF OP= Swap THEN Rxß(A)St_0Write-Readß0IF OP= Jmp NOT OP= Jz St_0MARßPCWrite-Readß0IF OP= Write St_4MARßPCWrite-Readß0IF OP= Read St_4MARßPCWrite-Readß0St_4IF OP= Read THENR0ßM_data_inSt_0Write-Readß0St-5IF OP=ABSP THENR0<-M_data_inSt_0IF OP
12、=NOTP THENR0<-M_data_inSt_0IF OP=CLEAR THENR0,R1,R2,R3,IR<-'0'St_0IF OP=COMP THENR0<-M_data_inR1<-M_data_inSt_0(2) 、簡單指令執(zhí)行狀態(tài)描述讀內(nèi)存指令:(1) St_0:取指令執(zhí)行以下操作;1)M_addressß(MAR) 把指令地址送到地址總線2)令Write-Readß0 向內(nèi)存發(fā)出讀命令(取指令)3)IR(15.0)ßM_data_in(15.0) 將讀出的指令加載于IR(15.0)4)PC=PC+1 至此
13、指令已經(jīng)全部取出,存在于IR(15.0),為取下一條指令準備地址(2) St_1:NULL 直接跳轉(zhuǎn)到下一狀態(tài)(3) St_2:MARßIR(11.0)將數(shù)據(jù)地址加載于MAR(4) St_3:1)M_addressß(MAR)把數(shù)據(jù)地址送到地址總線2)令Write-Readß0 向內(nèi)存發(fā)出讀命令(取數(shù)據(jù))3)MARßPC 把下一條指令地址加載于MAR(5) St_4:1)R0ßM_data_in 將來自內(nèi)存的數(shù)據(jù)加載于R0,本指令執(zhí)行完畢2)M_addressß(MAR) 把下一條指令地址送到地址總線3)令Write-Read
14、3;0 向內(nèi)存發(fā)出讀命令(取下一條指令)4)下一狀態(tài)跳轉(zhuǎn)到St_0無條件轉(zhuǎn)移指令(1) St_0:取指令執(zhí)行以下操作;1)M_addressß(MAR) 把指令地址送到地址總線2)令Write-Readß0 向內(nèi)存發(fā)出讀命令(取指令)3)IR(15.0)ßM_data_in(15.0) 將讀出的指令加載于IR(15.0)4)PC=PC+1 (此語句無用,因為程序計數(shù)器后續(xù)重新復制達到無條件轉(zhuǎn)移目的)(2) St_1:NULL 直接跳轉(zhuǎn)到下一狀態(tài)(3) St_2:1)MARßIR(11.0) 將轉(zhuǎn)移目標地址加載于MAR2)PCßIR(11.0)
15、將轉(zhuǎn)移目標地址加載于PC(4) St_3:1) M_addressß(MAR) 把下一條指令地址送到地址總線2)令Write-Readß0 向內(nèi)存發(fā)出讀命令(取下一條指令)3)下一狀態(tài)跳轉(zhuǎn)到St_0六 CPU的VHDL代碼:LIBRARY ieee;USE ieee.std_logic_1164.ALL;PACKAGE namespack IS CONSTANT idle : std_logic_vector(4 DOWNTO 0) :="00000"CONSTANT load : std_logic_vector(4 DOWNTO 0) :="
16、;00001"CONSTANT move : std_logic_vector(4 DOWNTO 0) :="00010"CONSTANT addP : std_logic_vector(4 DOWNTO 0) :="00011"CONSTANT subp : std_logic_vector(4 DOWNTO 0) :="00100"CONSTANT andp : std_logic_vector(4 DOWNTO 0) :="00101"CONSTANT orp : std_logic_vector(
17、4 DOWNTO 0) :="00110"CONSTANT xorp : std_logic_vector(4 DOWNTO 0) :="00111"CONSTANT shrp : std_logic_vector(4 DOWNTO 0) :="01000"CONSTANT shlp : std_logic_vector(4 DOWNTO 0) :="01001"CONSTANT swap : std_logic_vector(4 DOWNTO 0) :="01010"CONSTANT jmp
18、: std_logic_vector(4 DOWNTO 0) :="01011"CONSTANT jz : std_logic_vector(4 DOWNTO 0) :="01100"CONSTANT read : std_logic_vector(4 DOWNTO 0) :="01101"CONSTANT write : std_logic_vector(4 DOWNTO 0) :="01110"CONSTANT stop : std_logic_vector(4 DOWNTO 0) :="01111&
19、quot; CONSTANT comp : std_logic_vector(4 DOWNTO 0) :="10000" CONSTANT notp : std_logic_vector(4 DOWNTO 0) :="10001" CONSTANT clear : std_logic_vector(4 DOWNTO 0) :="10010" CONSTANT absp : std_logic_vector(4 DOWNTO 0) :="10011" CONSTANT modp : std_logic_vector(
20、4 DOWNTO 0) :="10100"END namespack;LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE WORK.namespack.ALL;ENTITY cpu ISPORT( reset : IN std_logic; -清零信號低有效 clock : IN std_logic; -時鐘信號 Write_Read: OUT std_logic; -讀寫信號,'1'為寫 M_address: OUT std_logic_vector(10
21、 DOWNTO 0); -地址線 M_data_in: IN std_logic_vector(7 DOWNTO 0); -數(shù)據(jù)輸入線 M_data_out: OUT std_logic_vector(7 DOWNTO 0); -數(shù)據(jù)輸出線 overflow: OUT std_logic -溢出標志 );END cpu;ARCHITECTURE RTL OF cpu IS SIGNAL IR: std_logic_vector(15 DOWNTO 0); -指令寄存器 SIGNAL MDR: std_logic_vector(7 DOWNTO 0); -數(shù)據(jù)寄存器 SIGNAL MAR: st
22、d_logic_vector(10 DOWNTO 0); -地址寄存器 SIGNAL status: integer RANGE 0 TO 6; -狀態(tài)寄存器 BEGIN status_change: PROCESS(reset, clock, status ) BEGINIF reset = '0' THEN status <= 0 ;- 進入初始狀態(tài) ELSIF clock'EVENT AND clock = '0' THEN CASE status IS WHEN 0 => status <= 1; WHEN 1 => IF
23、 IR(15 DOWNTO 11)= Stop THEN status <= 1; ELSE status <= 2; END IF; WHEN 2 => CASE IR(15 DOWNTO 11) ISWHEN Swap|Jmp|Jz|Read|Write =>status <= 3;WHEN OTHERS => status <= 0;END CASE; WHEN 3 => IF IR(15 DOWNTO 11)= Swap THEN status <= 0; ELSE status <= 4; END IF; WHEN 4 =&
24、gt; status <= 5; WHEN 5 => CASE IR(15 DOWNTO 11) ISWHEN Read|Write =>status <= 6;WHEN OTHERS => status <= 0;END CASE; WHEN 6=> CASE IR(15 DOWNTO 11) IS WHEN Comp=> status<=0; WHEN NotP=> status<=0; WHEN Clear=> status<=0; WHEN AbsP=> status<=0; WHEN ModP=
25、> status<=0; WHEN OTHERS=> status <= 0; END CASE; END CASE;END IF; END PROCESS status_change; seq: PROCESS(reset,clock) VARIABLE PC:std_logic_vector(10 DOWNTO 0); -程序計數(shù)器 VARIABLE R0,R1,R2,R3: std_logic_vector(7 DOWNTO 0); -通用寄存器 VARIABLE A: std_logic_vector(7 DOWNTO 0); -臨時寄存器 VARIABLE R
26、C: std_logic_vector(7 DOWNTO 0); -比較結(jié)果寄存器 VARIABLE RM: std_logic_vector(7 DOWNTO 0); -取模結(jié)果寄存器 VARIABLE temp: std_logic_vector(8 DOWNTO 0); -臨時變量 BEGIN IF(reset='0') THEN- 進入初始狀態(tài) IR <= (OTHERS=>'0'); PC := (OTHERS=>'0'); R0 := (OTHERS=>'0'); R1 := (OTHERS=&
27、gt;'0'); R2 := (OTHERS=>'0'); R3 := (OTHERS=>'0'); A := (OTHERS=>'0'); MAR <= (OTHERS=>'0'); MDR <= (OTHERS=>'0'); ELSIF(clock'event AND clock='1') THEN overflow <= '0' CASE status IS WHEN 0=> -狀態(tài)0 IR <
28、= M_data_in & "00000000" -取指令 PC := PC+1; -程序計數(shù)器加1 WHEN 1=> -狀態(tài)1 IF (IR(15 DOWNTO 11) /= Stop) THEN MAR <= PC; END IF; CASE IR(15 DOWNTO 11) IS WHEN Load => R0:="0000" & IR(10 DOWNTO 7); WHEN Move => -Move Rx,Ry; CASE IR(10 DOWNTO 7) IS WHEN "0001"=&
29、gt; R0:=R1; WHEN "0010"=> R0:=R2; WHEN "0011"=> R0:=R3; WHEN "0100"=> R1:=R0; WHEN "0110"=> R1:=R2; WHEN "0111"=> R1:=R3; WHEN "1000"=> R2:=R0; WHEN "1001"=> R2:=R1; WHEN "1011"=> R2:=R3; WHEN &qu
30、ot;1100"=> R3:=R0; WHEN "1101"=> R3:=R1; WHEN "1110"=> R3:=R2; WHEN OTHERS=> NULL; END CASE; WHEN Shrp => -邏輯右移1位; CASE IR(10 DOWNTO 9) IS WHEN "00"=> R0:='0'&R0(7 DOWNTO 1); WHEN "01"=> R1:='0'&R1(7 DOWNTO 1);
31、 WHEN "10"=> R2:='0'&R2(7 DOWNTO 1); WHEN OTHERS=> R3:='0'&R3(7 DOWNTO 1); END CASE; WHEN Shlp => -邏輯左移1位; CASE IR(10 DOWNTO 9) IS WHEN "00"=> R0:=R0(6 DOWNTO 0)&'0' WHEN "01"=> R1:=R1(6 DOWNTO 0)&'0' WHEN &
32、quot;10"=> R2:=R2(6 DOWNTO 0)&'0' WHEN OTHERS=> R3:=R3(6 DOWNTO 0)&'0' END CASE; WHEN Addp|Subp|Andp|Orp|Xorp|Swap => CASE IR(8 DOWNTO 7) IS WHEN "00"=> A:=R0; WHEN "01"=> A:=R1; WHEN "10"=> A:=R2; WHEN OTHERS=> A:=R3; E
33、ND CASE; WHEN OTHERS => NULL; END CASE; WHEN 2=> -狀態(tài)2 CASE IR(15 DOWNTO 11) IS WHEN Addp => -Rx:= Rx+A; CASE IR(10 DOWNTO 9) IS WHEN "00"=> temp := (R0(7) & R0(7 DOWNTO 0) + (A(7) & A(7 DOWNTO 0); R0:=temp(7 DOWNTO 0); overflow <= temp(8) XOR temp(7); WHEN "01&q
34、uot;=> temp :=(R1(7) & R1(7 DOWNTO 0) + (A(7) & A(7 DOWNTO 0); R1:=temp(7 DOWNTO 0); overflow <= temp(8) XOR temp(7); WHEN "10"=> temp :=(R2(7) & R2(7 DOWNTO 0) + (A(7) & A(7 DOWNTO 0); R2:=temp(7 DOWNTO 0); overflow <= temp(8) XOR temp(7); WHEN OTHERS=> temp
35、 :=(R3(7) & R3(7 DOWNTO 0) + (A(7) & A(7 DOWNTO 0); R3:=temp(7 DOWNTO 0); overflow <= temp(8) XOR temp(7); END CASE; WHEN Subp => -Rx:= Rx-A; CASE IR(10 DOWNTO 9) IS WHEN "00"=> temp :=(R0(7) & R0(7 DOWNTO 0) + NOT(A(7) & A(7 DOWNTO 0) + 1; R0:=temp(7 DOWNTO 0); ov
36、erflow <= temp(8) XOR temp(7); WHEN "01"=> temp :=(R1(7) & R1(7 DOWNTO 0) + NOT(A(7) & A(7 DOWNTO 0) + 1; R1:=temp(7 DOWNTO 0); overflow <= temp(8) XOR temp(7); WHEN "10"=> temp :=(R2(7) & R2(7 DOWNTO 0) + NOT(A(7) & A(7 DOWNTO 0) + 1; R2:=temp(7 DOWNT
37、O 0); overflow <= temp(8) XOR temp(7); WHEN OTHERS=> temp :=(R3(7) & R3(7 DOWNTO 0) + NOT(A(7) & A(7 DOWNTO 0) + 1; R3:=temp(7 DOWNTO 0); overflow <= temp(8) XOR temp(7); END CASE; WHEN Andp => - Rx:= Rx AND A; CASE IR(10 DOWNTO 9) IS WHEN "00"=> R0:=R0 and A; WHEN &
38、quot;01"=> R1:=R1 and A; WHEN "10"=> R2:=R2 and A; WHEN OTHERS=> R3:=R3 and A; END CASE; WHEN Orp => - Rx := Rx OR A; CASE IR(10 DOWNTO 9) IS WHEN "00"=> R0:=R0 or A; WHEN "01"=> R1:=R1 or A; WHEN "10"=> R2:=R2 or A; WHEN OTHERS=>
39、R3:=R3 or A; END CASE; WHEN Xorp => -Rx=Rx XOR A; CASE IR(10 DOWNTO 9) IS WHEN "00"=> R0:=R0 XOR A; WHEN "01"=> R1:=R1 XOR A; WHEN "10"=> R2:=R2 XOR A; WHEN OTHERS=> R3:=R3 XOR A; END CASE; WHEN Swap => -Swap: Rx to Ry; CASE IR(10 DOWNTO 7) IS WHEN &qu
40、ot;0100"=> R0:=R1; WHEN "1000"=> R0:=R2; WHEN "1100"=> R0:=R3; WHEN "0001"=> R1:=R0; WHEN "1001"=> R1:=R2; WHEN "1101"=> R1:=R3; WHEN "0010"=> R2:=R0; WHEN "0110"=> R2:=R1; WHEN "1110"=> R
41、2:=R3; WHEN "0111"=> R3:=R1; WHEN "1011"=> R3:=R2; WHEN "0011"=> R3:=R0; WHEN OTHERS=> NULL; END CASE; WHEN OTHERS => NULL; END CASE; WHEN 3=> -狀態(tài)3 CASE IR(15 DOWNTO 11) IS WHEN "01010"=> -Swap CASE IR(10 DOWNTO 9) IS WHEN "00"=> R0:=A; WHEN "01"=> R1:=A; WHEN "10"=> R2:=A; WHEN OTHERS=> R3:=A; END CASE; WHEN Jmp|Jz|Read|Write =&
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學英語試卷聽力稿
- 書籍設計印刷合同范本文檔
- 個體診所自查報告
- 廈門落戶中介合同范本
- 業(yè)務員個人年度工作總結(jié)
- 三年級語文備課組工作總結(jié)
- 廚房調(diào)味采購合同范例
- 公司代運營合同范本
- 農(nóng)業(yè)種植工合同范本
- 中式糕轉(zhuǎn)讓店鋪合同范本
- 保胎患者護理
- 冷卻塔使用維護說明書
- 慢性心源性心臟病護理查房課件
- 項目維保投標方案技術(shù)標
- 安全生產(chǎn)法律法規(guī)培訓課件1
- 教育的減法讓孩子更幸福(課件)-小學生教育主題班會通用版
- 大格子作文紙模板
- 中考物理一輪復習策略與方法
- 祥云財富工業(yè)園區(qū)新建鐵路專用線工程環(huán)評報告
- 藥店換證材料
- 移動商務基礎(吳洪貴)課件 第二章 探秘移動技術(shù)
評論
0/150
提交評論