




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、石家莊經(jīng)濟學(xué)院華信學(xué)院計算機組成原理課程設(shè)計報告計算數(shù)據(jù)塊中所有數(shù)據(jù)的累加和并存儲到內(nèi)存單元中題 目 16位模型機的設(shè)計 姓 名 學(xué) 號 4114170801 班 號 一 班 指導(dǎo)老師 成 績 2014年1月目 錄一、引言31.1設(shè)計目的31.2設(shè)計任務(wù)3二、 詳細設(shè)計及實現(xiàn)42.1 擬定指令系統(tǒng)42.2指令格式52.3尋址方式5三、16位CPU的模型73.1 各功能部件的VHDL設(shè)計93.2 16位模型機的設(shè)計與實現(xiàn)22四、總結(jié)27五、參考文獻:27六、 代碼28歡迎下載一、引言1.1設(shè)計目的為掌握并鞏固本學(xué)期所學(xué)習(xí)的計算機組成原理知識,設(shè)計本次試驗。運用整合所學(xué)的相關(guān)知識,一步步設(shè)計構(gòu)造一
2、臺基本的模型計算機,明確計算機的控制原理與控制過程,鞏固和靈活應(yīng)用所學(xué)的理論知識,掌握計算機組成的一般設(shè)計方法,提高學(xué)生設(shè)計能力和實踐操作技能,為從事計算機研制與設(shè)計打下基礎(chǔ)。1.2設(shè)計任務(wù)本機功能:計算數(shù)據(jù)塊中所有數(shù)據(jù)的累加和并存儲到內(nèi)存單元中。匯編代碼如下: START: MOV SI, OFFSET SRC1 ;源操作數(shù)地址送SIMOV DI,OFFSET DXT ;目的操作數(shù)地址送DIMOV BX,OFFSET SRC2 ;結(jié)束地址送BXMOV BL 0 ;設(shè)置BL中初值為0NEXT:MOV AL,SI ;取數(shù) ADD BL , AL ; 數(shù)據(jù)相加MOV DI,AL ;存數(shù)CMP SI
3、,BX ;JE START ;如果SI=BX,則轉(zhuǎn)向STARTINCSI ;修改源地址JMP NEXT ;轉(zhuǎn)向NEXT二、 詳細設(shè)計及實現(xiàn) 2.1 擬定指令系統(tǒng)分析:1) 依據(jù)匯編語言程序得出部件間的數(shù)據(jù)流的方向為l 立即數(shù)寄存器l 寄存器內(nèi)存 內(nèi)存操作數(shù)采用寄存器間址尋址方式l 源與目的寄存器內(nèi)容比較,如果源等于目的轉(zhuǎn)移,轉(zhuǎn)向地址在指令中提供l 寄存器加1指令l 無條件轉(zhuǎn)移指令,轉(zhuǎn)向地址在指令中提供。2) 指令類型 (指令中的立即數(shù)為一個字即16位)l 立即數(shù)寄存器需要在指令中指出寄存器及立即數(shù)如:LOADI R0,10H,此指令為雙字指令l 內(nèi)存操作數(shù)寄存器需要在指令中指出間址寄存器及目的
4、寄存器如:LOAD R3,R1; 指令為單字指令l 寄存器內(nèi)存 需要指令中指出源寄存器及間址寄存器如:STORE R2,R7; 指令為單字指令l 寄存器內(nèi)容比較產(chǎn)生轉(zhuǎn)移的指令需要指令中指出源、目的寄存器以及轉(zhuǎn)向的地址如:BRANCHEQI 0000H; 指令為單字指令l 寄存器加1指令指令中指出寄存器如: INC R1,指令為單字指令l 無條件轉(zhuǎn)移指令指令中提供轉(zhuǎn)向地址如:BRANCHI 0008H; 指令為單字指令2.2指令格式1) 單字指令格式單指令但操作數(shù):INC BRANCHI單指令雙操作數(shù):mov load store LOADI2) 雙字指令格式雙字三操作數(shù): BRANCHEQI
5、BRANCHGTI操作碼指令功能00001LOAD將寄存器間址的存儲單元內(nèi)容裝載到寄存器00010STORE將寄存器的數(shù)據(jù)存入到寄存器間址的存儲單元00011MOV將源寄存器內(nèi)容傳送到目的寄存器00100LOADI將立即數(shù)裝入到寄存器00101BRANCHI無條件轉(zhuǎn)移到由立即數(shù)指定的地址00110BRANCHEQI如果源寄存器內(nèi)容等于目的寄存器的內(nèi)容,則轉(zhuǎn)移到由立即數(shù)指定的地址00111INC寄存器內(nèi)容加1指令01000ADD數(shù)據(jù)相加2.3尋址方式尋址方式含義立即數(shù)尋址指令格式中源操作數(shù)為立即數(shù)寄存器間址尋址方式寄存器中操作數(shù)的地址直接尋址主存中為操作數(shù)依據(jù)以上設(shè)計的指令系統(tǒng),將主存中數(shù)據(jù)累加
6、并存儲到內(nèi)存單元中的程序如下:地址機器碼指令 功能說明0000H0001H2001H0010HLOADI R1,0010H源操作數(shù)地址送R10002H0003H2002H0030HLOADI R2,0030H目的操作數(shù)地址送R20004H0005H2006H0016HLOADI R6,0016H結(jié)束地址送R60006H0007H2007H0000HLOAD R7,0R7內(nèi)放入0初始化最小值0008H080BHLOAD R3,R1取數(shù)0009H 401FHADD R7, R3相加000AH103AHSTORE R2,R7存數(shù)000BH000CH300EH0000HBRANCHEQI 0000H如
7、果R6內(nèi)容等于R1的內(nèi)容,則轉(zhuǎn)向0000H000DH3031HINC R1修改源地址000EH000FH2800H0008HBRANCHI 0008H無條件轉(zhuǎn)移到由立即數(shù)指定的地址存儲器初始化文件memdata.mif的內(nèi)容:三、16位CPU的模型 圖1是采用單總線結(jié)構(gòu)的16位CPU結(jié)構(gòu)圖,包含了基本的功能模塊,由寄存器陣列構(gòu)成的8個16位寄存器Reg0-Reg7;工作寄存器OpReg;算術(shù)邏輯運算部件ALU;移位器Shifter;輸出寄存器OutReg;比較器Comp;指令寄存器InstrReg;程序計數(shù)器ProgCnt;地址寄存器AddrReg。所有功能模塊共用16位的三態(tài)數(shù)據(jù)總線進行信息
8、的傳送。 控制器模塊由狀態(tài)機實現(xiàn),控制器依據(jù)指令、數(shù)據(jù)通路通過控制線向各功能模塊發(fā)出控制命令。由寄存器陣列構(gòu)成的8個16位寄存器Reg0-Reg7的優(yōu)點是節(jié)省資源、使用方便。它們共用一個三態(tài)開關(guān),由控制器選擇與數(shù)據(jù)總線的連接。工作寄存器OpReg 可為ALU、比較器Comp 提供一個操作數(shù),而ALU、比較器的另一操作數(shù)直接來自數(shù)據(jù)總線。將ALU、移位器Shifter、輸出寄存器OutReg 串接起來,由控制器統(tǒng)一控制來共同完成一些復(fù)雜的操作,由輸出寄存器OutReg存儲結(jié)果,輸出寄存器OutReg 向總線的輸出端含有三態(tài)開關(guān)。比較器Comp 由控制器直接控制,比較的結(jié)果進入控制器。地址寄存器A
9、ddrReg 提供要訪問的主存單元的地址,本設(shè)計中將程序和數(shù)據(jù)放在同一存儲器中。程序計數(shù)器ProgCnt,不具備清零和+1的功能, 存放CPU要執(zhí)行的下一條指令的地址。指令寄存器InstrReg 存放CPU正在執(zhí)行的指令。工作寄存器OpReg,輸出寄存器OutReg,指令寄存器InstrReg,程序計數(shù)器ProgCnt,地址寄存器AddrReg,均為最基本的寄存器。為了驗證CPU的功能,增加存儲器,存儲器中存入完成數(shù)據(jù)塊傳送所需的程序和數(shù)據(jù)。系統(tǒng)中所有向數(shù)據(jù)總線輸出數(shù)據(jù)的模塊,其輸出口必須使用三態(tài)控制器。模型機的實際電路如圖2所示:圖2 頂層實體模擬圖3.1 各功能部件的VHDL設(shè)計 程序包:
10、說明數(shù)據(jù)類型、運算器的功能、移位寄存器的操作、比較器的比較類型和用于CPU控制的狀態(tài)類型。運算器的設(shè)計 功能:Sel輸入操作說明0000C= A通過PASS0001C= A AND B與0010C= A OR B或0011C= NOT A非0100C= A XOR 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的操作。運算器功能仿真波形圖如圖3所
11、示:圖3 運算器功能仿真波形圖仿真結(jié)果說明:當(dāng)sel為0000時,進行直傳的操作。通過pass,則c=a,為1000。當(dāng)sel為0001時,進行與的操作。a=1000,b=1234,與之后c為1000。當(dāng)sel為0010時,進行或的操作。a=1000,b=1234,c為1234。當(dāng)sel為0011時,進行非的操作。a=1000,a為EFFF。當(dāng)sel為0100時,進行異或的操作。a xor b,c為0234。當(dāng)sel為0101時,進行加法的操作。a=1000,c為2234。當(dāng)sel為0110時,進行減法的操作。a=1000,c為FDCC。當(dāng)sel為0111時,進行加1的操作。a=1000,c為
12、1001。當(dāng)sel為1000時,進行減1的操作。a=1000,c為0FFF。當(dāng)sel為1001時,進行清0操作,全部置0.當(dāng)sel為1010時,為類型其他,全部輸出0.比較器的設(shè)計功能:t_comp比較類型操作說明000Eq(等于)若a=b,compout=1001Neq(不等于)若a<>b,compout=1010Gt(大于)若a>b,compout=1011gte(大于等于)若a>=b,compout=1100It(小于)若a<b,compout=1101Ite(小于等于)若a<=b,compout=1其他compout=0比較器功能仿真波形圖如圖4所示
13、: 圖 4 比較器功能仿真波形圖仿真結(jié)果說明:sel為000時,進行比較是否相等的操作,1000不等于1234,compout=0sel為001時,進行比較是否不等于的操作,1000不等于1234,compout=1sel為010時,進行比較是否大于的操作,1000<1234,compout=0sel為011時,進行比較是否大于等于的操作,1000<1234,compout=0sel為100時,進行比較是否小于的操作,1000<1234,compout=1sel為101時,進行比較是否小于等于的操作,1000<1234,compout=1sel為其他時,compout輸
14、出0.移位器的設(shè)計功能:t_shift移位類型000直通001無符號數(shù)左移010無符號數(shù)右移011循環(huán)左移100循環(huán)右移其他輸出0移位器的功能仿真波形圖如圖5所示:圖5 移位器的功能仿真波形圖仿真結(jié)果說明: 當(dāng)sel為000時,進行直傳的操作,a和y相同 當(dāng)sel為001時,進行無符號數(shù)左移的操作,1234變?yōu)?468 當(dāng)sel為010時,進行無符號數(shù)右移的操作,1234變?yōu)?91A 當(dāng)sel為011時,進行循環(huán)左移的操作,1234變?yōu)?468 當(dāng)sel為100時,進行循環(huán)右移的操作,1234變?yōu)?91A 當(dāng)sel為其他時,輸出0基本寄存器ACLKQn+10011X0Qn功能:功能說明:在CP
15、U中基本寄存器的角色是工作寄存器OpReg,輸出寄存器OutReg,指令寄存器InstrReg,程序計數(shù)器ProgCnt,地址寄存器AddrReg。基本寄存器功能仿真波形圖如圖6所示:圖6 基本寄存器功能仿真波形圖仿真結(jié)果說明:0ns到5ns,還沒有遇到clk的上升沿,所以q端的輸出是00005ns到20ns時,clk的上升沿到來,q端輸出100020ns到25ns時,a發(fā)生變化,但clk上升沿沒有到來,q端輸出100025ns到30ns時,clk的上升沿到來,q端輸出1234寄存器組功能:Sel2.0Reg000R0001R1111R7功能說明:clk的上升沿,將data15.0寫入sel2
16、.0指定的寄存器中,并在q15.0輸出此寄存器新寫入的內(nèi)容。否則,q15.0輸出sel2.0指定的寄存器原來的內(nèi)容。如此設(shè)計的目的,便于觀察寫入指定寄存器中的內(nèi)容。寄存器組功能仿真波形圖如圖7所示:圖7 寄存器組功能仿真波形圖0 - 10ns,sel=000選中R0,當(dāng)clk上升沿時,將data的數(shù)據(jù)0001寫入R0,q=000110-20ns,sel=001選中R1,當(dāng)clk上升沿時,將data的數(shù)據(jù)0002寫入R1,q=000220-30ns,sel=010選中R2,當(dāng)clk上升沿時,將data的數(shù)據(jù)0003寫入R2,q=000330-40ns,sel=011選中R3,當(dāng)clk上升沿時,將
17、data的數(shù)據(jù)0004寫入R3,q=000440-50ns,sel=100選中R4,當(dāng)clk上升沿時,將data的數(shù)據(jù)0005寫入R4,q=000550-60ns,sel=101選中R5,當(dāng)clk上升沿時,將data的數(shù)據(jù)0006寫入R5,q=000660-70ns,sel=110選中R6,當(dāng)clk上升沿時,將data的數(shù)據(jù)0007寫入R6,q=000770-80ns,sel=111選中R7,當(dāng)clk上升沿時,將data的數(shù)據(jù)0008寫入R7,q=0008時序電路功能說明:產(chǎn)生電位信號step和脈沖信號t4,每個step的上升沿狀態(tài)機的狀態(tài)發(fā)生改變,t4與寄存器的寫信號相與作為寄存器的同步打入
18、控制信號。時序電路的功能仿真波形圖如圖8所示:圖8 時序電路的功能仿真波形圖仿真結(jié)果說明:0-10ns,clr高電平,t4=0,step初始值為0;10-15ns,clr低電平,clk為低電平,t4,step保持不變;15-20ns,clr低電平,clk上升沿,x=000+1=001,t4 = x(1) and x(0)=0 and 0=0,step=x(1)=0;20-25ns,clr低電平,clk為低電平,t4,step保持不變;25-30ns,clr低電平,clk上升沿,x=001+1=010,t4 = x(1) and x(0)=0 and 0=0,step=x(1)=0;30-35n
19、s,clr低電平,clk為低電平,t4,step保持不變;35-40ns,clr低電平,clk上升沿,x=010+1=011,t4 = x(1) and x(0)=1 and 0=0,step=x(1)=1;40-45ns,clr低電平,clk為低電平,t4,step保持不變;45-50ns,clr低電平,clk上升沿,x=011+1=100,t4 = x(1) and x(0)=1 and 1=1,step=x(1)=1;50-55ns,clr低電平,clk為低電平,t4,step保持不變;存儲器的設(shè)計LPM_RAM定制首先,定制初始化數(shù)據(jù)文件,建立Memory Initialization
20、 File(.mif)文件,選擇FileNew命令,并在New窗口選擇Other file選項,再選擇Memory Initialization File選項。出現(xiàn)對話框,選擇存儲字的個數(shù)及字長,按下OK,出現(xiàn)如下界面,在最左列或最上行擊鼠標(biāo)右鍵,選擇地址和內(nèi)存操作數(shù)所使用的基值,選擇Hexadecimal,存儲器里存放數(shù)據(jù)塊傳送的指令和數(shù)據(jù),CPU通過執(zhí)行此程序進行功能驗證。完成后,保存文件(memdata.mif)。之后,定制LPM_RAM。設(shè)計步驟如下:選擇ToolsMegaWizard Plug-In Manager命令,打開MegaWizard Plug-In Manager 對話框
21、,選中Create a new custom megafunction variation,單擊Next,出現(xiàn)下面對話框,選擇LPM_RAM_DQ,選擇所用器件的類型以及所創(chuàng)建的輸出文件的類型及名字。選擇NEXT,進入如下界面。選擇數(shù)據(jù)線位數(shù)、主存容量大?。ǖ刂肪€位數(shù))。C:cpu_zjram選擇NEXT,進入下一步界面,取消q輸出端的鎖存。選擇NEXT,進入下一步,選擇內(nèi)存的初始化文件。依據(jù)選項自動生成的代碼,注意將.mif文件的路徑改為相對路徑,存儲單元的個數(shù)為100個。ram的功能仿真波形圖如圖9所示:圖9 ram仿真波形圖功能仿真說明:0-10ns,wren是讀信號,address地址
22、寄存器選擇的是地址0000單元,當(dāng)遇到clk時,將ram里面的內(nèi)容讀出來是200110-20ns,wren是讀信號,address地址寄存器選擇的是地址0001單元,當(dāng)遇到clk時,將ram里面的內(nèi)容讀出來是003040-50ns,wren是寫信號,address地址寄存器選擇的是地址0031單元,當(dāng)遇到clk時,將ram里面的內(nèi)容寫進去是5550控制器功能說明:采用狀態(tài)機實現(xiàn),其中control的輸入有step,reset,compout,instrReg,這些輸入的組合可用于識別指令,并輸出相關(guān)控制信號。具體信號的相關(guān)功能見control.vhdl部件說明。在譯碼階段,具體來說,在一定的節(jié)
23、拍下,contorl首先將接收的指令的前5位和后6位分開,用于分離操作數(shù)和操作碼,然后將操作數(shù)的前3位和后3位分開,用于區(qū)分源操作數(shù)和目的操作數(shù),然后根據(jù)具體的指令輸出相關(guān)控制信號。依據(jù)指令的格式、數(shù)據(jù)通路給出指令系統(tǒng)中所有指令的指令流程:3.2 16位模型機的設(shè)計與實現(xiàn)創(chuàng)建頂層實體圖工程所在的文件夾中包含文件如下所示。依次在功能部件所對應(yīng)的VHD文件上擊右鍵,選擇Create Symbol Files for Current File,創(chuàng)建所有功能部件的圖符。功能說明:整個CPU系統(tǒng)以控制器為中心,負責(zé)指令的譯碼及發(fā)出各種相關(guān)控制信號。節(jié)拍發(fā)生器控制著整個系統(tǒng)的時鐘信號,系統(tǒng)的相關(guān)部件在統(tǒng)一
24、的節(jié)拍控制下發(fā)揮自己的作用。IR為指令寄存器,負責(zé)存儲即將執(zhí)行的下一條指令,addr為地址寄存器,存放被訪問存儲單元的地址。PC為程序計數(shù)器,存放現(xiàn)行指令的地址,具有計數(shù)功能。ALU負責(zé)處理相關(guān)數(shù)據(jù)運算操作。寄存器組負責(zé)存放相關(guān)操作數(shù)和中間臨時變量。多路數(shù)據(jù)選擇器在相關(guān)控制信號的作用下將相關(guān)數(shù)據(jù)輸入ALU處理??偩€分數(shù)據(jù)總線和地址總線,負責(zé)ram和相關(guān)寄存器之間的數(shù)據(jù)交換。RAM為存儲器,存放相關(guān)數(shù)據(jù)和程序。連接所有的功能部件形成模型機。仿真結(jié)果說明指令 LOADI R1,0020H; 執(zhí)行過程中寄存器的變化情況:state微操作addraludata2instrpcramregselregn
25、outgetReset1ALU清0,輸出經(jīng)移位器傳至OutReg00000000ZZZZ00000000000000000000000Common1OutRegProgCnt00000000000000000000200100000000000Common2ProgCntAddrReg0000000000000000200100000000000Common3M(AddrReg)IR2001200120012001executeOp?UUUUZZZZ200120012001Loadi2ProgCnt+1OutReg000100002001000020010001Loadi3OutReg Pro
26、gCnt AddrReg00010001000120010001200100000000001Loadi4M(AddrReg)Ri00010010001020010001001000100100001incpcProgCnt+1OutReg00010002000120010001001000000000002仿真結(jié)果說明:指令 LOAD R3,R1 取數(shù) 執(zhí)行過程中寄存器的變化情況:仿真結(jié)果說明:ADD R7 , R3 相加 執(zhí)行過程中寄存器的變化情況仿真結(jié)果說明:指令STORE R2,R7 ;存數(shù) 執(zhí)行過程中寄存器的變化情況:仿真結(jié)果說明:BRANCHEQI 0000H 如果R1等于R6,則
27、轉(zhuǎn)向地址0000H 執(zhí)行過程中寄存器的變化情況:四、總結(jié) 經(jīng)過本次試驗,我明白到了做計算機組成原理的實驗首先一定要注意線路的連接,有些要對應(yīng)的要一一對應(yīng),我一開始因為沒注意.弄得數(shù)據(jù)不正確,還有要注意操作方法等等。 總之,通過這次對指令系統(tǒng)的設(shè)計,讓我對整個計算機基本原理和系統(tǒng)結(jié)構(gòu)都有了很深的體會和認識,也強迫自己在以前不足的地方去學(xué)習(xí)了一些新的知識,最重要的是,真正讓自己認識到了自己現(xiàn)在所學(xué)過的知識還太少太少,根本不足以完成一個哪怕是最簡單的計算機項目,自己以前只滿足于將課本知識學(xué)會的想法也有很大的問題,需要好好反省,在接下來的時間里,自己一定要好好把握,既要加強基礎(chǔ)知識的學(xué)習(xí),也要鍛煉自己
28、的實驗?zāi)芰?,努力讓自己的專業(yè)素質(zhì)有很大的提高。五、參考文獻:白中英計算機組成原理(第五版)北京:科學(xué)出版社,20056、 代碼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 bit16;clk:in std_logic;q:out bit16);end add;architecture rt1 of add isbeginprocessbeginwait until clk'event and
29、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;architecture rt1 of addout issignal temp:bit16;beginprocess(a,b)beginif reset='1
30、39; then temp<="0000000000000000"end if;if a="111" and b>temp then q<=b;temp<=b;end if;end process;end rt1;aluLIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_unsigned.ALL;USE work.cpu_lib.all;entity alu is port(a,b:in bit16;sel:in t_alu;c:out bit16);end al
31、u;architecture rt1 of alu is beginprocess(a,b,sel)begincase sel iswhen alupass=> c<=a ;when andOp=> c<=a and b ;when orOp=> c<=a or b ;when xorOp=> c<=a xor b ;when notOp=> c<= not a ;when plus=> c<=a + b ;when alusub=> c<=a - b ;when inc => c<=a +&quo
32、t;0000000000000001" ;when dec => c<=a -"0000000000000001" ;when zero => c<="0000000000000000" ;when others => c<="0000000000000000" ;end case;end process;end rt1;compLIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_arith.ALL;USE IEEE.st
33、d_logic_unsigned.ALL;use work.cpu_lib.all;entity comp is port (a,b:in bit16;sel:in t_comp;compout:out bit);end comp;architecture rt1 of comp is beginprocess(a,b,sel)begincase sel is when eq => if a=b then compout <='1'else compout<='0' ;end if;when neq => if a/=b then com
34、pout <='1' ;else compout<='0' ;end if;when gt => if a>b then compout <='1' ;else compout<='0' ;end if;when gte => if a>=b then compout <='1' ;else compout<='0' ;end if;when lt => if a<b then compout <='1'
35、;else compout<='0' ;end if;when lte => if a<=b then compout <='1' ;else compout<='0' ;end if;when others=> compout<='0' ;end case;end process;end rt1;controllibrary IEEE;use IEEE.std_logic_1164.all;use work.cpu_lib.all;entity control isport( step,
36、reset,compout:in std_logic; instrReg:in bit16;progCntrWr,progCntrRd,addrRegWr,outRegWr,outRegRd:out std_logic;shiftSel:out t_shift; aluSel:out t_alu; compSel:out t_comp;opRegRd,opRegWr,instrWr,regRd,regWr,rw,vma:out std_logic;regSel:out t_reg );end control;architecture rtl of control issignal curren
37、t_state, next_state : state;beginprocess( current_state, instrReg, compout)beginprogCntrWr <= '0' progCntrRd <= '0' addrRegWr <= '0'outRegWr <= '0'outRegRd <= '0' shiftSel <= shftpass; aluSel <= alupass; compSel <= eq;opRegRd <= '
38、;0' opRegWr <= '0' instrWr <= '0' regSel <= "000"regRd <= '0' regWr <= '0' rw <= '0' vma <= '0'case current_state iswhen reset1 => aluSel<=zero; shiftSel<=shftpass; outRegWr<='1' next_state<=com
39、mon1;when common1 => outRegRd<='1' progCntrWr<='1' next_state<=common2;when common2=> progcntrRd <= '1' addrRegWr <= '1' next_state <=common3;when common3 => rw<='0'vma<='1' instrWr<='1' next_state<=execut
40、e;when execute => case instrReg(15 downto 11) iswhen "00000" => next_state <= incPc ;- nopwhen "00001" => next_state<=load2; -load ri,rjwhen "00010" => next_state<=store2;- store ri,rjwhen "00011" => next_state<=move2;-mov ri,rjwhen
41、"00100" => next_state<=loadI2;-loadi ri,nwhen "00101" => next_state<=braI2;- branchi nwhen "00110" => next_state<=beqI2;-BranchEQi n; rs = rd then branchi n else inpc11when "00111" => next_state<=inc2; -inc rdwhen "01000" =>
42、; next_state<=add1;-addwhen others =>next_state <= incPc;end case;when load2 => regSel <= instrReg(5 downto 3); regRd <= '1'addrregWr <= '1' next_state <= load3;when load3 => rw <= '0' vma <= '1'regSel <= instrReg(2 downto 0);regWr
43、<= '1' next_state <= incPc;when store2 => regSel <= instrReg(2 downto 0); regRd <= '1'addrregWr <= '1' next_state <= store3;when store3=> regSel <= instrReg(5 downto 3); regRd <= '1' rw <= '1' next_state <= incPc;when move2
44、=> regSel <= instrReg(5 downto 3); regRd <= '1'aluSel <=alupass;shiftsel <= shftpass; outRegWr <= '1' next_state <= move3;when move3 =>outRegRd <= '1'regSel <= instrReg(2 downto 0); regWr <= '1' next_state <= incPc;when loadI2 =>
45、 progcntrRd <= '1' alusel <= inc; shiftsel <= shftpass;outregWr <= '1' next_state <= loadI3;when loadI3 => outregRd <= '1' progcntrWr<='1' addrregWr<='1'next_state<=loadI4;when loadI4 => rw <= '0'vma <= '1'
46、;regSel <= instrReg(2 downto 0);regWr <= '1' next_state <= incPc;when braI2 => progcntrRd <= '1' alusel <= inc; shiftsel <= shftpass;outregWr <= '1' next_state <= braI3;when braI3 => outregRd<='1' addrregWr<='1'next_state<
47、;=braI4;when braI4 => rw <= '0'vma <= '1'progcntrWr <= '1' next_state <= common2;when beqI2 => regSel <= instrReg(5 downto 3); regRd <= '1'opRegWr <= '1' next_state <= beqI3;when beqI3 => opRegRd <= '1' ;regSel <=
48、 instrReg(2 downto 0); regRd <= '1' compsel <= eq;if compout = '1' then next_state <= beqI4;else next_state <= incPc11; end if;when beqI4 => progcntrRd <= '1' alusel <= inc; shiftsel <= shftpass;outregWr <= '1' next_state <= beqI5;when be
49、qI5 =>outregRd <= '1' addrregWr <= '1' next_state <= beqI6;when beqI6 => rw <= '0'vma <= '1' progcntrWr <= '1' next_state <= common2;when inc2 => regSel <= instrReg(2 downto 0); regRd <= '1' alusel <= inc;shiftsel
50、 <= shftpass; outregWr <= '1' next_state <= inc3;when inc3 => outregRd <= '1' regsel <= instrReg(2 downto 0);regWr <= '1' next_state <= incPc;when incPc11 => progcntrRd <= '1' alusel <= inc; shiftsel <= shftpass;outregWr <= '
51、1' next_state <= incPc12;when incPc12 => outregRd<='1' progcntrWr<='1' next_state<=incPc;when add1=> regSel <= instrReg(5 downto 3); regRd<= '1' opRegWr <= '1' next_state <=add2;when add2=> regSel <= instrReg(2 downto 0); regRd&
52、lt;= '1' alusel <= plus;shiftsel <= shftpass;outregWr <= '1' next_state <= add3;when add3=>outregRd <= '1'regSel <= instrReg(2 downto 0); regWr <= '1'next_state <= incPc;when incPc => progcntrRd <= '1' alusel <= inc; shiftse
53、l <= shftpass;outregWr <= '1' next_state <= common1;when others => next_state <= incPc;end case;end process;process(step, reset)beginif reset = '1' then current_state <= reset1 ;elsif step'event and step= '1'then current_state <= next_state after 1 ns
54、; end if;end process;end rtl;cpu_libLIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_arith.ALL;package 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&qu
55、ot;constant sftl :t_shift:="0001"constant sftr:t_shift:="0010"constant rotl :t_shift:="0011"constant rotr :t_shift:="0100"subtype t_alu is unsigned(3 downto 0);constant alupass :t_alu:="0000"constant andOp :t_alu:="0001"constant orOp:t_alu:="0010"con
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 母親節(jié)策劃活動方案
- 梨園踏青活動方案
- 欒城宴會活動方案
- 水果節(jié)日活動方案
- 植樹節(jié)杭州活動方案
- 水利系統(tǒng)三八節(jié)活動方案
- 汽貿(mào)活動策劃活動方案
- 民族團結(jié)戶外活動方案
- 樓盤泳池活動方案
- 汝州市植樹活動方案
- DB11T 593-2016高速公路清掃保潔質(zhì)量與作業(yè)要求
- 嘟嘟少兒英語beep演示簡化版
- GB/T 699-2015優(yōu)質(zhì)碳素結(jié)構(gòu)鋼
- GB/T 19096-2003技術(shù)制圖圖樣畫法未定義形狀邊的術(shù)語和注法
- GB/T 13808-1992銅及銅合金擠制棒
- 項目安全體系圖
- 中央財政科技計劃的項目結(jié)題審計指引講解文課件
- 職業(yè)暴露(銳器傷)應(yīng)急預(yù)案演練腳本
- 首屆全國報刊編校技能大賽決賽試卷(一)及答案
- 材料出入庫表格范本
- DB14∕T 2442-2022 政務(wù)數(shù)據(jù)分類分級要求
評論
0/150
提交評論