計(jì)算機(jī)組成原理課程設(shè)計(jì)報(bào)告16位模型機(jī)的設(shè)計(jì)_第1頁
計(jì)算機(jī)組成原理課程設(shè)計(jì)報(bào)告16位模型機(jī)的設(shè)計(jì)_第2頁
計(jì)算機(jī)組成原理課程設(shè)計(jì)報(bào)告16位模型機(jī)的設(shè)計(jì)_第3頁
計(jì)算機(jī)組成原理課程設(shè)計(jì)報(bào)告16位模型機(jī)的設(shè)計(jì)_第4頁
計(jì)算機(jī)組成原理課程設(shè)計(jì)報(bào)告16位模型機(jī)的設(shè)計(jì)_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、-PAGE . z.*經(jīng)濟(jì)學(xué)院華信學(xué)院計(jì)算機(jī)組成原理課程設(shè)計(jì)報(bào)告計(jì)算數(shù)據(jù)塊中所有數(shù)據(jù)的累加和并存儲到內(nèi)存單元中題 目 16位模型機(jī)的設(shè)計(jì) 姓 名學(xué) 號 4114170801 班 號 一 班 指導(dǎo)教師成 績 2014年1月目 錄TOC o 1-3 h u HYPERLINK l _Toc7545 一、引言 PAGEREF _Toc7545 3 HYPERLINK l _Toc10130 1.1設(shè)計(jì)目的 PAGEREF _Toc10130 3 HYPERLINK l _Toc28905 1.2設(shè)計(jì)任務(wù) PAGEREF _Toc28905 3 HYPERLINK l _Toc26095 二、 詳細(xì)設(shè)

2、計(jì)及實(shí)現(xiàn) PAGEREF _Toc26095 4 HYPERLINK l _Toc15336 2.1 擬定指令系統(tǒng) PAGEREF _Toc15336 4 HYPERLINK l _Toc25165 2.2指令格式 PAGEREF _Toc25165 5 HYPERLINK l _Toc24546 2.3尋址方式 PAGEREF _Toc24546 5 HYPERLINK l _Toc6087 三、16位CPU的模型 PAGEREF _Toc6087 7 HYPERLINK l _Toc5467 3.1 各功能部件的VHDL設(shè)計(jì) PAGEREF _Toc5467 9 HYPERLINK l _

3、Toc18244 3.2 16位模型機(jī)的設(shè)計(jì)與實(shí)現(xiàn) PAGEREF _Toc18244 22 HYPERLINK l _Toc8779 四、總結(jié) PAGEREF _Toc8779 27 HYPERLINK l _Toc11488 五、參考文獻(xiàn): PAGEREF _Toc11488 27 HYPERLINK l _Toc12378 六、 代碼 PAGEREF _Toc12378 28-. z.一、引言1.1設(shè)計(jì)目的為掌握并穩(wěn)固本學(xué)期所學(xué)習(xí)的計(jì)算機(jī)組成原理知識,設(shè)計(jì)本次試驗(yàn)。運(yùn)用整合所學(xué)的相關(guān)知識,一步步設(shè)計(jì)構(gòu)造一臺根本的模型計(jì)算機(jī),明確計(jì)算機(jī)的控制原理與控制過程,穩(wěn)固和靈活應(yīng)用所學(xué)的理論知識,掌

4、握計(jì)算機(jī)組成的一般設(shè)計(jì)方法,提高學(xué)生設(shè)計(jì)能力和實(shí)踐操作技能,為從事計(jì)算機(jī)研制與設(shè)計(jì)打下根底。1.2設(shè)計(jì)任務(wù)本機(jī)功能:計(jì)算數(shù)據(jù)塊中所有數(shù)據(jù)的累加和并存儲到內(nèi)存單元中。匯編代碼如下: START: MOV SI, OFFSET SRC1 ;源操作數(shù)地址送SIMOV DI,OFFSET D*T ;目的操作數(shù)地址送DIMOV B*,OFFSET SRC2 ;完畢地址送B*MOV BL 0 ;設(shè)置BL中初值為0NE*T:MOV AL,SI ;取數(shù) ADD BL , AL ; 數(shù)據(jù)相加MOV DI,AL ;存數(shù)CMP SI,B* ;JE START ;如果SI=B*,則轉(zhuǎn)向STARTINCSI ;修改源地

5、址JMP NE*T ;轉(zhuǎn)向NE*T二、 詳細(xì)設(shè)計(jì)及實(shí)現(xiàn)2.1 擬定指令系統(tǒng)分析:依據(jù)匯編語言程序得出部件間的數(shù)據(jù)流的方向?yàn)榱⒓磾?shù)存放器存放器內(nèi)存 內(nèi)存操作數(shù)采用存放器間址尋址方式源與目的存放器內(nèi)容比擬,如果源等于目的轉(zhuǎn)移,轉(zhuǎn)向地址在指令中提供存放器加1指令無條件轉(zhuǎn)移指令,轉(zhuǎn)向地址在指令中提供。指令類型 指令中的立即數(shù)為一個字即16位立即數(shù)存放器需要在指令中指出存放器及立即數(shù)如:LOADI R0,10H,此指令為雙字指令內(nèi)存操作數(shù)存放器需要在指令中指出間址存放器及目的存放器如:LOAD R3,R1; 指令為單字指令存放器內(nèi)存 需要指令中指出源存放器及間址存放器如:STORE R2,R7; 指令為

6、單字指令存放器內(nèi)容比擬產(chǎn)生轉(zhuǎn)移的指令需要指令中指出源、目的存放器以及轉(zhuǎn)向的地址如:BRANCHEQI 0000H; 指令為單字指令存放器加1指令指令中指出存放器如: INC R1,指令為單字指令無條件轉(zhuǎn)移指令指令中提供轉(zhuǎn)向地址如:BRANCHI 0008H; 指令為單字指令-. z.2.2指令格式單字指令格式單指令但操作數(shù):INC BRANCHI單指令雙操作數(shù):mov load store LOADI雙字指令格式雙字三操作數(shù): BRANCHEQI BRANCHGTI操作碼指令功能00001LOAD將存放器間址的存儲單元內(nèi)容裝載到存放器00010STORE將存放器的數(shù)據(jù)存入到存放器間址的存儲單元

7、00011MOV將源存放器內(nèi)容傳送到目的存放器00100LOADI將立即數(shù)裝入到存放器00101BRANCHI無條件轉(zhuǎn)移到由立即數(shù)指定的地址00110BRANCHEQI如果源存放器內(nèi)容等于目的存放器的內(nèi)容,則轉(zhuǎn)移到由立即數(shù)指定的地址00111INC存放器內(nèi)容加1指令01000ADD數(shù)據(jù)相加-. z.2.3尋址方式尋址方式含義立即數(shù)尋址指令格式中源操作數(shù)為立即數(shù)存放器間址尋址方式存放器中操作數(shù)的地址直接尋址主存中為操作數(shù)-. z.依據(jù)以上設(shè)計(jì)的指令系統(tǒng),將主存中數(shù)據(jù)累加并存儲到內(nèi)存單元中的程序如下:地址機(jī)器碼指令 功能說明0000H0001H2001H0010HLOADI R1,0010H源操作

8、數(shù)地址送R10002H0003H2002H0030HLOADI R2,0030H目的操作數(shù)地址送R20004H0005H2006H0016HLOADI R6,0016H完畢地址送R60006H0007H2007H0000HLOAD R7,0R7內(nèi)放入0初始化最小值0008H080BHLOAD R3,R1取數(shù)0009H 401FHADD R7, R3相加000AH103AHSTORE R2,R7存數(shù)000BH000CH300EH0000HBRANCHEQI 0000H如果R6內(nèi)容等于R1的內(nèi)容,則轉(zhuǎn)向0000H000DH3031HINC R1修改源地址000EH000FH2800H0008HBR

9、ANCHI 0008H無條件轉(zhuǎn)移到由立即數(shù)指定的地址存儲器初始化文件memdata.mif的內(nèi)容:-. z.三、16位CPU的模型圖1是采用單總線構(gòu)造的16位CPU構(gòu)造圖,包含了根本的功能模塊,由存放器陣列構(gòu)成的8個16位存放器Reg0Reg7;工作存放器OpReg;算術(shù)邏輯運(yùn)算部件ALU;移位器Shifter;輸出存放器OutReg;比擬器p;指令存放器InstrReg;程序計(jì)數(shù)器Progt;地址存放器AddrReg。所有功能模塊共用16位的三態(tài)數(shù)據(jù)總線進(jìn)展信息的傳送。 控制器模塊由狀態(tài)機(jī)實(shí)現(xiàn),控制器依據(jù)指令、數(shù)據(jù)通路通過控制線向各功能模塊發(fā)出控制命令。由存放器陣列構(gòu)成的8個16位存放器Re

10、g0Reg7的優(yōu)點(diǎn)是節(jié)省資源、使用方便。它們共用一個三態(tài)開關(guān),由控制器選擇與數(shù)據(jù)總線的連接。工作存放器OpReg 可為ALU、比擬器p 提供一個操作數(shù),而ALU、比擬器的另一操作數(shù)直接來自數(shù)據(jù)總線。將ALU、移位器Shifter、輸出存放器OutReg 串接起來,由控制器統(tǒng)一控制來共同完成一些復(fù)雜的操作,由輸出存放器OutReg存儲結(jié)果,輸出存放器OutReg 向總線的輸出端含有三態(tài)開關(guān)。比擬器p 由控制器直接控制,比擬的結(jié)果進(jìn)入控制器。地址存放器AddrReg 提供要訪問的主存單元的地址,本設(shè)計(jì)中將程序和數(shù)據(jù)放在同一存儲器中。程序計(jì)數(shù)器Progt,不具備清零和+1的功能,存放CPU要執(zhí)行的下

11、一條指令的地址。指令存放器InstrReg 存放CPU正在執(zhí)行的指令。工作存放器OpReg,輸出存放器OutReg,指令存放器InstrReg,程序計(jì)數(shù)器Progt,地址存放器AddrReg,均為最根本的存放器。為了驗(yàn)證CPU的功能,增加存儲器,存儲器中存入完成數(shù)據(jù)塊傳送所需的程序和數(shù)據(jù)。系統(tǒng)中所有向數(shù)據(jù)總線輸出數(shù)據(jù)的模塊,其輸出口必須使用三態(tài)控制器。模型機(jī)的實(shí)際電路如圖2所示:圖2 頂層實(shí)體模擬圖-. z.3.1 各功能部件的VHDL設(shè)計(jì)程序包:說明數(shù)據(jù)類型、運(yùn)算器的功能、移位存放器的操作、比擬器的比擬類型和用于CPU控制的狀態(tài)類型。運(yùn)算器的設(shè)計(jì)功能:Sel輸入操作說明0000C= A通過P

12、ASS0001C= A AND B與0010C= A OR B或0011C= NOT A非0100C= A *OR B異或0101C= A + B加法0110C= A - B減法0111C= A + 1加11000C= A - 1減11001C= 0清零說明:a15.0來自于總線,b15.0來自于工作存放器OpReg,c15.0輸出送至移位器。sel3.0來自于控制器發(fā)出的控制信號aluSel3.0,選擇ALU的操作。-. z.運(yùn)算器功能仿真波形圖如圖3所示:圖3 運(yùn)算器功能仿真波形圖仿真結(jié)果說明:當(dāng)sel為0000時(shí),進(jìn)展直傳的操作。通過pass,則c=a,為1000。當(dāng)sel為0001時(shí),

13、進(jìn)展與的操作。a=1000,b=1234,與之后c為1000。當(dāng)sel為0010時(shí),進(jìn)展或的操作。a=1000,b=1234,c為1234。當(dāng)sel為0011時(shí),進(jìn)展非的操作。a=1000,a為EFFF。當(dāng)sel為0100時(shí),進(jìn)展異或的操作。a *or b,c為0234。當(dāng)sel為0101時(shí),進(jìn)展加法的操作。a=1000,c為2234。當(dāng)sel為0110時(shí),進(jìn)展減法的操作。a=1000,c為FDCC。當(dāng)sel為0111時(shí),進(jìn)展加1的操作。a=1000,c為1001。當(dāng)sel為1000時(shí),進(jìn)展減1的操作。a=1000,c為0FFF。當(dāng)sel為1001時(shí),進(jìn)展清0操作,全部置0.當(dāng)sel為1010

14、時(shí),為類型其他,全部輸出0.比擬器的設(shè)計(jì)功能:t_p比擬類型操作說明000Eq(等于)假設(shè)a=b,pout=1001Neq(不等于)假設(shè)ab,pout=1010Gt大于假設(shè)ab,pout=1011gte大于等于假設(shè)a=b,pout=1100It小于假設(shè)ab,pout=1101Ite小于等于假設(shè)a=b,pout=1其他pout=0比擬器功能仿真波形圖如圖4所示:圖 4 比擬器功能仿真波形圖仿真結(jié)果說明:sel為000時(shí),進(jìn)展比擬是否相等的操作,1000不等于1234,pout=0sel為001時(shí),進(jìn)展比擬是否不等于的操作,1000不等于1234,pout=1sel為010時(shí),進(jìn)展比擬是否大于的操

15、作,10001234,pout=0sel為011時(shí),進(jìn)展比擬是否大于等于的操作,10001234,pout=0sel為100時(shí),進(jìn)展比擬是否小于的操作,10001234,pout=1sel為101時(shí),進(jìn)展比擬是否小于等于的操作,10001234,pout=1sel為其他時(shí),pout輸出0.移位器的設(shè)計(jì)功能:t_shift移位類型000直通001無符號數(shù)左移010無符號數(shù)右移011循環(huán)左移100循環(huán)右移其他輸出0移位器的功能仿真波形圖如圖5所示:圖5 移位器的功能仿真波形圖仿真結(jié)果說明: 當(dāng)sel為000時(shí),進(jìn)展直傳的操作,a和y一樣 當(dāng)sel為001時(shí),進(jìn)展無符號數(shù)左移的操作,1234變?yōu)?4

16、68 當(dāng)sel為010時(shí),進(jìn)展無符號數(shù)右移的操作,1234變?yōu)?91A 當(dāng)sel為011時(shí),進(jìn)展循環(huán)左移的操作,1234變?yōu)?468 當(dāng)sel為100時(shí),進(jìn)展循環(huán)右移的操作,1234變?yōu)?91A 當(dāng)sel為其他時(shí),輸出0根本存放器ACLKQn+10011*0Qn功能:功能說明:在CPU中根本存放器的角色是工作存放器OpReg,輸出存放器OutReg,指令存放器InstrReg,程序計(jì)數(shù)器Progt,地址存放器AddrReg。根本存放器功能仿真波形圖如圖6所示:圖6 根本存放器功能仿真波形圖仿真結(jié)果說明:0ns到5ns,還沒有遇到clk的上升沿,所以q端的輸出是00005ns到20ns時(shí),clk

17、的上升沿到來,q端輸出100020ns到25ns時(shí),a發(fā)生變化,但clk上升沿沒有到來,q端輸出100025ns到30ns時(shí),clk的上升沿到來,q端輸出1234存放器組功能:Sel2.0Reg000R0001R1111R7功能說明:clk的上升沿,將data15.0寫入sel2.0指定的存放器中,并在q15.0輸出此存放器新寫入的內(nèi)容。否則,q15.0輸出sel2.0指定的存放器原來的內(nèi)容。如此設(shè)計(jì)的目的,便于觀察寫入指定存放器中的內(nèi)容。存放器組功能仿真波形圖如圖7所示:圖7 存放器組功能仿真波形圖0 - 10ns,sel=000選中R0,當(dāng)clk上升沿時(shí),將data的數(shù)據(jù)0001寫入R0,

18、q=000110-20ns,sel=001選中R1,當(dāng)clk上升沿時(shí),將data的數(shù)據(jù)0002寫入R1,q=000220-30ns,sel=010選中R2,當(dāng)clk上升沿時(shí),將data的數(shù)據(jù)0003寫入R2,q=000330-40ns,sel=011選中R3,當(dāng)clk上升沿時(shí),將data的數(shù)據(jù)0004寫入R3,q=000440-50ns,sel=100選中R4,當(dāng)clk上升沿時(shí),將data的數(shù)據(jù)0005寫入R4,q=000550-60ns,sel=101選中R5,當(dāng)clk上升沿時(shí),將data的數(shù)據(jù)0006寫入R5,q=000660-70ns,sel=110選中R6,當(dāng)clk上升沿時(shí),將data

19、的數(shù)據(jù)0007寫入R6,q=000770-80ns,sel=111選中R7,當(dāng)clk上升沿時(shí),將data的數(shù)據(jù)0008寫入R7,q=0008時(shí)序電路功能說明:產(chǎn)生電位信號step和脈沖信號t4,每個step的上升沿狀態(tài)機(jī)的狀態(tài)發(fā)生改變,t4與存放器的寫信號相與作為存放器的同步打入控制信號。時(shí)序電路的功能仿真波形圖如圖8所示:圖8 時(shí)序電路的功能仿真波形圖仿真結(jié)果說明:0-10ns,clr高電平,t4=0,step初始值為0;10-15ns,clr低電平,clk為低電平,t4,step保持不變;15-20ns,clr低電平,clk上升沿,*=000+1=001,t4 = *(1) and *(0

20、)=0 and 0=0,step=*(1)=0;20-25ns,clr低電平,clk為低電平,t4,step保持不變;25-30ns,clr低電平,clk上升沿,*=001+1=010,t4 = *(1) and *(0)=0 and 0=0,step=*(1)=0;30-35ns,clr低電平,clk為低電平,t4,step保持不變;35-40ns,clr低電平,clk上升沿,*=010+1=011,t4 = *(1) and *(0)=1 and 0=0,step=*(1)=1;40-45ns,clr低電平,clk為低電平,t4,step保持不變;45-50ns,clr低電平,clk上升沿

21、,*=011+1=100,t4 = *(1) and *(0)=1 and 1=1,step=*(1)=1;50-55ns,clr低電平,clk為低電平,t4,step保持不變;存儲器的設(shè)計(jì)LPM_RAM定制首先,定制初始化數(shù)據(jù)文件,建立Memory Initialization File(.mif)文件,選擇FileNew命令,并在New窗口選擇Other file選項(xiàng),再選擇Memory Initialization File選項(xiàng)。出現(xiàn)對話框,選擇存儲字的個數(shù)及字長,按下OK,出現(xiàn)如下界面,在最左列或最上行擊鼠標(biāo)右鍵,選擇地址和內(nèi)存操作數(shù)所使用的基值,選擇He*adecimal,存儲器里存

22、放數(shù)據(jù)塊傳送的指令和數(shù)據(jù),CPU通過執(zhí)行此程序進(jìn)展功能驗(yàn)證。完成后,保存文件(memdata.mif)。之后,定制LPM_RAM。設(shè)計(jì)步驟如下:選擇ToolsMegaWizard Plug-In Manager命令,翻開MegaWizard Plug-In Manager 對話框,選中Create a new custom megafunction variation,單擊Ne*t,出現(xiàn)下面對話框,選擇LPM_RAM_DQ,選擇所用器件的類型以及所創(chuàng)立的輸出文件的類型及名字。選擇NE*T,進(jìn)入如下界面。選擇數(shù)據(jù)線位數(shù)、主存容量大小地址線位數(shù)。C:cpu_zjram選擇NE*T,進(jìn)入下一步界面,

23、取消q輸出端的鎖存。選擇NE*T,進(jìn)入下一步,選擇內(nèi)存的初始化文件。依據(jù)選項(xiàng)自動生成的代碼,注意將.mif文件的路徑改為相對路徑,存儲單元的個數(shù)為100個。ram的功能仿真波形圖如圖9所示:圖9 ram仿真波形圖功能仿真說明:0-10ns,wren是讀信號,address地址存放器選擇的是地址0000單元,當(dāng)遇到clk時(shí),將ram里面的內(nèi)容讀出來是200110-20ns,wren是讀信號,address地址存放器選擇的是地址0001單元,當(dāng)遇到clk時(shí),將ram里面的內(nèi)容讀出來是003040-50ns,wren是寫信號,address地址存放器選擇的是地址0031單元,當(dāng)遇到clk時(shí),將ram

24、里面的內(nèi)容寫進(jìn)去是5550控制器功能說明:采用狀態(tài)機(jī)實(shí)現(xiàn),其中control的輸入有step,reset,pout,instrReg,這些輸入的組合可用于識別指令,并輸出相關(guān)控制信號。具體信號的相關(guān)功能見control.vhdl部件說明。在譯碼階段,具體來說,在一定的節(jié)拍下,contorl首先將接收的指令的前5位和后6位分開,用于別離操作數(shù)和操作碼,然后將操作數(shù)的前3位和后3位分開,用于區(qū)分源操作數(shù)和目的操作數(shù),然后根據(jù)具體的指令輸出相關(guān)控制信號。依據(jù)指令的格式、數(shù)據(jù)通路給出指令系統(tǒng)中所有指令的指令流程:-. z.3.2 16位模型機(jī)的設(shè)計(jì)與實(shí)現(xiàn)創(chuàng)立頂層實(shí)體圖工程所在的文件夾中包含文件如下所示

25、。依次在功能部件所對應(yīng)的VHD文件上擊右鍵,選擇Create Symbol Files for Current File,創(chuàng)立所有功能部件的圖符。功能說明:整個CPU系統(tǒng)以控制器為中心,負(fù)責(zé)指令的譯碼及發(fā)出各種相關(guān)控制信號。節(jié)拍發(fā)生器控制著整個系統(tǒng)的時(shí)鐘信號,系統(tǒng)的相關(guān)部件在統(tǒng)一的節(jié)拍控制下發(fā)揮自己的作用。IR為指令存放器,負(fù)責(zé)存儲即將執(zhí)行的下一條指令,addr為地址存放器,存放被訪問存儲單元的地址。PC為程序計(jì)數(shù)器,存放現(xiàn)行指令的地址,具有計(jì)數(shù)功能。ALU負(fù)責(zé)處理相關(guān)數(shù)據(jù)運(yùn)算操作。存放器組負(fù)責(zé)存放相關(guān)操作數(shù)和中間臨時(shí)變量。多路數(shù)據(jù)選擇器在相關(guān)控制信號的作用下將相關(guān)數(shù)據(jù)輸入ALU處理??偩€分?jǐn)?shù)

26、據(jù)總線和地址總線,負(fù)責(zé)ram和相關(guān)存放器之間的數(shù)據(jù)交換。RAM為存儲器,存放相關(guān)數(shù)據(jù)和程序。-. z.連接所有的功能部件形成模型機(jī)。仿真結(jié)果說明指令 LOADI R1,0020H; 執(zhí)行過程中存放器的變化情況:state微操作addraludata2instrpcramregselregnoutgetReset1ALU清0,輸出經(jīng)移位器傳至OutReg00000000ZZZZ00000000000000000000000mon1OutRegProgt00000000000000000000200100000000000mon2ProgtAddrReg0000000000000000200100

27、000000000mon3M(AddrReg)IR2001200120012001e*ecuteOpUUUUZZZZ200120012001Loadi2Progt+1OutReg000100002001000020010001Loadi3OutRegProgtAddrReg00010001000120010001200100000000001Loadi4M(AddrReg)Ri00010010001020010001001000100100001incpcProgt+1OutReg00010002000120010001001000000000002仿真結(jié)果說明:指令 LOAD R3,R1 取

28、數(shù) 執(zhí)行過程中存放器的變化情況:仿真結(jié)果說明:ADD R7 , R3 相加 執(zhí)行過程中存放器的變化情況仿真結(jié)果說明:指令STORE R2,R7 ;存數(shù) 執(zhí)行過程中存放器的變化情況:仿真結(jié)果說明:BRANCHEQI 0000H 如果R1等于R6,則轉(zhuǎn)向地址0000H 執(zhí)行過程中存放器的變化情況:四、總結(jié)經(jīng)過本次試驗(yàn),我明白到了做計(jì)算機(jī)組成原理的實(shí)驗(yàn)首先一定要注意線路的連接,有些要對應(yīng)的要一一對應(yīng),我一開場因?yàn)闆]注意.弄得數(shù)據(jù)不正確,還有要注意操作方法等等。 總之,通過這次對指令系統(tǒng)的設(shè)計(jì),讓我對整個計(jì)算機(jī)根本原理和系統(tǒng)構(gòu)造都有了很深的體會和認(rèn)識,也強(qiáng)迫自己在以前缺乏的地方去學(xué)習(xí)了一些新的知識,最

29、重要的是,真正讓自己認(rèn)識到了自己現(xiàn)在所學(xué)過的知識還太少太少,根本缺乏以完成一個哪怕是最簡單的計(jì)算機(jī)工程,自己以前只滿足于將課本知識學(xué)會的想法也有很大的問題,需要好好反省,在接下來的時(shí)間里,自己一定要好好把握,既要加強(qiáng)根底知識的學(xué)習(xí),也要鍛煉自己的實(shí)驗(yàn)?zāi)芰?,努力讓自己的專業(yè)素質(zhì)有很大的提高。五、參考文獻(xiàn):白中英計(jì)算機(jī)組成原理(第五版):科學(xué),2005代碼addLIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE work.cpu_lib.all;entity add is port(a:in bi

30、t16;clk:in std_logic;q:out bit16);end add;architecture rt1 of add isbeginprocessbeginwait until clkevent and clk=1;q=a+1010;end process;end rt1;addoutLIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE work.cpu_lib.all;entity addout is port(a:in t_reg;b:in bit16;reset:in std_logic;q:out bit16);end addout;a

31、rchitecture rt1 of addout issignal temp:bit16;beginprocess(a,b)beginif reset=1 then temptemp then q=b;temp c c c c c c c c c c c if a=b then pout =1;else pout if a/=b then pout =1 ;else pout if ab then pout =1 ;else pout if a=b then pout =1 ;else pout if ab then pout =1 ;else pout if a=b then pout =

32、1 ;else pout pout=0 ;end case;end process;end rt1;controllibrary IEEE;use IEEE.std_logic_1164.all;use work.cpu_lib.all;entity control isport( step,reset,pout:in std_logic; instrReg:in bit16;progtrWr,progtrRd,addrRegWr,outRegWr,outRegRd:out std_logic;shiftSel:out t_shift; aluSel:out t_alu; pSel:out t

33、_p;opRegRd,opRegWr,instrWr,regRd,regWr,rw,vma:out std_logic;regSel:out t_reg );end control;architecture rtl of control issignal current_state, ne*t_state : state;beginprocess( current_state, instrReg, pout)beginprogtrWr = 0; progtrRd = 0; addrRegWr = 0;outRegWr = 0;outRegRd = 0; shiftSel = shftpass;

34、 aluSel = alupass; pSel = eq;opRegRd = 0; opRegWr = 0; instrWr = 0; regSel = 000;regRd = 0; regWr = 0; rw = 0; vma aluSel=zero; shiftSel=shftpass; outRegWr=1; ne*t_state outRegRd=1; progtrWr=1; ne*t_state progtrRd = 1; addrRegWr = 1; ne*t_state rw=0;vma=1; instrWr=1; ne*t_state case instrReg(15 down

35、to 11) iswhen 00000 = ne*t_state ne*t_state ne*t_state ne*t_state ne*t_state ne*t_state ne*t_state ne*t_state ne*t_statene*t_state regSel = instrReg(5 downto 3); regRd = 1;addrregWr = 1; ne*t_state rw = 0; vma = 1;regSel = instrReg(2 downto 0);regWr = 1; ne*t_state regSel = instrReg(2 downto 0); reg

36、Rd = 1;addrregWr = 1; ne*t_state regSel = instrReg(5 downto 3); regRd = 1; rw = 1; ne*t_state regSel = instrReg(5 downto 3); regRd = 1;aluSel =alupass;shiftsel = shftpass; outRegWr = 1; ne*t_state outRegRd = 1;regSel = instrReg(2 downto 0); regWr = 1; ne*t_state progtrRd = 1; alusel = inc; shiftsel

37、= shftpass;outregWr = 1; ne*t_state outregRd = 1; progtrWr=1; addrregWr=1;ne*t_state rw = 0;vma = 1;regSel = instrReg(2 downto 0);regWr = 1; ne*t_state progtrRd = 1; alusel = inc; shiftsel = shftpass;outregWr = 1; ne*t_state outregRd=1; addrregWr=1;ne*t_state rw = 0;vma = 1;progtrWr = 1; ne*t_state

38、regSel = instrReg(5 downto 3); regRd = 1;opRegWr = 1; ne*t_state opRegRd = 1 ;regSel = instrReg(2 downto 0); regRd = 1; psel = eq;if pout = 1 then ne*t_state = beqI4;else ne*t_state progtrRd = 1; alusel = inc; shiftsel = shftpass;outregWr = 1; ne*t_state outregRd = 1; addrregWr = 1; ne*t_state rw =

39、0;vma = 1; progtrWr = 1; ne*t_state regSel = instrReg(2 downto 0); regRd = 1; alusel = inc;shiftsel = shftpass; outregWr = 1; ne*t_state outregRd = 1; regsel = instrReg(2 downto 0);regWr = 1; ne*t_state progtrRd = 1; alusel = inc; shiftsel = shftpass;outregWr = 1; ne*t_state outregRd=1; progtrWr=1;

40、ne*t_state regSel = instrReg(5 downto 3); regRd= 1; opRegWr = 1; ne*t_state regSel = instrReg(2 downto 0); regRd= 1; alusel = plus;shiftsel = shftpass;outregWr = 1; ne*t_state outregRd = 1;regSel = instrReg(2 downto 0); regWr = 1;ne*t_state progtrRd = 1; alusel = inc; shiftsel = shftpass;outregWr =

41、1; ne*t_state ne*t_state = incPc;end case;end process;process(step, reset)beginif reset = 1 then current_state = reset1 ;elsif stepevent and step= 1then current_state = ne*t_state after 1 ns; end if;end process;end rtl;cpu_libLIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_arith.ALL;pack

42、age cpu_lib is subtype bit16 is std_logic_vector(15 downto 0);subtype t_reg is std_logic_vector(2 downto 0);subtype t_shift is unsigned (3 downto 0);constant shftpass :t_shift:=0000;constant sftl :t_shift:=0001;constant sftr:t_shift:=0010;constant rotl :t_shift:=0011;constant rotr :t_shift:=0100;sub

43、type t_alu is unsigned(3 downto 0);constant alupass :t_alu:=0000;constant andOp :t_alu:=0001;constant orOp:t_alu:=0010;constant notOp :t_alu:=0011;constant *orOp :t_alu:=0100;constant plus :t_alu:=0101;constant alusub :t_alu:=0110;constant inc :t_alu:=0111;constant dec :t_alu:=1000;constant zero:t_a

44、lu:=1001;subtype t_p is unsigned (3 downto 0);constant eq :t_p:=0000;constant neq :t_p:=0001;constant gt:t_p:=0010;constant gte :t_p:=0011;constant lt :t_p:=0100;constant lte :t_p:=0101;type state is (reset1,mon1,mon2,mon3,e*ecute,load2,load3,store2,store3,store4,move2,move3,incPc11,incPc12,incPc,in

45、cPc2,incPc3,loadIr,loadIr2,beqI2,beqI3,beqI4,beqI5,beqI6,braI2,braI3,braI4,loadI2,loadI3,loadI4,inc2,inc3,add1,add2,add3);end cpu_lib;loadreg-AddrReg Progt OpRegLIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE work.cpu_lib.all;entity loadreg is port(a:in bit16;rst,clk,load:in std_logic;q:out bit16);end

46、loadreg;architecture rt1 of loadreg isbeginprocess (rst,clk)beginif rst=1 then q0);elsif rising_edge(clk) thenif load=1 thenq=a ;end if;end if;end process;end rt1;ram- megafunction wizard: %LPM_RAM_DQ%- GENERATION: STANDARD- VERSION: WM1.0- MODULE: altsyncram - =- File Name: ram.vhd- Megafunction Na

47、me(s):- altsyncram- =- *- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!- 5.1 Build 176 10/26/2005 SJ Full Version- *-Copyright (C) 1991-2005 Altera Corporation-Your use of Altera Corporations design tools, logic functions -and other software and tools, and its AMPP partner logic -functions

48、, and any output files any of the foregoing -(including device programming or simulation files), and any -associated documentation or information are e*pressly subject -to the terms and conditions of the Altera Program License -Subscription Agreement, Altera MegaCore Function License -Agreement, or

49、other applicable license agreement, including, -without limitation, that your use is for the sole purpose of -programming logic devices manufactured by Altera and sold by -Altera or its authorized distributors. Please refer to the -applicable agreement for further details.LIBRARY ieee;USE ieee.std_l

50、ogic_1164.all;LIBRARY altera_mf;USE altera_mf.altera_mf_ponents.all;ENTITY ram ISPORT(address: IN STD_LOGIC_VECTOR (15 DOWNTO 0);clock: IN STD_LOGIC ;data: IN STD_LOGIC_VECTOR (15 DOWNTO 0);wren: IN STD_LOGIC ;q: OUT STD_LOGIC_VECTOR (15 DOWNTO 0);END ram;ARCHITECTURE SYN OF ram ISSIGNAL sub_wire0:

51、STD_LOGIC_VECTOR (15 DOWNTO 0);PONENT altsyncramGENERIC (address_aclr_a: STRING;indata_aclr_a: STRING;init_file: STRING;intended_device_family: STRING;lpm_hint: STRING;lpm_type: STRING;numwords_a: NATURAL;operation_mode: STRING;outdata_aclr_a: STRING;outdata_reg_a: STRING;power_up_uninitialized: STR

52、ING;widthad_a: NATURAL;width_a: NATURAL;width_byteena_a: NATURAL;wrcontrol_aclr_a: STRING);PORT (wren_a: IN STD_LOGIC ;clock0: IN STD_LOGIC ;address_a: IN STD_LOGIC_VECTOR (15 DOWNTO 0);q_a: OUT STD_LOGIC_VECTOR (15 DOWNTO 0);data_a: IN STD_LOGIC_VECTOR (15 DOWNTO 0);END PONENT;BEGINq NONE,indata_ac

53、lr_a = NONE,init_file = memdata.mif,intended_device_family = Cyclone,lpm_hint = ENABLE_RUNTIME_MOD=NO,lpm_type = altsyncram,numwords_a = 100,operation_mode = SINGLE_PORT,outdata_aclr_a = NONE,outdata_reg_a = UNREGISTERED,power_up_uninitialized = FALSE,widthad_a = 16,width_a = 16,width_byteena_a = 1,

54、wrcontrol_aclr_a = NONE)PORT MAP (wren_a = wren,clock0 = clock,address_a = address,data_a = data,q_a = sub_wire0);END SYN;- =- * file retrieval info- =- Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC 0- Retrieval info: PRIVATE: AclrAddr NUMERIC 0- Retrieval info: PRIVATE: AclrByte NUMERIC 0- Retrie

55、val info: PRIVATE: AclrData NUMERIC 0- Retrieval info: PRIVATE: AclrOutput NUMERIC 0- Retrieval info: PRIVATE: BYTE_ENABLE NUMERIC 0- Retrieval info: PRIVATE: BYTE_SIZE NUMERIC 8- Retrieval info: PRIVATE: BlankMemory NUMERIC 0- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC 0- Retrieval info:

56、 PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC 0- Retrieval info: PRIVATE: Clken NUMERIC 0- Retrieval info: PRIVATE: DataBusSeparated NUMERIC 1- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC 0- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING PORT_A- Retrieval info: PRIVATE: INIT_TO_SIM_* NUMERIC 0- Re

57、trieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING Cyclone- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC 0- Retrieval info: PRIVATE: JTAG_ID STRING NONE- Retrieval info: PRIVATE: MA*IMUM_DEPTH NUMERIC 0- Retrieval info: PRIVATE: MIFfilename STRING memdata.mif- Retrieval info: PRIVATE: NUMWORDS_A

58、NUMERIC 65536- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC 0- Retrieval info: PRIVATE: RegAddr NUMERIC 1- Retrieval info: PRIVATE: RegData NUMERIC 1- Retrieval info: PRIVATE: RegOutput NUMERIC 0- Retrieval info: PRIVATE: SingleClock NUMERIC 1- Retrieval info: PRIVATE: UseDQRAM NUMERIC 1- Retriev

59、al info: PRIVATE: WRCONTROL_ACLR_A NUMERIC 0- Retrieval info: PRIVATE: WidthAddr NUMERIC 16- Retrieval info: PRIVATE: WidthData NUMERIC 16- Retrieval info: CONSTANT: ADDRESS_ACLR_A STRING NONE- Retrieval info: CONSTANT: INDATA_ACLR_A STRING NONE- Retrieval info: CONSTANT: INIT_FILE STRING memdata.mi

60、f- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING Cyclone- Retrieval info: CONSTANT: LPM_HINT STRING ENABLE_RUNTIME_MOD=NO- Retrieval info: CONSTANT: LPM_TYPE STRING altsyncram- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC 65536- Retrieval info: CONSTANT: OPERATION_MODE STRING SINGLE_PORT-

溫馨提示

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

評論

0/150

提交評論