2014版計算機(jī)系統(tǒng)綜合設(shè)計報告_第1頁
2014版計算機(jī)系統(tǒng)綜合設(shè)計報告_第2頁
2014版計算機(jī)系統(tǒng)綜合設(shè)計報告_第3頁
2014版計算機(jī)系統(tǒng)綜合設(shè)計報告_第4頁
2014版計算機(jī)系統(tǒng)綜合設(shè)計報告_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

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

文檔簡介

姓 的 浩CPU實現(xiàn)、UART、VGA、4*4運216位定時/計數(shù)器、4×4鍵盤控制器、16716位LED輸出、16位撥碼開關(guān)輸入 編址,中斷的仲裁采用菊花鏈固定優(yōu)先級(不允許搶占和嵌套,能夠進(jìn)行精確中斷,進(jìn)入中斷,BIOS的字庫、UART串口發(fā)送、定時器/計數(shù)器、4*4鍵盤等。mcc,mcc另外,為了更好地適應(yīng)文法的擴(kuò)充,mcc屏顯示、支持注釋、式多文檔等功能完整、界面友好IDE。(包括體系結(jié)構(gòu)框圖和對結(jié)構(gòu)圖的簡要解釋,重點解釋有自己創(chuàng)新點的部分匯編器同時生成器RAM的初始化中斷處理程序的.coe文件。816(只完成基礎(chǔ)部分的同學(xué)只說明完成的設(shè)計,無需貼代碼, 中缺的代碼可以貼1、CPU(IF(ID(EXE (IF(ID執(zhí)行階段(EXEALU(MEM(WB1,、2、3同時也起到的作用。如圖所示。圖3:流水線CPURAM5EXE階段。如果我們能判斷就能有效解決問題。以上只是一般寄存器指令的情況。如果是讀器指令Lw,由于正確的的結(jié)果須進(jìn)行延時一周期(IRPC寫使能關(guān)掉。同時,將下一指令廢掉(所有寫使能和跳轉(zhuǎn)信號全部歸0),這樣就不會多執(zhí)行一條指令。處理器的寄存器主要有4個,分別是EPC,Status,Cause,和Base。用途如下: MIPSbeqID2(NOP遞增1。這些指令跳轉(zhuǎn)都是PC<-PC+4+offset,實際上為PC<-PC+1+offset。跳轉(zhuǎn)偏移量的計算方法(offsetCPUALUinputwire[31:0]inA,inB;//輸入兩個操作數(shù)inputwire[2:0]selc;//根據(jù)運算的類型選擇對應(yīng)的運算結(jié)果用來輸出outputreg[31:0]outC;//outputreg[31:0]outH,outL;//和除法相關(guān)的輸出outputwireoverflow;//當(dāng)運算發(fā)生溢出的時候產(chǎn)生的信號wire[31:0]resultA;ads(.operandA(inA), mul_div(.in0(inA),.in1(inB),.outH(resultH),;logical_operationcompare32lui_operationregisterfinputwire[31:0]outputwire[31:0]qa,qb;//ra,rbreg[31:0]register[31:0];//3232iptwiren,l;/wn為寫使能,dclkiptire4:0]ra,bd;/ra,rb為雙端口的讀出的選擇端,rdipwire[31:0]outputwire[31:0]a,qb;//ra,rbreg[31:0]register[1][f:gr] qa=rgitera qb=register[rb];1.3中斷的設(shè)計MMMstate=0erec執(zhí)行期間立即響應(yīng)新的中斷,之前地址保存情況(1。假設(shè)A是中斷固定的地址,是唯一且是固定的,進(jìn)入執(zhí)行后,首先”保護(hù)現(xiàn)場”,然后讀協(xié)處務(wù)程序的地址,即中斷向量表,找到相應(yīng)的中斷服務(wù)程序后,其結(jié)束的指令是eret指令,他跳于是幾號中斷,是有這段BIOS的中斷程序獲取得知的。RAM里的中斷服務(wù)程序的地址(中斷向量表)要有編譯器生成(通過.coe進(jìn)行初始化always@(resetorrst_intorrst_stateorin0orin1orin2orin3reg_int=reg_state=elseif(rst_int==1)begin中斷開始響應(yīng)reg_int<=0;=elseif(rst_state==1)begin中斷結(jié)束響應(yīng)reg_state<=0;base<=32’d1;//記錄中斷源reg_int<=1’b1;//中斷信號INT[0]=1’b0;//中斷記錄位base<=32’d2;//記錄中斷源reg_int<=1’b1;//中斷信號INT[1]=1’b0;//中斷記錄位base<=32’d3;//記錄中斷源reg_int<=1’b1;//中斷信號INT[2]=1’b0;//中斷記錄位base=32’d4;//記錄中斷源reg_int=1’b1;//中斷信號INT[3]=1’b0;//中斷記錄位elseelseif(in0==1’b1&&IE==1’b1&&IM[0]==1’b0)beginINT[0]=base=32’d1;//記錄中斷源reg_int=1’b1;//中斷信號rst_intIO4’b0001;//elseif(in1==1’b1&&IE==1’b1&&IM[1]==1’b0)beginINT[1]=regint=1’b1;//中斷信號=rst_intIO4’b0010;//elseif(in2==1’b1&&IE==1’b1&&IM[2]==1’b0)beginINT[2]=base=32’d3;//記錄中斷源reg_int=1’b1;//中斷信號rst_intIO4’b0100;//elseif(in3==1’b1&&IE==1’b1&&IM[3]==1’b0)beginINT[3]=base=32’d4;//記錄中斷源reg_int=1’b1;//中斷信號rst_intIO4’b1000;//一樣的是,外設(shè)只有16位的數(shù)據(jù)處理能力。1Mem MemIipt[15:0]address;outputregMemOrIO;outputreg[31:0]cs;wre[31:0]out; iaalways@(addressorout)beginif(adre[5]==8'hff)beginMemOrIO<=1'b0;cs<=ouelseMemOrIO<=1'b1;cs<=20;1.4.2應(yīng)位,并在相應(yīng)的COUT腳輸出一個時鐘的中斷(高電平。在相應(yīng)的COUT腳輸出一個時鐘的中斷(高電平。狀態(tài)寄存器在 后 (后兩位方式寄存器(只寫)addr[2:0]:狀態(tài)寄存器(只讀)addr[2:0]:初始值寄存器(只寫)addr[2:0]:當(dāng)前值寄存器(只讀)addr[2:0]: 7LED,從到低位排列。由于Minisys鍵值定義:0~123A456B789C0FED指的就是第1行第一列,為1。UARTalways@(posedgeclk)if(TxD_start)state<=if(BaudTick)state<=01234567//stop4'b0010:if(BaudTick)state<=4'b0000; default:if(BaudTick)state<=4'b0000;//Outputmuxregmuxbit;always@(*)3'd0:muxbit<=TxD_dataD[0];3'd1:muxbit<=TxD_dataD[1];3'd2:muxbit<=TxD_dataD[2];3'd3:muxbit<=TxD_dataD[3];3'd4:muxbit<=TxD_dataD[4];3'd5:muxbit<=TxD_dataD[5];3'd6:muxbit<=TxD_dataD[6];3'd7:muxbit<=//Puttogetherthestart,dataandstopbitsregTxD;always@(posedgeclk)TxD<=(state<4)|(state[3]&VGAreg always@(posedgeclk_25mornegedgerst_n)if(!rst_n)hsync_r<=1'b1;else t10'd0)hsync_r1'b0;//產(chǎn)生hsyncelse t==10'd96)hsync_r<=always@(posedgeclk_25mornegedgeif(!rst_n)vsync_r<=1'b1;elseif( t==10'd0)vsync_r<=1'b0;//產(chǎn)生vsync信號elseif( t==10'd2)vsync_r<=1'b1;assignhsync=hsync_r;assignvsync=mccC++VisualStudio2013CommunityEditionBIOSBIOS能。為此,mccMiniCComplierAssembler(mcca,mccaMIPS并且它負(fù)責(zé)處理用戶程序和系統(tǒng)調(diào)用的。mccparser.ytoken,tokenenumtokens.l<unistd.h>為#include<stdio.h>和#include<io.h>mcc/main.cpptoken,并停止進(jìn)一步的解析。關(guān)于語法樹的描述,見第2小節(jié)。相關(guān)的文件見工程mcc/parser 句。而一個MiniC文件由一系列的 收集起來,增加了一個MccRobot類,并使用單例模式提供了一個全局的唯一

目前設(shè)計的UML圖如圖X。圖8:語義檢查模塊UML圖2CheckerError變量的類型在語法void,但語義inti;//voidi;//定義的參數(shù)名是否確intmain(int);//okintmain(int){..}//語法上允許breakwhile所在行號以及語句的類型(breakcontinue。制,(1)變量名作用域唯一,MiniC存在兩種域,全以及的ID的名字MiniClabel+數(shù)字的組合,需方法generate_code。通過MccRobot對象的generate_code方法,依次遍歷語法樹結(jié)點(調(diào)用代碼生成需要考慮運行時的內(nèi)存分配,活動記錄等一系列操作的問題,為簡化問題,mcc采用都在運行時當(dāng)前方法調(diào)用的活動記錄(棧)中,通過與活動記錄指針($t0)的偏移量來進(jìn)行。程序棧指針被初始化為3999,全局變量集中放在棧底。圖

圖錄的移除而釋放掉,而全局變量是集中放在棧底的,是不會被釋放掉的(OSinti;intk; --器32bits編 -- i即$fp- j即$fp-4j[i]$fp- k即$fp---上圖為局部變量的例子,全局變量類似,唯一的區(qū)別在于,全局變量的$fp4000,而不是//計算出數(shù)組$v0//結(jié)果的地址lw$v0//計算出值addiu$v0$zero$v0(2)數(shù)組變量addiu$v0$zeroaddress//查找出數(shù)組的址存至$v0//目標(biāo)地址(3)端口addiu$v0$zero//賦值//position由編譯器生成代碼時保存起來,為相對$fp1.全局變量1.1.數(shù)組變量addiu$v0$zero addiu$v1$zero1.2.普通變量addiu$v0$zero4000lw$v0(-2.局部變量2.1.數(shù)組變量addiu$v1$zeropositionsubu$v0$fp$v12.2.普通變量lw$v0(-j//break_labelj//continue_label//條件beq$v0$zero//false_branch_labelj //false_branch_label //如果有的話 //條件beq$v0$zero //break_label //While //跳出whileMccIntLi, ori$v0$zero //$v0=lui$v1 //$v1 //$v0=,addi$v0$zero addiu$sp$sp //poplocal_var_sizelw$ra //取出返回地址addiu$sp$spargs_fp_size //pop,args_fp_size由lw$fp jr //保存 //計算并保存參數(shù) //計算并保存參數(shù)jal addiu$v1$zero //size//如果包含定義(即非方法往 addu$fp$zero //設(shè)置 //保存 //局部變量… //局部變量 //語句… //語句(包含在條件語句體里的不算addiu$sp$sp //poplocal_var_sizelw$ra //取出返回地址addiu$sp$spargs_fp_size //pop,args_fp_size由lw$fp0($sp) $fpjr$ra//回調(diào)方法(無參數(shù)sw$v00($sp) //Push($v0)addiu$v0$zero1sw$v10($sp) //Push($v1)addiu$v1$zero1sw$fp0($sp) //Push($fp)andset$fpaddu$fp$zero$spaddiu$v1$zero1subu$sp$sp //局部變量… //局部變量 //語句… //語句addiu$sp$sp lw$fp //恢復(fù)寄存器lw$v12($sp)lw$v03($sp)addiu$sp$sp3 //計算值nor$v0$v0(2)subu$v0$zero(3)//不需要(4)sltu$v0$zero(5)lw$v0 //左操作數(shù)(3) //保存左操作數(shù) //右操作數(shù)sltu$v0$zero(2)addiu$v0$zero0jbranch_endaddiu$v0$zero1(3)addiu$v0$zero0jbranch_endaddiu$v0$zero1(4)slt$v0$v0$v1sltu$v0$zero$v0(5)slt$v0$v1(6)slt$v0$v0(7)slt$v0$v1$v0sltu$v0$zero$v0(8)and$v0$v1$v0sltu$v0$zero$v0(9)(10)sub$v0$v1(11)mflo$v0(12)div$v1mflo(13)div$v1mfhi(14)and$v0$v1(15)xor$v0$v1(16)sllv$v0$v1(17)srlv$v0$v1(18)or$v0$v1mccaMiniCCompilermccaBIOS的目標(biāo)代碼。Mcca在啟動時會一個bios-init文件,該文件由四部分構(gòu)成,以%%符號進(jìn)行分隔。各部分含義如下:如果用戶程序沒有定義main函數(shù),將出現(xiàn)錯誤。通過合理的解析bios-init文件,可以讓mcca正確的系統(tǒng)調(diào)用及用戶程序。在到第二部分時,mccamainmain到第為了讓用戶自己編寫中斷處理程序,我們在mcc中特殊處理了interrupt0、interrupt1label,ram.coe的開頭,以供中斷處理查詢中斷處理向量表時獲取到相應(yīng)的中斷處理程序的rom.coe提供了默認(rèn)的中斷處理方法,比以該地址正確的生成ram.coe。3mcc 掃描器(Scanner)Syntacticysis中)可以依據(jù)語言語法,組詞成句;機(jī)器碼(對應(yīng)于把讀入的字符串同“ORG_CODE”進(jìn)行匹配,如果一樣確,否則就是出錯。出錯后,調(diào)用相應(yīng)的錯誤處理程序(同樣在Syntacticysis中),一旦有錯,程序終止退出。操作,一旦語法分析得出一句完成的結(jié)論,就將*CMD匯編器的關(guān)鍵是語則的定義,語法分析和詞法分析都是嚴(yán)格按照語

找 Next 18: 19: 20: 21: 22: 23: 24:25:26:27:28:29:<N_CODE30: 31:32: 33:34:35:36:37:38:39:則40:41:42: 44: 45: 46: 4、IE我組IDE使用Qt開發(fā)完成。語法 foreach(constHighlightRule&rule,{QRegExpintindex=expression.indexIn(text);while(index>=0){intlength=expression.matchedLength();setFormat(index,length,rule.format);index=expression.indexIn(text,index+}} QRegExpcommentStartExpression=QRegExp("/\\*");QRegExpcommentEndExpression=QRegExp("\\*/"); intcommentStartIndex=if(previousBlockState()!={commentStartIndex=}while(commentStartIndex>={intcommentEndIndex=commentEndExpression.indexIn(text,intcommentLength=if(commentEndIndex==-{commentLength=text.length()-}{commentLength=commentEndIndex-commentStartIndex+}setFormat(commentStartIndex,commentLength, commentStartIndex=commentStartExpression.indexIn(text,commentStartIndex+}{HighlightRuleQTextCharFormatfunctionFormat;rule.pattern=QRegExp("\\b[A-Za-z_]+[A-Za-z0-9_]*(?=\\s*\\()");rule.format=functionFormat;}{if(this-{}{}}{"C/C++file(*.h*.c*.cpp);;Allfile(*.*)");if{}{QTextEdit*edit=newCodeEdit(fileName);connect(edit,SIGNAL(textChanged()),}}CodeEdit*edit=(CodeEdit*)m_tabManager->currentWidget();if(edit!=NULL){if(edit->m_file!={QStringfileName=edit->m_file-}}piler=new { 5、BIOSBIOSDATAORG_DATA0DFCH LEDDATADW DATAENDSCODE $SP,$ZERO,4000 $T0,$ZERO,0 $T1,$ZERO,0014H $T2,55AAH $T2,$T2,55AAH $T3,0AA55H $T3,$T3, $S0,$ZERO, ;RAM $T8, $T2, $T4, $T4,$T2,0014H $T3,0($T0) $T4, $T4,$T3, ;跳到 $T8,0($T0) $T0,$T1,0001H $T0,$T0,1H $T5,FF18H($0) $T0,$T5,1H $T0,$ZERO,000aH;沒按鍵的時候有按鍵信息,出錯CHKLED:ANDI$T0,$ZERO,0 $T1,$ZERO,02b66H $T0,FF00H($ZERO) $T2,$T2,-1 $T2,$ZERO,-3 $T0,$T0, $T0,$T1,-7 ZO,$ZERO,0H ZO,$ZERO,0H RR:SW $S,FF00H($ZERO);在數(shù)碼管上輸出錯誤碼 $T0,$T0,0H $V0, $0,$ZERO, 24 ;lw2425 ;jr CODEENDSBIOSCintsystem(intm,intn,int//m:systemcall//1.numled:show//3.lightled:show//4.switchbutton:read//5.keyboard:readinti;int$0xFF00=n;//1.numled:shownumberi=n;}elseif(m==2){t=$0xFF20=t;//2.VGA:shownumberi=t;}elseif(m==3)$0xFF08=n;//3.lightled:shownumberi=n;}elseif(m==4)i=$0xFF10;//4.switchbutton:read}elsei=$0xFF18;//5.keyboard:read}}本組設(shè)計的MiniSys(地操作intmain(voidvoidintd所有變量需在最開始統(tǒng)一intf;intx;inty;intr;{d=$0xFF10;//外f=d&if(f==x=d&0x3FFF;y=$0xFF18;$0xFF00xy$0xFF08=x+}elseif(f0x4000){x=d&0x3FFF;yr=x-if(r>=0$0xFF00=}$0xFF00=-}}elseifx=d&0x3FFF;y=$0xFF18;r=x*$0xFF00=$0xFF20=r%}x=d&0x3FFF;y=$0xFF18;r=x/$0xFF40=$0xFF00=}}return} intintx;inty;intx=0;y=z=count=$0xFF382;$0xFF3C=$0xFF2860000;$0xFF2A=$0xFF2C=x=if((x>=1)&&(x<count=count+1; }elseif((x>=10000)&&(x<20000)){y=system(4,0,0);z=}}return}%mcc.exe%mcc.exe%mcc.exetest#relative%mcc.exeC:\Users\XXX\Desktop\test#absolutecodeseg和codeends。org_data416hH進(jìn)制數(shù),最后同樣需要加h(H),16進(jìn)制數(shù)之間需用“,”分隔。續(xù)定義org_code,但要保證不能和之前 $v(0~1)|$a(0~3)|$t(0~9)|$s(0~9)|$i(0~1)|$sp|$ra|$zero|$(0~31) 過65535)。二進(jìn)制需以b(B)結(jié)尾,十六進(jìn)制必須以h(H)結(jié)尾,十進(jìn)制無字母結(jié)尾。 b,100,-200,0ffeH 過31。lw$V0,1234h($zero)sw$at,buf($28)sw$a1,buf+4($28)DATAORG_DATA0DFCH DATAENDSCODEORG_CODE0000H P$ZERO,4000;初始化$SP $0,$ZERO,0 $1,$ZERO,0014H $2,55AAH 2,2,55AAH $3,0AA55H $3,$3, $0,$ZERO, ;A $80($T0) ,0($T0) , ,$2,0014H ;跳到ERROR ,0($T0) , ,$3, ;跳到 ,0($T0) ,$1,0001H ,$0,1H $5FF18H($0) $0,$5,1H $0,$ZERO,000aH;沒按鍵的時候有按鍵信息,出錯 $0,$ZERO,0 $1,$ZERO,02b66H $2,$ZERO, $0,FF00H($ZERO) $2,$2,-1 $2,$ZERO,-3 $0,$0,0457H $0,$1,-7 ;跳到DIPS $ZERO,$ZERO,0H;O $ZERO,$ZERO,0H;OERROR:SW $S0,FF00H($ZERO);在數(shù)碼管上輸出錯誤碼 $0,$0,0H $0, $V0,$ZERO,0 0000024 讀;w2425 ;jr CODE3、IE 2 (貼關(guān)鍵的能說明問題的時序圖,可以豎貼圖15:仿真圖1outInst:當(dāng)前ID階段的指令(16進(jìn)制)currentPCDout:當(dāng)前ID階段指令的PC值0條指令:luioutPC的值(ALU輸出)為-2147483648。1(310)。1條指令:mtc0指令,初始化status協(xié)處理器的中斷控制位。第3條指令:sll空指令第14條指令:addi指令,初始化$1寄存器=115條指令:sllv1第17條指令:延遲槽指令,空指令sll14條指令:延遲槽指令,初始化$118條指令:srl第20條指令:延遲槽指令,空指令sll22條指令:J第6條指令:mfc0base協(xié)處理器,得到中斷向量號8條指令:根據(jù)中斷向量表取出的值進(jìn)行跳轉(zhuǎn),jrlw指令有數(shù)據(jù)相關(guān),所以該指令第23條指令:中斷處理程序的第一條指令,LW4*4鍵盤的值第24條指令:乘法指令,計算鍵盤輸入值的平方26條指令:將乘法的結(jié)果寫入數(shù)碼管第28條指令:延遲槽指令,空指令sll(資源使用情況、主頻、功耗數(shù)據(jù)和自我分析,可參考驗收表的項目測試2

圖上板安全時鐘頻率(00(01(10示在數(shù)碼管上,模16后結(jié)果顯示在VGA屏幕上;除法的結(jié)果顯示在數(shù)碼管和低8位發(fā)送串口上。MiniC{intd;intf;intx;inty;intr;{d=f=d&if(f==x=d&0x3FFF;y=$0xFF18;$0xFF00=x+$0xFF08=x+}elseif(f0x4000){x=d0x3FFF;yr=x-ifif(r>=0$0xFF00=}$0xFF00=-}}else(f==0x8000){=d&0x3FFF;=r=x*$0xFF00=$0xFF20=r%}x=d&0x3FFF;y=$0xFF18;r=x/$0xFF40=$0xFF00=}}} 、系統(tǒng)調(diào)用綜合測主要功能是設(shè)置和開啟定時器和后,會驅(qū)

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論