計算機組成原理課程設計報告江蘇大學軟件工程_第1頁
計算機組成原理課程設計報告江蘇大學軟件工程_第2頁
計算機組成原理課程設計報告江蘇大學軟件工程_第3頁
計算機組成原理課程設計報告江蘇大學軟件工程_第4頁
計算機組成原理課程設計報告江蘇大學軟件工程_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、. . . . 大學 計算機組成原理課程設計報告 專業(yè)名稱: 軟件工程班級學號:軟件1001第一天 取操作數(shù)微程序的設計和調試1、 設計目標 設計并調試取操作數(shù)的微程序二、取操作數(shù)微流程三、測試程序、數(shù)據(jù)與運行結果1、測試容:立即尋址,直接尋址運行數(shù)據(jù):存地址(H)機器碼(H)匯編指令0000077A 5678 0010MOV #5678H,0010H運行結果與分析:從微地址可以看出,先是取指令001-002-003-004,再是取源操作數(shù),004-00B-00F-016-006,是立即數(shù)尋址方式,再是取目的操作數(shù),006-01B01F-024-025-026-007,是直接尋址方式,最后是執(zhí)

2、行階段,007-044-047-072-000,將結果mov到存里。2、測試容:立即尋址,寄存器運行數(shù)據(jù):存地址(H)機器碼(H)匯編指令00000761 5678 MOV #5678H,R1運行結果與分析:從微地址可以看出,先是取指令001-002-003-004,再是取源操作數(shù),004-00B-00F-016-006,是立即數(shù)尋址方式,再是取目的操作數(shù),006-018-007,是寄存器尋址方式,最后是執(zhí)行階段,007-044-046-000,將結果mov到寄存器里。由GRS可以看出最終結果由0000變成了5678。4、 設計中遇到的問題與解決辦法 才開始的時候,對軟件的應用不是很熟悉,遇到

3、一些麻煩,在同學的幫助下,解決了軟件應用問題。第二天 運算指令的微程序設計與調試1、 設計目標 設計并調試運算指令的微程序。二、運算指令微程序入口地址指令助記符指 令 編 碼入口地址(H)FEDCBA9876543210MOVsrc, dst000001源地址碼目的地址碼044ADDsrc, dst000010源地址碼目的地址碼048ADDCsrc, dst000011源地址碼目的地址碼04CSUB src, dst000100源地址碼目的地址碼050SUBBsrc, dst000101源地址碼目的地址碼054CMPsrc, dst000110源地址碼目的地址碼058ANDsrc, dst00

4、0111源地址碼目的地址碼05COR src, dst001000源地址碼目的地址碼060XORsrc, dst001001源地址碼目的地址碼064TESTsrc, dst001010源地址碼目的地址碼068INC dst00000010001目的地址碼0A4DECdst00000010010目的地址碼0A8NOTdst00000010011目的地址碼0AC三、運算類指令微程序微地址(H)微指令(H)微命令BMNA注釋00700000800OP4XXX指令執(zhí)行入口0489870006FTRoe, ADD, Sce, PSWce006FADD04C98B0006FTRoe,ADDC,SV,PSW

5、ce006FADDC05098F0006FTRoe,SUB,SV,PSWce006FSUB06F00000E707070存結果07068000000Soe,GRSce0000ALU運算,結果送寄存器07160030072Soe,DRce0072結果送存儲器07200052000DRoe,ARoe,WR0000四、測試程序、數(shù)據(jù)與運行結果1、測試容:ADD運算運行數(shù)據(jù):存地址(H)機器碼(H)匯編指令000000020761 56780B61 F000MOV #5678H,R1ADD #F000, R1運行結果與分析:從微地址可以看出,第一階段先是取第一條指令(MOV #5678H,R1)001

6、-002-003-004,再是取源操作數(shù),004-00B-00F-016-006,是立即數(shù)尋址方式,再是取目的操作數(shù),006-018-007,是寄存器尋址方式,最后是執(zhí)行階段,007-044-046-000,將結果mov到寄存器里。在GRS可以看出由0000變成了5678。第二階段先是取第二條指令(ADD #F000, R1)001-002-003-004,再是取源操作數(shù),004-00B-00F-016-006,是立即數(shù)尋址方式,再是取目的操作數(shù),006-018-007,是寄存器尋址方式,最后是執(zhí)行階段,007-048-04F-070-000,是ADD運算,結果存放在寄存器GRS中,可以看出結

7、果為4678,并且產(chǎn)生進位,SZOC=0001,正確。五、設計中遇到的問題與解決辦法 指令的入口地址開始時沒看懂,在同學的點撥下明白了。再是寫微程序階段,完成微程序的輸入后,輸入時由于不太仔細有一些錯誤,經(jīng)過調試發(fā)現(xiàn)并改正了錯誤。經(jīng)過對每條運算的測試,一些結果不對,在自己的一步一步的查找中,通過和同學的微程序的對照,一一弄懂并改正了。第三天 CPU硬件的初級設計與驗證一、設計目標 在運算器實驗的基礎上對硬件進行擴充,建立初級CPU的數(shù)據(jù)通路,構造一個只支持運算指令的初級CPU。二、硬件設計1、PC模塊設計(加上適當注釋)module PC(d,q,n_reset,clk,ce,PCinc);

8、input 15:0 d; input n_reset,clk,ce; input PCinc; output 15:0 q; reg 15:0 data;always (posedge clk or negedge n_reset) beginif (!n_reset)data = 0; else if (ce)data = d;else if(PCinc)data = data+1; endassign q = data;endmodule2、IR模塊設計module IR #(parameter DATAWIDTH=16)(input wire DATAWIDTH-1:0 d, inpu

9、t wire clk, input wire ce, input n_reset, output reg DATAWIDTH-1:0 q);always(posedge clk or negedge n_reset) beginif (!n_reset)q = 0; else if (ce)q = d;endDR:module DR #(parameter DATAWIDTH=16)(input wire DATAWIDTH-1:0 data_IB, input wire DATAWIDTH-1:0 data_DB, input wire clk, input wire DRce_IB, in

10、put wire DRce_DB, input n_reset, output reg DATAWIDTH-1:0 q);always(posedge clk or negedge n_reset) begin if(!n_reset)q=0;else if(DRce_IB)q=data_IB;else if(DRce_DB)q=data_DB;endendmodule3、頂層模塊設計(自己增加的設計部分)/TR/TR寄存器的實例化R #(DATAWIDTH) TR(.q(TR_out),.d(IB),.clk(clock),.ce(TRce),.n_reset(n_reset);buffer

11、 #(DATAWIDTH) reg_buffer(.q(IB), .d(TR_out), .oe(TRoe);/ AR/AR寄存器的實例化R #(DATAWIDTH) AR(.q(AR_out),.d(IB),.clk(clock),.ce(ARce),.n_reset(n_reset);buffer #(ADDRWIDTH) AR_AB(.q(AB), .d(AR_out), .oe(ARoe_AB);buffer #(ADDRWIDTH) AR_IB(.q(IB), .d(AR_out), .oe(ARoe_IB);/IR/IR寄存器的實例化R #(DATAWIDTH) IR(.q(IR_

12、out),.d(IB),.clk(clock),.ce(IRce),.n_reset(n_reset);/PCPC PC(.d(IB), .q(PC_out), .n_reset(n_reset), .clk(clock), .ce(PCce), .PCinc(PCinc);buffer #(DATAWIDTH) PC_buffer(.q(IB), .d(PC_out), .oe(PCoe);/DRDR #(DATAWIDTH) DR(.q(DR_out), .data_IB(IB), .data_DB(DB), .clk(clock), .DRce_IB(DRce_IB), .DRce_DB

13、(DRce_DB), .n_reset(n_reset);buffer #(DATAWIDTH) DR_DB(.q(DB), .d(DR_out), .oe(DRoe_DB);buffer #(DATAWIDTH) DR_IB(.q(IB), .d(DR_out), .oe(DRoe_IB);三、驗證1、測試容:ADD運算運行數(shù)據(jù):存地址(H)機器碼(H)匯編指令000000020761 56780B61 F000MOV #5678H,R1ADD #F000, R1結果和第二天的一樣,說明硬件擴充正確。四、設計中遇到的問題與解決辦法 在寫TR,AR,IR的實例化代碼時,沒注意是用寄存器模塊R實

14、例化得到的,經(jīng)過報錯和仔細看書后,發(fā)現(xiàn)了問題,成功改正過來了。完成程序運行出了問題,經(jīng)過查找發(fā)現(xiàn)是DR模塊出了問題,if(!n_reset)q=0;else if(DRce_IB)q=data_IB;else if(DRce_DB)q=data_DB;這一句被我寫成了if(!n_reset)q=0;else if(DRce_IB)q=data_IB;else q=data_DB。第四天 為CPU擴充轉移指令一、設計要求 在初級CPU的基礎上進行功能擴充,使其支持轉移類指令二、硬件uAG模塊設計(自己修改的設計部分,加上適當注釋)3d3:uAGout = NA8:1,BM3_uAR0; /3,根

15、據(jù)條件轉移指令操作碼PSW的ZF,OF,SF,CF狀態(tài)標志決定微地址/第四天always(SZOC, IR) begin case(IR7:6)/ 條件轉移類指令 2b00: Flag_MUX=SZOC0; 2b01: Flag_MUX=SZOC1; 2b10: Flag_MUX=SZOC2; 2b11: Flag_MUX=SZOC3; default:Flag_MUX002-003-004,再是取源操作數(shù),004-00B-00F-016-006,是立即數(shù)尋址方式,再是取目的操作數(shù),006-018-007,是寄存器尋址方式,最后是執(zhí)行階段,007-044-046-000,將結果mov到寄存器里

16、。在GRS可以看出由0000變成了5678。第二階段先是取第二條指令(ADD #F000, R1)001-002-003-004,再是取源操作數(shù),004-00B-00F-016-006,是立即數(shù)尋址方式,再是取目的操作數(shù),006-018-007,是寄存器尋址方式,最后是執(zhí)行階段,007-048-04F-070-000,是ADD運算,結果存放在寄存器GRS中,可以看出結果為4678,并且產(chǎn)生進位,SZOC=0001,正確。第三階段,進入JC指令,因為C=1,有進位,所以條件滿足,執(zhí)行的是075-077-000,正確。五、設計中遇到的問題與解決辦法 程序中誤將賦值符號=寫成了=, 被同學發(fā)現(xiàn),與時

17、修改,并成功得到解決。第五天 為CPU擴充移位指令一、設計目標 在前面的CPU的基礎上擴充硬件,使其支持移位指令。二、硬件設計1、SHIFTER模塊設計(加上適當注釋)wire data_lsb; wire data_hsb; /*/ */ 第五天要修改的代碼 */assign data_lsb = 1b0 ; /assign data_hsb = 1b0 ; mux#(1) mux_1(.d1(0),.d2(0),.d3(d15),.d4(CF),.q(data_lsb),.addr(IR76); mux#(1) mux_2(.d1(d15),.d2(0),.d3(d0),.d4(CF),.

18、q(data_hsb),.addr(IR76);/ 根據(jù)不同的移位指令,實例化兩個四選一多路器,重新形成data_lsb和data_lsb */ 多路器mux在工程文件中已提供 */ */*2、CF模塊設計timescale 1ns / 1psmodule CF(d15, d0, Cout, q, SL, SR);input d15, d0, Cout;input SL, SR;output q;reg q;always (*)begincase (SL, SR)3b01: q = d0;3b10: q = d15;default:q = Cout;endcaseendendmodule3、I

19、R_DECODE模塊設計(自己增加修改的設計部分)2b00:BM4_uA002-003再是取目的操作數(shù),006-01B-01F-024-025-026-007,是直接尋址方式,最后是執(zhí)行階段,007-092-06F-070,執(zhí)行SAR指令。由下一條指令可以看出結果變成了03B0,為右移后的結果,正確。四、設計中遇到的問題與解決辦法 在實例化兩個四選一多路器時,給data_lsb,data_hsb初始化了,導致運行結果出錯,經(jīng)過老師的指導,改正正確。第六天 為CPU擴充堆棧類指令一、設計目標 在前面的CPU的基礎上增加堆棧,使其支持與堆棧有關的PUSH、POP、CALL、RET指令二、硬件設計1

20、、SP模塊設計(加上適當注釋)timescale 1ns / 1psmodule SP(q,d,clk,ce,n_reset); parameter DATAWIDTH=16; output DATAWIDTH-1:0 q; input DATAWIDTH-1:0 d; input clk,ce,n_reset; reg DATAWIDTH-1:0 q;always (posedge clk or negedge n_reset)beginif (!n_reset)q =16 h003F; /當復位信號有效時,SP的輸出為03Felse if (ce) /當使能信號有效時,輸出就是輸入的容q

21、= d;endendmodule2、頂層模塊設計(自己增加修改的設計部分)SP #(DATAWIDTH) SP(.d(IB), .q(SP_out), .clk(clock), .ce(SPce), .n_reset(n_reset);buffer #(DATAWIDTH) SP_IB(.q(IB),.d(SP_out),.oe(SPoe);三、PUSH、POP、CALL、RET指令微程序的設計PUSH(堆棧指令)微地址(H)微指令(H)微命令BMNA注釋0C0F43000C1SPoe,Ace,SV00C1取sp0C162B300C2Soe,DEC,SV,DRce00C2Sp-10C27C08

22、00C3Soe,SPce,ARce00C3Sp-1后的地址0C300052000DRoe,ARoe,WR0000將容寫入sp-1所指向的存中POP(壓棧指令)微地址(H)微指令(H)微命令BMNA注釋0C8B00000C9ARoe,TRce00C9將目標地址先存放在暫存器中0C9F40800CASPoe,ARce,Ace00CA取sp 0CA027610CBRD,ARoe,DRce,INC,SV00CB讀出sp所指向的容,sp-10CB800800CCTRoe,ARce00CC取目標地址0CC7C052000ARoe,DRoe,WR,Soe,SPce0000將sp中的容寫入目標地址CALL(子

23、程序調用指令)微地址(H)微指令(H)微命令BMNA注釋0D0F40000D1SPoe,Ace00D1棧頂單元減一,并保存原PC容0D1B2B000D2DEC,SV,ARoe,TRce00D20D27C0800D3Soe,ARce,SPce00D3將sp-1送入SP和AR中0D3200300D4PCoe,DRce00D4將PC容放入DR0D484052000ARoe,DRoe,WR,TRoe,PCce0000寫入棧頂單元RET(返回指令)微地址(H)微指令(H)微命令BMNA注釋03CF408003DSPoe,ARce,Ace003D03D0276103FRD,ARoe,DRce,INC,SV

24、003F03FC4000040DRoe,PCce00400407C000000Soe,SPce0000四、測試程序、數(shù)據(jù)與運行結果1、測試容:PUSH(堆棧指令)運行數(shù)據(jù):存地址(H)機器碼(H)匯編指令0000031A 0004PUSH 0004H運行結果與分析:從微地址可以看出,第一階段先是取指令001-002-003再是取目的操作數(shù),006-01B-01F-024-025-026-007,是直接尋址方式,最后是執(zhí)行階段,0C0-0C1-0C2-0C3-000,執(zhí)行PUSH指令。DR中為0004H里的容5EE2。同時可以看出SP始終為3F。PUSH指令正確。2、測試容:POP(壓棧指令)運

25、行數(shù)據(jù):存地址(H)機器碼(H)匯編指令0002033A 0008HPOP 0004H運行結果與分析:從微地址可以看出,第一階段先是取指令001-002-003再是取目的操作數(shù),006-01B-01F-024-025-026-007,是直接尋址方式,最后是執(zhí)行階段,0C8-0C9-0CA-0CB-0CC-000,執(zhí)行POP指令。SP減一變?yōu)?E。在存中可以看出,0008H中的容變成了0004H中的容5EE2。POP指令執(zhí)行正確。3、測試容:CALL(子程序調用指令)運行數(shù)據(jù):存地址(H)機器碼(H)匯編指令00000010035A 00100760 5555CALL 0010HMOV #555

26、5,R0運行結果與分析:從微地址可以看出,第一階段是取第一條指令(CALL 0010H),001-002-003,再是取目的操作數(shù),006-01B-01F-024-025-026-007,最后是執(zhí)行階段,007-0D0-0D1-0D2-0D3-0D4-000,SP減一變?yōu)?E,PC轉到0010H;第二階段先是取第二條指令(MOV #5555H,R0)001-002-003-004,再是取源操作數(shù),004-00B-00F-016-006,是立即數(shù)尋址方式,再是取目的操作數(shù),006-018-007,是寄存器尋址方式,最后是執(zhí)行階段,007-044-046-000,將結果mov到寄存器里。在GRS可

27、以看出由0000變成了5555。4、測試容:RET(返回指令)運行數(shù)據(jù):存地址(H)機器碼(H)匯編指令000200120761 56780002MOV #5678,R1RET運行結果與分析: CALL執(zhí)行完后,PC跳轉到0012H,所以第一階段先是取第二條指令(RET)001-002-003,然后執(zhí)行RET,007-03C-03D-03F-040-000,SP加一變?yōu)?F,跳轉回到原PC,0002H處,進入第二階段,先是取第一條指令(MOV #5678,R1),001-002-003,再是取源操作數(shù),004-00B-00F-016-006,是立即數(shù)尋址方式,再是取目的操作數(shù),006-018-

28、007,是寄存器尋址方式,最后是執(zhí)行階段,007-044-046-000,將結果mov到寄存器里。在GRS可以看出由0000變成了5678。 四、設計中遇到的問題與解決辦法 寫微指令時遇到許多問題,剛開始沒弄明白各條指令的意思,然后經(jīng)過同學的講解,弄懂了各個指令的意思,通過參考書籍,成功的寫出了各個指令的微程序。第七天 為CPU擴充中斷系統(tǒng)一、設計目標 在前面CPU的基礎上增加中斷系統(tǒng),使其支持鍵盤中斷。二、硬件設計1、IF(可只寫自己增加修改部分。并加上適當注釋)if(!n_reset or cli)IF=0;else if(sti)IF=1;2、INTCif(KR)VA_out=h0020

29、;else if(PR)VA_out=h0021;3、頂層模塊設計(自己增加修改的設計部分)/第七天:IF、INTC的實例化 *IF IF(.clk(clock), .n_reset(n_reset), .sti(STI), .cli(CLI), .IF(IF_out);INTC INTC(.KR(KR), .PR(PR), .INTR(INTR), .VA_out(VA_out);buffer #(DATAWIDTH) VA_B(.q(DB), .d(VA_out), .oe(INTA);三、微程序設計1中斷響應隱指令的微程序設計微地址(H)微指令(H)微指令字段(H)微命令F0F1F2F3F4F5F6F7F8F9081F4005082750000050082CLI,S

溫馨提示

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

評論

0/150

提交評論