版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告CPU設(shè)計(jì)與實(shí)現(xiàn)院(系): 專業(yè)班級(jí): 計(jì)算機(jī)科學(xué)與技術(shù)組 員: 指導(dǎo)教師: 實(shí)驗(yàn)?zāi)康?設(shè)計(jì)實(shí)現(xiàn)CPU部件。實(shí)驗(yàn)儀器:PC機(jī)(安裝Altebra 公司的開(kāi)發(fā)軟件 QuartusII,Modelsim)兩臺(tái)TEC-CA計(jì)算機(jī)組成原理試驗(yàn)箱實(shí)驗(yàn)過(guò)程:一、理論設(shè)計(jì)1.1、設(shè)計(jì)指令集設(shè)計(jì)CPU第一步,就是根據(jù)需求,確定功能,并且設(shè)計(jì)出指令集。指令集包括每一條指令的編碼方式,操作碼以及每一條指令實(shí)現(xiàn)的功能??紤]到第一次設(shè)計(jì)CPU,在指令集設(shè)計(jì)過(guò)程中難免會(huì)出現(xiàn)考慮不周全或者指令集設(shè)計(jì)不科學(xué)的問(wèn)題,我們借鑒了經(jīng)典的31條MIPS指令集。在對(duì)指令集每一條指
2、令進(jìn)行解讀、分析后,我們確定:31條MIPS指令可以滿足我們的CPU的基本功能。下面將31條MIPS指令的編碼格式、對(duì)應(yīng)的操作類型以表格的形式列舉出來(lái):MIPS 指令集(共31條)助記符指令格式示例示例含義操作及其解釋Bit #31.2625.2120.1615.1110.65.0 R-typeoprsrtrdshamtfunc addrsrtrd00000 add $1,$2,$3 $1=$2+$3 rd <- rs + rt ;其中rs$2,rt=$3,
3、 rd=$1addursrtrd00000 addu $1,$2,$3 $1=$2+$3 rd <- rs + rt ;其中rs$2,rt=$3, rd=$1,無(wú)符號(hào)數(shù)subrsrtrd00000 sub $1,$2,$3 $1=$2-$3 rd <- rs - rt ;其中rs$2,rt=$3, rd=$1subursrtrd00000 subu $1,$2,$3 $1=$2-$3 rd <- rs - rt
4、; ;其中rs$2,rt=$3, rd=$1,無(wú)符號(hào)數(shù)andrsrtrd00000 and $1,$2,$3 $1=$2 & $3 rd <- rs & rt ;其中rs$2,rt=$3, rd=$1orrsrtrd00000 or $1,$2,$3 $1=$2 | $3 rd <- rs | rt ;其中rs$2,rt=$3, rd=$1xorrsrtrd00000
5、xor $1,$2,$3 $1=$2 $3 rd <- rs xor rt ;其中rs$2,rt=$3, rd=$1(異或)norrsrtrd00000 nor $1,$2,$3 $1=($2 | $3) rd <- not(rs | rt) ;其中rs$2,rt=$3, rd=$1(或非)sltrsrtrd00000 slt $1,$2,$3 if($2<$3)
6、$1=1 else $1=0 if (rs < rt) rd=1 else rd=0 ;其中rs$2,rt=$3, rd=$1sltursrtrd00000 sltu $1,$2,$3 if($2<$3) $1=1 else $1=0 if (rs < rt) rd=1 else rd=0 ;其中rs$2,rt=$3, rd=$1 (無(wú)符號(hào)數(shù))sll000
7、00rtrdshamt sll $1,$2,10 $1=$2<<10 rd <- rt << shamt ;shamt存放移位的位數(shù), 也就是指令中的立即數(shù),其中rt=$2, rd=$1srl00000rtrdshamt srl $1,$2,10 $1=$2>>10 rd <- rt >> shamt ;(logical) ,其中rt=$2, rd=$1sra00000rtrdshamt sra $1,$2,10 $1=$
8、2>>10 rd <- rt >> shamt ;(arithmetic) 注意符號(hào)位保留 其中rt=$2, rd=$1sllvrsrtrd00000 sllv $1,$2,$3 $1=$2<<$3 rd <- rt << rs ;其中rs$3,rt=$2, rd=$1srlvrsrtrd00000 srlv $1,$2,$3 $1=$2>>$3 rd <- rt >&
9、gt; rs ;(logical)其中rs$3,rt=$2, rd=$1sravrsrtrd00000 srav $1,$2,$3 $1=$2>>$3 rd <- rt >> rs ;(arithmetic) 注意符號(hào)位保留 其中rs$3,rt=$2, rd=$1jrrs000000000000000 jr $31 goto $31 PC <- rsI-typeoprsrtimmediate
10、60; addirsrtimmediate addi $1,$2,100 $1=$2+100 rt <- rs + (sign-extend)immediate ;其中rt=$1,rs=$2addiursrtimmediateaddiu $1,$2,100 $1=$2+100 rt <- rs + (zero-extend)immediate ;其中rt=$1,rs=$2andirsrtimmediate andi $1,$2,10 $1=$
11、2 & 10 rt <- rs & (zero-extend)immediate ;其中rt=$1,rs=$2orirsrtimmediate andi $1,$2,10 $1=$2 | 10 rt <- rs | (zero-extend)immediate ;其中rt=$1,rs=$2xorirsrtimmediate andi $1,$2,10 $1=$2 10 rt <- rs xor (zero-extend)immediate ;
12、其中rt=$1,rs=$2lui00000rtimmediate lui $1,100 $1=100*65536 rt <- immediate*65536 ;將16位立即數(shù)放到目標(biāo)寄存器高16 位,目標(biāo)寄存器的 低16位填0lwrsrtimmediate lw $1,10($2) $1=memory$2 +10 rt <- memoryrs + (sign-extend)imm
13、ediate ;rt=$1,rs=$2swrsrtimmediate sw $1,10($2) memory$2+10 =$1 memoryrs + (sign-extend)immediate <- rt ;rt=$1,rs=$2beqrsrtimmediate beq $1,$2,10 if($1=$2) goto PC+4+40 if (rs = rt) PC <- PC+4 + (sign-extend)immediate<&l
14、t;2 bnersrtimmediate bne $1,$2,10 if($1!=$2) goto PC+4+40 if (rs != rt) PC <- PC+4 + (sign-extend)immediate<<2 sltirsrtimmediate slti $1,$2,10 if($2<10) $1=1 else $1=0 if (rs <(sign-extend)im
15、mediate) rt=1 else rt=0 ; 其中rs$2,rt=$1sltiursrtimmediate sltiu $1,$2,10 if($2<10) $1=1 else $1=0 if (rs <(zero-extend)immediate) rt=1 else rt=0 ; 其中rs$2,rt=$1J-typeopaddress jaddress
16、60;j 10000 goto 10000 PC <- (PC+4)31.28,address,0,0 ;address=10000/4jaladdress jal 10000 $31<-PC+4; goto 10000 $31<-PC+4;PC <- (PC+4)31.28,address,0,0 ;address=10000/4經(jīng)典的MIPS指令有三種格式:R-TYPE、I-TYPE、J-TYPE。其
17、編碼格式各不相同,分別代表寄存器操作指令、立即數(shù)操作指令、跳轉(zhuǎn)指令。寄存器操作主要是將寄存器中的樹(shù)取出進(jìn)行運(yùn)算并存回寄存器;立即數(shù)操作為一個(gè)寄存器數(shù)與指令中的擴(kuò)展后的立即數(shù)進(jìn)行運(yùn)算得到結(jié)果再存回寄存器;跳轉(zhuǎn)我們后面的設(shè)計(jì)都是對(duì)這31條指令進(jìn)行具體實(shí)現(xiàn),所有的內(nèi)容緊密圍繞這31條指令。1.2、畫(huà)數(shù)據(jù)通路圖在設(shè)計(jì)完指令后,要做的就是根據(jù)指令描述的功能確定CPU有哪些部件,并且確定各部件之間的連線方式。首先,一個(gè)CPU最重要的部件一定是控制器??刂破骶拖袢说拇竽X,控制其他各個(gè)部件的工作。其次,由于是基于MIPS指令集的CPU,大多數(shù)操作基于寄存器,因此必須設(shè)計(jì)一個(gè)寄存器堆。此外,ALU運(yùn)算部件對(duì)于C
18、PU來(lái)說(shuō)也是必不可少的。由于有六條指令涉及比較操作,并且給有效位置位。考慮到本CPU設(shè)計(jì)初衷是四級(jí)流水控制,若一條指令多個(gè)節(jié)拍使用ALU部件會(huì)造成部件沖突,后期控制會(huì)比較復(fù)雜。因此,在本CPU中額外設(shè)計(jì)了一個(gè)比較部件。此外,還有其他部件,如PC部件、立即數(shù)擴(kuò)展部件、數(shù)據(jù)寄存器、地址寄存器等。再根據(jù)31條指令,畫(huà)出數(shù)據(jù)通路圖。這只是一個(gè)初步的數(shù)據(jù)通路圖,卻奠定了CPU的基本構(gòu)架。可能在后續(xù)的詳細(xì)設(shè)計(jì)過(guò)程中,會(huì)對(duì)這個(gè)數(shù)據(jù)通路有所改動(dòng),但一定是以現(xiàn)有的圖為基礎(chǔ)??梢哉f(shuō),這就是我們將要設(shè)計(jì)的CPU的一個(gè)初步藍(lán)圖。二、詳細(xì)設(shè)計(jì)2.1、控制信號(hào)的提取與分析這一部分可以說(shuō)是整個(gè)CPU設(shè)計(jì)過(guò)程里最重要、最復(fù)雜
19、的過(guò)程之一了。在這一部分,我們將依據(jù)數(shù)據(jù)通路圖,分析數(shù)據(jù)通路中所有控制信號(hào)的組成與賦值。第一步,我們將31條指令都劃分為四個(gè)節(jié)拍執(zhí)行完成:取指與譯碼、取數(shù)與ALU操作、主存取數(shù)、寫(xiě)回寄存器。我們需要對(duì)每一條指令的每一個(gè)控制信號(hào)進(jìn)行分析,判斷它應(yīng)該在第幾節(jié)拍給出。經(jīng)分析,我們?cè)贑PU工作過(guò)程中共需要控制信號(hào)38個(gè)(其中包括4位ALUCtr),分別是:COM0,COM1,ALU_AR,PC_1,RT_DR,PC_AB,DB_IR,DB_DR,RS_ALU,RT_ALU,DE_ALU,PC_ALU,ZERO_ALU,HEX_ALU,SHAMT_ALU,DR_REG,REG_W,REG_R,ALUCt
20、r0,ALUCtr1,ALUCtr2,ALUCtr3,ADDR_PC,DR_DB,ALU_DR,AR_AB,DR_PC,DR_REG31,PC_W,PC_R,J_PC,IMM_DE,DE_U,RD_REG,RS_REG,RT_REG,RS_COM,RT_COM,DE_COM,COM_NVST,ZERO_REG,PC_JIE。具體的信號(hào)表在附件的Excel中。列出所有控制信號(hào)后,對(duì)每一條指令需要哪些控制信號(hào),在第幾節(jié)拍需要這些控制信號(hào)都要標(biāo)識(shí)清楚。如對(duì)于一號(hào)指令有符號(hào)數(shù)加:在第一節(jié)拍(取指與譯碼),要給出控制信號(hào)PC_1,PC_AB,DB_IR,將PC地址傳入地址總線并取出相應(yīng)的指令送入指令寄存
21、器,PC再完成自加一的操作;第二節(jié)拍(取數(shù)與ALU操作)需要的控制信號(hào)是RS_ALU,RT_ALU,REG_R,ALU_DR,RS_REG,RT_REG(ALUCtr為0,四個(gè)控制信號(hào)都不給出),將指令中rs,rt地址傳給寄存器,寄存器將對(duì)應(yīng)寄存器中的數(shù)取出送到ALU,ALU根據(jù)給出的ALUCtr進(jìn)行不同的操作。第三節(jié)拍是寫(xiě)回寄存器,給出控制信號(hào)DR_REG,REG_W,RD_REG,將DR中的數(shù)、rd地址送至寄存器,并打開(kāi)寄存器寫(xiě)開(kāi)關(guān)。用這種方式分析所有指令。在分析完控制信號(hào)后,我們就可以對(duì)控制器進(jìn)行具體設(shè)計(jì)了。2.2、各部件具體設(shè)計(jì)2.2.1、ALU部件ALU是基于指令集來(lái)設(shè)計(jì)的,可完成二
22、進(jìn)制信息的算術(shù)運(yùn)算、邏輯運(yùn)算和移位操作,共包含31條MIPS指令。我們將其總結(jié)為13種ALU操作類型,用四位二進(jìn)制數(shù)進(jìn)行編碼,如下圖所示。這些二進(jìn)制編碼作為ALU控制信號(hào),即aluctr。編號(hào)操作類型二進(jìn)制編碼1有符號(hào)加00002無(wú)符號(hào)加00013有符號(hào)減00104無(wú)符號(hào)減00115與01006或01017異或01108非或01119有符號(hào)比較100010無(wú)符號(hào)比較100111邏輯左移101012邏輯右移101113數(shù)字右移1100在ALU中,為符合它的雙操作數(shù)功能,我們?cè)O(shè)計(jì)了兩個(gè)寄存器r1和r2,作為ALU的兩個(gè)輸入。經(jīng)過(guò)對(duì)指令集的分析,將進(jìn)入ALU數(shù)據(jù)來(lái)源分為rt、rs,shamt,imm
23、,PC幾種類型,為了避免數(shù)據(jù)操作時(shí)發(fā)生沖突,將其分別放在兩個(gè)寄存器中,其中rt、imm放在r1中,rs、shamt和PC放在r2中。除了兩個(gè)寄存器輸入外,還有ALU控制信號(hào)輸入端口aluctr。一個(gè)輸出端口out。在ALU運(yùn)行過(guò)程中,從r1、r2中取出數(shù)據(jù),根據(jù)aluctr給出的控制信號(hào)進(jìn)行相應(yīng)的運(yùn)算,從out端口輸出。ALU部件的代碼見(jiàn)附錄。2.2.2、PC部件PC部件是用來(lái)計(jì)算下一條指令的,在一般情況下,指令都是順序執(zhí)行下去的,即PC+1,而在遇到跳轉(zhuǎn)指令時(shí),則需要進(jìn)行其他復(fù)雜的操作,所以我們制作的PC部件主要分了這兩種操作方法。在編寫(xiě)的PC部件代碼中,共有四個(gè)輸入端口,分別是從當(dāng)前執(zhí)行的
24、指令中取來(lái)的地址address,用于下一條PC的拼接,既然有PC拼接和PC+1的兩種操作,我們就分別給出了兩個(gè)輸入的PC操作信號(hào):pc_ctr和pc_pj,另外還有從ALU來(lái)的運(yùn)算結(jié)果alu_pc作為第四個(gè)輸入端口。輸出端口有pc_out和pc_alu。當(dāng)接收到pc_ctr信號(hào)時(shí),進(jìn)行PC+1的操作,而當(dāng)接收到pc_pj信號(hào)時(shí),進(jìn)行PC的拼接操作。PC部件的代碼見(jiàn)附錄。2.2.3、寄存器組寄存器是計(jì)算機(jī)的一個(gè)重要部件,用于暫存數(shù)據(jù)和指令等。由于考慮到存儲(chǔ)空間的大小,我們將原有的32個(gè)32位的寄存器組修改為4個(gè)32位的寄存器組。在寄存器組中,存在兩個(gè)控制信號(hào),分別為讀和寫(xiě),當(dāng)收到讀信號(hào)時(shí),我們接
25、收到的地址所對(duì)應(yīng)的寄存器的數(shù)據(jù)取出,若接收到的是寫(xiě)信號(hào),我們就將接收到的數(shù)據(jù)寫(xiě)回之前發(fā)過(guò)來(lái)的地址所指示的寄存器中。其中,地址的來(lái)源有指令中的rs_add,rrt_addr和rd_addr,數(shù)據(jù)來(lái)源為rd_data,共有兩個(gè)輸出端口,分別為rt_out,rs_out。 寄存器組的代碼見(jiàn)附錄。2.2.4、立即數(shù)擴(kuò)展部件立即數(shù)擴(kuò)展部件的主要工作是將指令中的16位的立即數(shù)擴(kuò)展成為32位的數(shù),并且有有符號(hào)擴(kuò)展和無(wú)符號(hào)擴(kuò)展兩種。因此,對(duì)于一個(gè)立即數(shù)擴(kuò)展部件來(lái)說(shuō),有兩個(gè)輸入一個(gè)輸出。輸入分別是16位的立即數(shù)和控制擴(kuò)展方式的控制信號(hào),輸出是擴(kuò)展之后的32位的數(shù)。立即數(shù)擴(kuò)展部件具體代碼見(jiàn)附錄。2.2.5、比較部
26、件比較部件是我們?cè)诒敬卧O(shè)計(jì)中的一個(gè)創(chuàng)新點(diǎn)??紤]到每一次比較操作都要經(jīng)過(guò)ALU,而涉及到比較操作的指令除了比較操作本身還會(huì)用一次ALU操作,這在流水設(shè)計(jì)中無(wú)疑會(huì)帶來(lái)部件沖突。盡管在發(fā)生沖突時(shí),我們可以采用檢測(cè)沖突、加入阻塞的方法進(jìn)行排除,但這無(wú)疑給控制的設(shè)計(jì)帶來(lái)了很大的困難。我們考慮:能否為比較操作專門設(shè)置一個(gè)比較部件,用來(lái)判斷兩個(gè)操作數(shù)大小并依據(jù)指令類型為標(biāo)志位賦值。為后面的操作提供依據(jù)。我們?cè)O(shè)計(jì)的比較部件,可以完成如下四種操作:判等置1,判不等置1,判大于置1,判小于置1。因此比較部件有四個(gè)輸入:比較控制信號(hào)1,比較控制信號(hào)2(兩個(gè)信號(hào)組合起來(lái)表示現(xiàn)在在做哪一種判斷),比較數(shù)1以及比較數(shù)2,
27、一個(gè)輸出對(duì)標(biāo)志位置位。具體代碼見(jiàn)附錄。2.2.6、信號(hào)發(fā)生器信號(hào)發(fā)生器是根據(jù)脈沖信號(hào)循環(huán)給出節(jié)拍控制信號(hào)的部件。學(xué)過(guò)熟悉邏輯的都應(yīng)該就得不難。首先將clk進(jìn)行分頻,將分頻后的信號(hào)與clk組合起來(lái),表示四個(gè)節(jié)拍,從一到四分別為:00,01,10,11。在仿真后出現(xiàn)了下面的情況(圖2.6.1):圖2.6.1仔細(xì)觀察可以發(fā)現(xiàn),途中輸出信號(hào)w1,w2,w3,w4出現(xiàn)了毛刺(如4600ns處w1信號(hào))。在查閱相關(guān)資料并向教員請(qǐng)教后我們意識(shí)到,這就是數(shù)電中說(shuō)到的“毛刺”。由于從“01”到“10”,兩個(gè)輸入信號(hào)同時(shí)發(fā)生了變化,所以在變化的一瞬間出現(xiàn)了不想要的“毛刺”。我們又查閱數(shù)電書(shū),發(fā)現(xiàn)解決毛刺的方法就是
28、采用“格雷碼”編碼方式,即每次信號(hào)變化時(shí)只有一個(gè)信號(hào)發(fā)生變化。因此我們又添加了一個(gè)分頻信號(hào)在clk的時(shí)鐘下降沿翻轉(zhuǎn),與原先始終上升沿翻轉(zhuǎn)的信號(hào)一起,組成了新的控制信號(hào),從一到四分別為:00,01,11,10。這樣產(chǎn)生的信號(hào)就符合“格雷碼”編碼方式,也不會(huì)產(chǎn)生“毛刺”。(如圖2.6.2)圖2.6.2信號(hào)發(fā)生器源碼見(jiàn)附錄。2.2.7、硬布線控制器在設(shè)計(jì)CPU之初,我們就決定了使用硬布線方式設(shè)計(jì)控制器。在IDE工具的幫助下設(shè)計(jì)硬布線控制器比真實(shí)的大規(guī)模集成電路設(shè)計(jì)硬布線要簡(jiǎn)單的多。運(yùn)用一些固定的格式,IDE會(huì)自動(dòng)生成硬布線電路。之前在2.1的部分,我們就已經(jīng)完成了控制信號(hào)的提取與分析,這時(shí)候只需要細(xì)
29、心地將Excel表格中的內(nèi)容轉(zhuǎn)換成代碼??刂破鞯妮斎胗辛鶄€(gè):6位的OP,6位的FUNC,節(jié)拍信號(hào)w1,w2,w3,w4,輸出為所有控制信號(hào)。如在某條指令中,需要在第幾節(jié)拍給出哪個(gè)信號(hào),就將該信號(hào)等于對(duì)應(yīng)的節(jié)拍輸入即可,IDE會(huì)自動(dòng)生成硬布線電路。源碼見(jiàn)附錄。實(shí)驗(yàn)感悟唐玲芳的實(shí)驗(yàn)感悟經(jīng)過(guò)幾個(gè)星期的努力,雖然沒(méi)能把CPU制作出來(lái),卻收獲了不少。在這次實(shí)驗(yàn)中,我最大的收獲是對(duì)計(jì)算機(jī)組成原理這門課程的理解更加深刻了。在制作的過(guò)程中,我們不懂就問(wèn),自己動(dòng)腦去理解,因?yàn)槲覀冎?,如果不理解,?shí)驗(yàn)是無(wú)法進(jìn)行下去的,在教員的悉心幫助下,我們也取得了一些成果。在實(shí)驗(yàn)的前期,我們一步一個(gè)腳?。捍_定CPU的功能、能
30、執(zhí)行指令集,制定通路路線圖,分析出所有的控制信號(hào)等等。在這個(gè)過(guò)程中,我們也充分理解到“結(jié)構(gòu)決定功能”這句話,在沒(méi)能全面考慮到所有的功能時(shí),在通路圖上總會(huì)少幾個(gè)部件,只有將所有功能走通了,都能實(shí)現(xiàn)了,我們的通路才真的制定完整了。在實(shí)驗(yàn)的過(guò)程中,我主要參與了ALU部件、寄存器組、PC部件的制作。在編寫(xiě)程序的過(guò)程中,也遇到了不少麻煩。比如說(shuō)部件的中心思想、主要結(jié)構(gòu)沒(méi)有弄清楚,導(dǎo)致程序出錯(cuò),而無(wú)法進(jìn)行下去。在之前我們一直以為控制器所給的控制信號(hào)是在ALU內(nèi)部的,控制信號(hào)一來(lái),才知道數(shù)據(jù)是從哪來(lái)ALU的,然后再?gòu)腁LU中的寄存器中取出來(lái)進(jìn)行相應(yīng)的運(yùn)算,但是后來(lái)才發(fā)現(xiàn),控制器的控制信號(hào)并不歸ALU管,它是
31、各部件連接的通路上的,在ALU中我們只需要從寄存器中取數(shù),根據(jù)ALU控制信號(hào)進(jìn)行相應(yīng)的運(yùn)算就可以了。明白了這一點(diǎn)后,我們的ALU才基本完成了正確的實(shí)現(xiàn)。另外就是我對(duì)所用的Verilog語(yǔ)言不夠熟悉,很多語(yǔ)法都沒(méi)有完全掌握,在寫(xiě)程序時(shí),斷斷續(xù)續(xù),影響進(jìn)度。 總的來(lái)說(shuō),在這次實(shí)驗(yàn)中,我的收獲還是很大的。無(wú)論是對(duì)課程的理解還是對(duì)編程、動(dòng)手能力的提高,都有一定程度的幫助。戚洪源的實(shí)驗(yàn)感悟在回到信大之前,心里是非常向往這次實(shí)驗(yàn)的。在科大學(xué)習(xí)了一學(xué)期計(jì)算機(jī)原理,第一次如此深入地接觸計(jì)算機(jī),當(dāng)時(shí)教員說(shuō)會(huì)在暑期學(xué)期用整整兩周時(shí)間來(lái)做這個(gè)實(shí)驗(yàn)。原本以為自己沒(méi)有這樣的機(jī)會(huì),但很幸運(yùn)還是解除了這個(gè)實(shí)驗(yàn)。整體感覺(jué)是:
32、很難。設(shè)計(jì)CPU不是紙上談兵,是要實(shí)實(shí)在在寫(xiě)代碼燒板子的,一個(gè)小小的錯(cuò)誤可能就導(dǎo)致了最后的失敗。我在試驗(yàn)中最大的感受有以下幾點(diǎn):一、 萬(wàn)事開(kāi)頭難做這個(gè)實(shí)驗(yàn)擺在面前的第一個(gè)問(wèn)題就是:現(xiàn)在干嘛?這是一個(gè)很實(shí)際的問(wèn)題,如果沒(méi)有教員指導(dǎo),應(yīng)該怎么開(kāi)始?在實(shí)驗(yàn)開(kāi)始前我就著手資料準(zhǔn)備,和許多研究生學(xué)長(zhǎng)交流之后確定了從指令集到通路圖的方案。浴室我著手開(kāi)始搜關(guān)于設(shè)計(jì)指令集的資料,并且確定以31條MIPS指令集為基礎(chǔ)。事后回想起來(lái),真是萬(wàn)事開(kāi)頭難。當(dāng)一個(gè)復(fù)雜的任務(wù)來(lái)臨不知道從何入手時(shí),一定要注意,千萬(wàn)不能自己搞自己那一套,很可能一開(kāi)始就走到了一個(gè)錯(cuò)誤的道路上。既然不知道從何入手,就去查資料,請(qǐng)教別人,這是本次實(shí)
33、驗(yàn)的收獲之一。二、 模塊化設(shè)計(jì)思想和黑盒設(shè)計(jì)思想CPU這幾工作量很大,而且各部分之間緊密聯(lián)系。首先時(shí)間緊,一個(gè)人去完成不太可能實(shí)現(xiàn),而合作的話,如何將一個(gè)聯(lián)系非常緊密的東西分開(kāi)去做呢?這就要用到模塊化設(shè)計(jì)思想和黑盒設(shè)計(jì)思想。將這個(gè)數(shù)據(jù)通路圖中的元器件按照功能進(jìn)行最小化劃分。一個(gè)元器件有什么輸入什么輸出,實(shí)現(xiàn)什么樣的功能,這和總體連線是沒(méi)有太大關(guān)聯(lián)的。確定出來(lái)大致有哪幾個(gè)元器件,分別是什么輸入輸出,比如ALU部件,就兩個(gè)操作數(shù)輸入,一個(gè)控制信號(hào)輸入,一個(gè)結(jié)果輸出,至于怎么和寄存器堆相連,輸出到哪里之類的問(wèn)題,不需要AlU設(shè)計(jì)者去考慮。最終,在所有元器件確認(rèn)沒(méi)有問(wèn)題之后進(jìn)行頂層連線。講一個(gè)個(gè)元件看
34、成黑盒,元件設(shè)計(jì)者不需要知道外界怎么連接它,頂層設(shè)計(jì)者不需要知道內(nèi)部如何運(yùn)行。這樣,就可以把CPU這個(gè)有機(jī)的整體合理劃分成幾小塊,交給不同人去分別實(shí)現(xiàn)。這種思想還是令我感觸十分深的。在以后的大項(xiàng)目、大問(wèn)題出現(xiàn)的時(shí)候,也可以考慮這種方式進(jìn)行分工合作。三、 對(duì)于中央處理器有了更深一步的認(rèn)識(shí)實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)。經(jīng)過(guò)這一次的實(shí)驗(yàn),我對(duì)于CPU的理解又深了一層。在科大的時(shí)候做過(guò)一個(gè)簡(jiǎn)單的,七條指令的單周期CPU的元器件連線圖,連控制信號(hào)都是教員給出來(lái)的,也可以跑指令,當(dāng)時(shí)覺(jué)得非常激動(dòng)。這一次,我自己動(dòng)手設(shè)計(jì)31條指領(lǐng)的流水CPU。從設(shè)計(jì)指令集開(kāi)始,一步一步地提取控制信號(hào),這個(gè)過(guò)程的收獲非常大。這一
35、次實(shí)驗(yàn)讓我徹底理解了設(shè)計(jì)CPU的控制器應(yīng)該遵循一個(gè)什么樣的流程,絕不是簡(jiǎn)單復(fù)制某本書(shū)上的真值表。在走遍31條指令后,整個(gè)CPU的數(shù)據(jù)通路圖已經(jīng)深深刻在我的腦海里。還有太多太多,整個(gè)過(guò)程的確讓我受益匪淺。四、 對(duì)于硬件設(shè)計(jì)有了更深的了解原先也學(xué)習(xí)過(guò)數(shù)字設(shè)計(jì)課程,不過(guò)幾乎沒(méi)有接觸實(shí)驗(yàn)。以至于學(xué)完之后許多邏輯上的問(wèn)題根本無(wú)法理解。這一次做了實(shí)驗(yàn),再回過(guò)頭來(lái)想想,許多東西就可以理解了。特別是一些問(wèn)題的處理,必須用到數(shù)電的知識(shí)。如:設(shè)計(jì)信號(hào)發(fā)生器的時(shí)候遇到的“毛刺”問(wèn)題,一開(kāi)始一頭霧水,根本不懂為什么會(huì)出現(xiàn)這個(gè)東西。后來(lái)經(jīng)教員點(diǎn)撥,一下子想起來(lái)這是數(shù)電中學(xué)習(xí)過(guò)的“格雷碼”編碼問(wèn)題。這時(shí)運(yùn)用數(shù)電知識(shí)問(wèn)題迎
36、刃而解。五、 總結(jié)總結(jié)起來(lái),這一次實(shí)驗(yàn)即使最終沒(méi)有完整地拿出結(jié)果來(lái),但是已經(jīng)有了許多收獲了。今年暑假的時(shí)候和科大的教員交流,說(shuō)到CPU實(shí)驗(yàn)的問(wèn)題時(shí),她說(shuō)作為一個(gè)計(jì)算機(jī)專業(yè)的學(xué)生,沒(méi)有去自己嘗試過(guò)做一個(gè)CPU,還是有點(diǎn)遺憾的。做過(guò)一次,不管結(jié)果如何,都會(huì)有所收獲?,F(xiàn)在這學(xué)期的實(shí)驗(yàn)也告一段落,收獲肯定遠(yuǎn)比上面說(shuō)的要多。真的不虛此行,后面有機(jī)會(huì),一定要把這個(gè)CPU再拿出來(lái),把它做完。不知道這個(gè)可不可以算一個(gè)畢業(yè)設(shè)計(jì)。如果做出來(lái),能算信大CPU第一人嗎?哈哈,開(kāi)玩笑了。附錄ALU部件源碼module ALU(alucrt,r1,r2,out);input 3:0alucrt;input 31:0r1,
37、r2;output reg31:0out;always(*)begin case(alucrt) 0000: begin if(r231=r131) begin out31=r231; out30:0=r230:0+r130:0; end else begin if(r230:0>r130:0) begin out31=r231; out30:0=r230:0-r130:0; end else begin out31=r131; out30:0=r130:0-r230:0; end end end 0001: begin out=r2+r1; end 0010: begin if(r23
38、1=r131) begin if(r230:0>r130:0) begin out31=r231; out30:0=r230:0-r130:0; end else begin out31=r131; out30:0=r130:0-r230:0; end end else begin out31=r231; out30:0=r230:0+r130:0; end end 0011: begin out=r2-r1; end 0100: begin out=r2&r1; end 0101: begin out=r2|r1; end 0110: begin out=r2r1; end 0
39、111: begin out=r2r1; end 1000: begin if(r231=r131) begin if(r231=1) begin if(r230:0>r130:0) begin out=1; end else begin out=0; end end else begin if(r230:0<r130:0) begin out=1; end else begin out=0; end end end else begin if(r131=1) begin out=1; end else begin out=0; end end end 1001: begin if
40、(r2<r1) begin out=1; end else begin out=0; end end 1010: begin out=(r2<<r1); end 1011: begin out=(r2>>r1); end 1100: begin out=(r2>>>r1); end endcaseendendmodulePC部件源碼module PC(address,alu_pc,pc_alu,pc_ctr,pc_pj,pc_out);input 25:0address;input 31:0alu_pc,pc_ctr,pc_pj;output 3
41、1:0pc_out,pc_alu;reg 31:0r;always(*)begin if(pc_ctr) begin r=r+4; end if(pc_pj) begin r=r+4; r27:2=address; r1:0=0; endendendmodule寄存器組源碼module Register(rs_addr,rt_addr,rd_addr,rd_data,read,write,rt_out,rs_out);input 4:0rs_addr,rt_addr,rd_addr;input 31:0rd_data;input read,write;output 31:0rt_out,rs_
42、out; reg 31:0rt_out,rs_out;reg 31:0r0:3;always(*)begin if(read) begin if(rs_addr) begin case(rs_addr) 00000: begin rs_out=r0; end 00001: begin rs_out=r1; end 00010: begin rs_out=r2; end 00011: begin rs_out=r3; end endcase end if(rt_addr) begin case(rt_addr) 00000: begin rt_out=r0; end 00001: begin r
43、t_out=r1; end 00010: begin rt_out=r2; end 00011: begin rt_out=r3; end endcase end end else begin case(rd_addr) 00000: begin r0=rd_data; end 00001: begin r1=rd_data; end 00010: begin r2=rd_data; end 00011: begin r3=rd_data; end endcase endendendmodule立即數(shù)擴(kuò)展部件源碼module DE(DE_U,IMM,DE_OUT);input DE_U;inp
44、ut 15:0IMM;output 31:0 DE_OUT;reg 31:0 DE_OUT;always(*)beginDE_OUT15:0=IMM;if(DE_U=0)beginDE_OUT31=IMM15;DE_OUT30=IMM15;DE_OUT29=IMM15;DE_OUT28=IMM15;DE_OUT27=IMM15;DE_OUT26=IMM15;DE_OUT25=IMM15;DE_OUT24=IMM15;DE_OUT23=IMM15;DE_OUT22=IMM15;DE_OUT21=IMM15;DE_OUT20=IMM15;DE_OUT19=IMM15;DE_OUT18=IMM15;
45、DE_OUT17=IMM15;DE_OUT16=IMM15;endelsebeginDE_OUT31=0;DE_OUT30=0;DE_OUT29=0;DE_OUT28=0;DE_OUT27=0;DE_OUT26=0;DE_OUT25=0;DE_OUT24=0;DE_OUT23=0;DE_OUT22=0;DE_OUT21=0;DE_OUT20=0;DE_OUT19=0;DE_OUT18=0;DE_OUT17=0;DE_OUT16=0;endendendmodule比較部件源碼module COM(R1,R2,NVST,COM0,COM1);input COM0,COM1;input 31:0 R
46、1,R2;output NVST;reg NVST;reg num;num=COM0+COM1*2;always(*)begincase(num)0:beginif(R1=R2)NVST=1;elseNVST=0;end1:beginif(R1=R2)NVST=0;elseNVST=1;end2:beginif(R1<R2)NVST=1;elseNVST=0;end3:beginif(R1>R2)NVST=1;elseNVST=0;endendcaseendendmodule信號(hào)發(fā)生器源碼module signal(clk,w1,w2,w3,w4);input clk;output
47、 w1,w2,w3,w4;reg w1,w2,w3,w4;reg clk2,clk3;always(posedge clk)beginclk2<=clk2;endalways(negedge clk)beginclk3<=clk3;endalways(clk or clk2)beginw1=clk&clk2;w2=clk2&clk;w3=clk&clk2;w4=clk&clk2;endendmodule硬布線控制器源碼module control(OP,FUNC,W1,W2,W3,W4,RT_DR,COM0,COM1,PC_1,PC_AB,DB_IR
48、,DB_DR,RS_ALU,RT_ALU,DE_ALU,PC_ALU,ZERO_ALU,HEX_ALU,SHAMT_ALU,DR_REG,REG_W,REG_R,ALUCtr0,ALUCtr1,ALUCtr2,ALUCtr3,ADDR_PC,DR_DB,ALU_DR,ALU_AR,AR_AB,DR_PC,DR_REG31,PC_W,PC_R,J_PC,IMM_DE,DE_U,RD_REG,RS_REG,RT_REG,RS_COM,RT_COM,DE_COM,COM_NVST,ZERO_REG,PC_JIE);input W1,W2,W3,W4;input 5:0 OP,FUNC;output
49、COM0,COM1,ALU_AR,PC_1,RT_DR,PC_AB,DB_IR,DB_DR,RS_ALU,RT_ALU,DE_ALU,PC_ALU,ZERO_ALU,HEX_ALU,SHAMT_ALU,DR_REG,REG_W,REG_R,ALUCtr0,ALUCtr1,ALUCtr2,ALUCtr3,ADDR_PC,DR_DB,ALU_DR,AR_AB,DR_PC,DR_REG31,PC_W,PC_R,J_PC,IMM_DE,DE_U,RD_REG,RS_REG,RT_REG,RS_COM,RT_COM,DE_COM,COM_NVST,ZERO_REG,PC_JIE;reg COM0,COM1,ALU_AR,PC_1,RT_DR,PC_AB,DB_IR,DB_DR,RS_ALU,RT_ALU,DE_ALU,PC_ALU,ZERO_ALU,HEX_ALU,SHAMT_ALU,DR_REG,REG_W,REG_R,ALUCtr0,ALUCtr1,ALUCtr2,ALUCtr3,ADDR_PC,DR_DB,ALU_DR,AR_AB,DR_
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度國(guó)際文化交流項(xiàng)目志愿者聘用合同
- 2025版民宿民宿餐飲服務(wù)合同示范4篇
- 2025年度房地產(chǎn)公司股權(quán)轉(zhuǎn)讓與市場(chǎng)推廣合同
- 2025年度個(gè)人車位租賃服務(wù)合同范本2篇
- 2025年度沐足行業(yè)員工勞動(dòng)合同模板(含保密協(xié)議)4篇
- 林綿綿《韓娛離婚協(xié)議》2025年度網(wǎng)絡(luò)劇改編權(quán)轉(zhuǎn)讓合同8篇
- 二零二五年度個(gè)人現(xiàn)金借款合同標(biāo)準(zhǔn)版2篇
- 二零二五年度農(nóng)產(chǎn)品品牌授權(quán)使用合同8篇
- 二零二五年度農(nóng)家樂(lè)鄉(xiāng)村旅游扶貧項(xiàng)目合作合同4篇
- 二零二五年度文化旅游產(chǎn)業(yè)投資借款合同大全4篇
- 2022年中國(guó)電信維護(hù)崗位認(rèn)證動(dòng)力專業(yè)考試題庫(kù)大全-上(單選、多選題)
- 紀(jì)委辦案安全培訓(xùn)課件
- 超市連鎖行業(yè)招商策劃
- 醫(yī)藥高等數(shù)學(xué)智慧樹(shù)知到課后章節(jié)答案2023年下浙江中醫(yī)藥大學(xué)
- 城市道路智慧路燈項(xiàng)目 投標(biāo)方案(技術(shù)標(biāo))
- 初中英語(yǔ)-Unit2 My dream job(writing)教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 【公司利潤(rùn)質(zhì)量研究國(guó)內(nèi)外文獻(xiàn)綜述3400字】
- 工行全國(guó)地區(qū)碼
- 新疆2022年中考物理試卷及答案
- 地暖工程監(jiān)理實(shí)施細(xì)則
- 頂部板式吊耳計(jì)算HGT-20574-2018
評(píng)論
0/150
提交評(píng)論