版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> ******</b></p><p> 設(shè) 計(jì) 性 實(shí) 驗(yàn)(報(bào)告)</p><p> 題 目: 簡(jiǎn)單16位CPU設(shè)計(jì)</p><p> 課 程: 計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)</p><p> 院 (部): 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院</p&g
2、t;<p> 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)</p><p> 班 級(jí): ***</p><p> 學(xué)生姓名: ***</p><p> 學(xué) 號(hào): ******</p><p> 指導(dǎo)教師: ***</p>
3、<p> 完成日期: 2010-12-8</p><p> *******計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院</p><p> 簡(jiǎn)單16位CPU設(shè)計(jì)</p><p><b> 一、實(shí)驗(yàn)內(nèi)容</b></p><p> 完成從指令系統(tǒng)到CPU的設(shè)計(jì),編寫(xiě)測(cè)試程序,通過(guò)運(yùn)行測(cè)試程序?qū)PU設(shè)計(jì)進(jìn)行正確性
4、評(píng)定。具體內(nèi)容包括:典型指令系統(tǒng)(包括運(yùn)算類、轉(zhuǎn)移類、訪存類)設(shè)計(jì);CPU結(jié)構(gòu)設(shè)計(jì);CPU的VHDL程序代碼編寫(xiě);規(guī)則文件與調(diào)試程序設(shè)計(jì);CPU調(diào)試及測(cè)試程序運(yùn)行。</p><p><b> 二、實(shí)驗(yàn)?zāi)康募耙?lt;/b></p><p> 1.加深對(duì)計(jì)算機(jī)的基本概念、基本原理和基本結(jié)構(gòu)的理解;</p><p> 2.掌握計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)
5、方面的基本設(shè)計(jì)、分析與實(shí)現(xiàn)方法;</p><p> 3.掌握典型16CPU設(shè)計(jì)方法;</p><p> 4.熟練掌握VHDL語(yǔ)言及應(yīng)用,完成對(duì)CPU各功能模塊的代碼描述,實(shí)現(xiàn)各個(gè)功能模塊部分的連接,從而形成一個(gè)完整的CPU體系結(jié)構(gòu);</p><p> 5.學(xué)會(huì)利用先進(jìn)的硬件設(shè)計(jì)工具軟件Quartus II對(duì)程序進(jìn)行仿真和調(diào)試;</p><p
6、> 6.掌握基于“TEC-CA試驗(yàn)教學(xué)系統(tǒng)”進(jìn)行CPU調(diào)試的方法。</p><p><b> 實(shí)驗(yàn)儀器設(shè)備</b></p><p> ?。?)TEC-CA試驗(yàn)教學(xué)系統(tǒng);</p><p> ?。?)虛擬儀器平臺(tái);</p><p><b> ?。?)計(jì)算機(jī)。</b></p>&l
7、t;p><b> ?。?)實(shí)驗(yàn)環(huán)境</b></p><p><b> 實(shí)驗(yàn)方案設(shè)計(jì)</b></p><p><b> 指令系統(tǒng)設(shè)計(jì)</b></p><p> 指令系統(tǒng)的作用和地位</p><p> 指令系統(tǒng)是從程序設(shè)計(jì)者看到的機(jī)器的主要屬性,是軟、硬件的主要界面。
8、</p><p> 指令系統(tǒng)是計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)的主要組成部分。</p><p> 指令系統(tǒng)是軟件與硬件分界面的一個(gè)主要標(biāo)志。</p><p> 指令系統(tǒng)是軟件與硬件之間互相溝通的橋梁。</p><p><b> 指令系統(tǒng)的設(shè)計(jì)規(guī)范</b></p><p> 設(shè)計(jì)的原則:支持編譯系統(tǒng)能高效、
9、簡(jiǎn)易地將源程序翻譯成目標(biāo)代碼。</p><p> 正交性:指令字段編碼相互獨(dú)立。</p><p> 規(guī)整性:相似操作有相同的規(guī)定。</p><p> 可擴(kuò)充性:操作碼冗余。</p><p> 對(duì)稱性:A-B=》A;A-B=》B,便于編譯。</p><p> CPU中操作數(shù)的存儲(chǔ)方法</p>&l
10、t;p> CPU中操作數(shù)的存儲(chǔ)方法是各種指令集結(jié)構(gòu)之間最主要的區(qū)別所在,其影響運(yùn)算器的組織。</p><p> CPU中用來(lái)存儲(chǔ)操作數(shù)的存儲(chǔ)單元主要有:</p><p><b> ?。?)堆棧; </b></p><p><b> ?。?)累加器;</b></p><p><b>
11、; (3)一組寄存器;</b></p><p> 通用寄存器型指令集結(jié)構(gòu)的主要優(yōu)點(diǎn):</p><p> ?。?)使編譯器有效地使用寄存器;</p><p> ?。?)在表達(dá)式求值方面,比其它類型指令集結(jié)構(gòu),具有更大的靈活性;</p><p> ?。?)寄存器可以用來(lái)存放變量;</p><p> a.減
12、少存儲(chǔ)器的訪問(wèn)量,加快程序的執(zhí)行速度。(因?yàn)榧拇嫫鞅却鎯?chǔ)器快)</p><p> b.可以用更少的地址位來(lái)尋址寄存器,從而可以有效改進(jìn)程序的目標(biāo)代碼大小。</p><p> 由于通用寄存器型指令系統(tǒng)存在諸多的優(yōu)點(diǎn)因此我們選擇通用寄存器型指令結(jié)構(gòu)。</p><p><b> 指令格式與功能</b></p><p>&
13、lt;b> ADD DR,SR</b></p><p><b> 指令編碼:</b></p><p> 功能:DR DR+SR,影響C和Z標(biāo)志,PC PC+1。</p><p><b> INC DR</b></p><p><b> 指令編碼
14、:</b></p><p> 功能:DR DR+1,影響C和Z標(biāo)志,PC PC+1</p><p><b> SUB DR,SR</b></p><p><b> 指令編碼:</b></p><p> 功能: DR DR-SR,影響C和Z標(biāo)志,PC
15、PC+1</p><p><b> DEC DR</b></p><p><b> 指令編碼:</b></p><p> 功能:DR DR-1,影響C和Z標(biāo)志,PC PC+1</p><p><b> AND DR,SR</b></p>&
16、lt;p><b> 指令編碼:</b></p><p> 功能:DR DR and SR,影響Z標(biāo)志,PC PC+1</p><p><b> OR DR,SR</b></p><p><b> 指令編碼:</b></p><p> 功能:DR
17、 DR or SR,影響Z標(biāo)志,PC PC+1</p><p><b> NOT DR</b></p><p><b> 指令編碼:</b></p><p> 功能:DR not SR,影響Z標(biāo)志,PC PC+1</p><p><b> MOV DR
18、,SR</b></p><p><b> 指令編碼:</b></p><p> 功能:功能:DR SR,不影響標(biāo)志位,PC PC+1</p><p><b> JMP ADR</b></p><p><b> 指令編碼:</b></p&
19、gt;<p> 功能:PC ADR</p><p><b> JNC ADR</b></p><p><b> 指令編碼:</b></p><p> 功能:如果C=0,則PC ADR;如果C=1,則PC PC+1</p><p><b> J
20、NZ ADR</b></p><p><b> 指令編碼:</b></p><p> 功能:如果Z=0,則PC ADR;如果C=1,則PC PC+1</p><p> MVRD DR,DATA</p><p><b> 指令編碼:</b></p>&
21、lt;p> 功能:DR DATA,PC PC+2</p><p><b> LDR DR,SR</b></p><p><b> 指令編碼:</b></p><p> 功能:DR [SR],PC PC+1</p><p><b> STR
22、SR,DR</b></p><p><b> 指令編碼:</b></p><p> 功能:[DR] SR,PC PC+1</p><p><b> NOP</b></p><p><b> 指令編碼:</b></p><
23、p> 功能:PC PC+1</p><p><b> 16、補(bǔ)充:</b></p><p><b> 指令編碼</b></p><p> CPU為16位:CPU的并行處理能力16位,總線寬度為16位,指令長(zhǎng)度至少16位。</p><p> 采用對(duì)稱式寄存器結(jié)構(gòu):無(wú)累加器的概
24、念,形成的通用寄存器組有兩個(gè)輸出端口(讀端口)、一個(gè)輸入端口(寫(xiě)端口)。共設(shè)有4個(gè)R(R0-R3)。</p><p> 指令分類:運(yùn)算類、轉(zhuǎn)移類、訪存類。</p><p> 用兩位編碼: IR15, IR14 </p><p> 運(yùn)算類: 0 0</p><p> 轉(zhuǎn)移類:
25、 1 0</p><p> 訪存類: 1 1</p><p><b> 運(yùn)算類:</b></p><p> (IR15=0) IR14, IR13, IR12</p><p> ADD 0 0
26、 0</p><p> INC 0 0 1</p><p> SUB 0 1 0</p><p> DEC 0 1 1</p><p> AND
27、 1 0 0</p><p> OR 1 0 1</p><p> NOT 1 1 0</p><p> NOP 1 1 1</p
28、><p> 結(jié)果處理(送R或送M)</p><p> 兩種選擇,1位編碼: IR0=1:送DR;</p><p> 影響Z標(biāo)志否, 1位編碼:IR1=1,影響;</p><p> 影響C標(biāo)志否, 1位編碼:IR2=1,影響。</p><p> 沒(méi)用的位設(shè)為0(保留位) </p><p>
29、<b> 指令機(jī)器碼:</b></p><p> 說(shuō)明:(1)本CPU中含有4個(gè)通用寄存器,用R0,R1,R2,和R3表示。源寄存器用SR表示,目的寄存器用DR表示,因此DR和SR在指令編碼中各用2bit編碼。</p><p> (2)指令編碼中的@代表該指令當(dāng)前的PC值。</p><p> ?。?)設(shè)計(jì)指令系統(tǒng)時(shí)首要考慮的是指令要滿足功
30、能的需求。這個(gè)指令系統(tǒng)還包括PUSH、POP、以上指令包括運(yùn)算指令、轉(zhuǎn)移指令和存儲(chǔ)指令3類。這三類指令根據(jù)</p><p><b> 、進(jìn)行分類:</b></p><p><b> 為0時(shí)運(yùn)算指令;</b></p><p> 、為10時(shí)轉(zhuǎn)移指令;</p><p> 、為11時(shí)存儲(chǔ)指令。<
31、;/p><p> ?。?)考慮指令譯碼方便,減少硬件資源的消耗:</p><p> ?、偎阈g(shù)邏輯指令的—對(duì)應(yīng)運(yùn)算器ALU的3位運(yùn)算操作碼</p><p> ②當(dāng)=1時(shí),本指令中對(duì)DR的寫(xiě)操作</p><p> ③當(dāng)=1時(shí),本指令影響標(biāo)志位Z</p><p> ④當(dāng)=1時(shí),本指令影響標(biāo)志位C</p>&l
32、t;p> ?、軳OP指令實(shí)際上是一條“MOV ,”指令,只是不改變目的寄存器的內(nèi)容。</p><p> ?。ǘ┰O(shè)計(jì)指令流程;</p><p> 1、時(shí)序部件(電路)</p><p><b> (1)概述 </b></p><p> CPU工作的關(guān)鍵部件,產(chǎn)生計(jì)算機(jī)執(zhí)行機(jī)器指令所需的時(shí)序信號(hào)。計(jì)算機(jī)的工作過(guò)
33、程:一個(gè)指令周期接一個(gè)指令周期;在一個(gè)指令周期內(nèi)是一個(gè)機(jī)器周期接一個(gè)機(jī)器周期;在一個(gè)機(jī)器周期內(nèi)是一個(gè)節(jié)拍接一個(gè)節(jié)拍;在一個(gè)節(jié)拍內(nèi)產(chǎn)生哪些微操作信號(hào)取決于指令操作流程。伴隨著指令的執(zhí)行,計(jì)算機(jī)內(nèi)部有兩股信息在流動(dòng):一股是數(shù)據(jù)流,流過(guò)不同的部件完成不同處理;一股是控制信號(hào)流,控制數(shù)據(jù)從何處流出、經(jīng)過(guò)何地(運(yùn)算處理部件)、流往何處,微控制信號(hào)的產(chǎn)生由指令操作流程規(guī)定(操作碼),控制信號(hào)有效狀態(tài)的先后順序由節(jié)拍控制。</p>&l
34、t;p><b> ?。?)機(jī)器周期</b></p><p> 目標(biāo):一個(gè)機(jī)器周期執(zhí)行一條單字指令。</p><p> 如:ADD DR,SR</p><p> 執(zhí)行過(guò)程:1)取指;2)譯碼分析;3)執(zhí)行(運(yùn)算);4)寫(xiě)結(jié)果。</p><p> 可合并為三個(gè)階段:1)取指;2)分析、執(zhí)行;3)寫(xiě)結(jié)果(存儲(chǔ)
35、器、寄存器)</p><p><b> ?。?)節(jié)拍</b></p><p> 三個(gè)階段(取指、分析執(zhí)行、寫(xiě)結(jié)果)對(duì)應(yīng)三個(gè)節(jié)拍。</p><p> t1:取指—t1上升沿MADDR?PC,t2上升沿指令送IR;PC+1(temp)</p><p> t2:譯碼分析、運(yùn)算處理(Z、C—TEMP);</p>
36、<p> t3:存儲(chǔ)器、寄存器讀寫(xiě),下降沿寫(xiě)寄存器,改變C、Z、PC等。</p><p> 1、ADD DR,SR</p><p> t1 t2 t3</p><p> Madd<=pc Result<=DR+SR</p><p> R/W<=1 Z_T
37、EMP PC<=pc_t</p><p> Dread<=ob C_TEMP DR<=Result</p><p> IR<=Dread Z<=Z_TEMP</p><p> PC_t<=PC+1 C<=C_TEMP</p>
38、<p><b> 2、INC DR</b></p><p> t1 t2 t3</p><p> Madd<=pc Result<=DR+1</p><p> R/W<=1 Z_TEMP PC<=pc_t</p><p>
39、; Dread<=ob C_TEMP DR<=Result</p><p> IR<=Dread Z<=Z_TEMP</p><p> PC_t<=PC+1 C<=C_TEMP</p><p> 3、SUB DR,SR</p><p>
40、 t1 t2 t3</p><p> Madd<=pc Result<=DR-SR</p><p> R/W<=1 Z_TEMP PC<=pc_t</p><p> Dread<=ob C_TEMP DR<=Result</p><
41、p> IR<=Dread Z<=Z_TEMP</p><p> PC_t<=PC+1 C<=C_TEMP</p><p><b> 4、DEC DR</b></p><p> t1 t2 t3</p>
42、;<p> Madd<=pc Result<=DR-1</p><p> R/W<=1 Z_TEMP PC<=pc_t</p><p> Dread<=ob C_TEMP DR<=Result</p><p> IR<=Dread Z
43、<=Z_TEMP</p><p> PC_t<=PC+1 C<=C_TEMP</p><p> 5、AND DR,SR</p><p> t1 t2 t3</p><p> Madd<=pc Result<=DR and SR</p>
44、;<p> R/W<=1 Z_TEMP PC<=pc_t</p><p> Dread<=ob DR<=Result</p><p> IR<=Dread Z<=Z_TEMP</p><p> PC_t<=PC+1
45、 </p><p> 6、OR DR,SR</p><p> t1 t2 t3</p><p> Madd<=pc Result<=DR or SR</p><p> R/W<=1 Z_TEMP PC<=pc_t</p>
46、;<p> Dread<=ob DR<=Result</p><p> IR<=Dread Z<=Z_TEMP</p><p> PC_t<=PC+1 </p><p><b> 7、NOT DR&
47、lt;/b></p><p> t1 t2 t3</p><p> Madd<=pc Result<=not DR</p><p> R/W<=1 Z_TEMP PC<=pc_t</p><p> Dread<=ob DR&l
48、t;=Result</p><p> IR<=Dread Z<=Z_TEMP</p><p> PC_t<=PC+1</p><p> 8、MOV DR,SR</p><p> t1 t2 t3</p><p> Madd<=pc
49、 Result<= SR</p><p> R/W<=1 PC<=pc_t</p><p> Dread<=ob DR<=Result</p><p> IR<=Dread </p><p
50、> PC_t<=PC+1</p><p> 9、JMP ADR</p><p> t1 t2 t3</p><p> Madd<=pc Madd<= PC_t R/W=1</p><p> R/W<=1 Dread<=ob</p&
51、gt;<p> Dread<=ob PC<=Dread</p><p> IR<=Dread </p><p> PC_t<=PC+1</p><p> 10、JNC ADR</p><p> t1
52、 t2 t3</p><p> Madd<=pc generate if c_z_j_f=1</p><p> R/W<=1 c_z_j_f then PC<=sjmp_a</p><p> Dread<=ob sjmp_a else PC<=PC_t</p><p>
53、 IR<=Dread </p><p> PC_t<=PC+1</p><p> 11、JNZ ADR</p><p> t1 t2 t3</p><p> Madd<=pc generate if c_z_j_f=
54、1</p><p> R/W<=1 c_z_j_f then PC<=sjmp_a</p><p> Dread<=ob sjmp_a else PC<=PC_t</p><p> IR<=Dread </p><p> PC_t
55、<=PC+1</p><p> 12、MVRD DR,DATA</p><p> t1 t2 t3</p><p> Madd<=pc Madd<= PC_t R/W=1 </p><p> R/W<=1 Dread<=ob</p>
56、<p> Dread<=ob DR<=Dread</p><p> IR<=Dread PC<=PC+2 </p><p> PC_t<=PC+1</p><p> 13、LRD DR,SR</p><p> t1 t2
57、 t3</p><p> Madd<=pc Madd<= SR R/W=1 </p><p> R/W<=1 Dread<=ob</p><p> Dread<=ob DR<=Dread</p><p> IR&
58、lt;=Dread PC<=PC_t </p><p> PC_t<=PC+1</p><p> 14、STR SR,DR</p><p> t1 t2 t3</p><p> Madd<=pc Madd<= DR R/W=0 </
59、p><p> R/W<=1 ob<=SR</p><p> Dread<=ob </p><p> IR<=Dread PC<=PC_t </p><p> PC_t<=PC+1<
60、/p><p><b> 15、NOP</b></p><p> t1 t2 t3</p><p> Madd<=pc </p><p> R/W<=1 </p><p
61、> Dread<=ob </p><p> IR<=Dread PC<=PC_t </p><p> PC_t<=PC+1</p><p><b> 說(shuō)明:</b></p><p> Mem_Ad
62、dr是存儲(chǔ)器地址總線。</p><p> Ob是存儲(chǔ)器數(shù)據(jù)總線。</p><p> We是存儲(chǔ)器讀寫(xiě)信號(hào),為0時(shí)寫(xiě)存儲(chǔ)器,為1時(shí)讀存儲(chǔ)器。</p><p> Z_tmp是運(yùn)算產(chǎn)生的結(jié)果為0的標(biāo)志,z_out是本條指令執(zhí)行完成后的結(jié)果為0的標(biāo)志。</p><p> C_tem是運(yùn)算產(chǎn)生的進(jìn)位標(biāo)志,c_out是本條指令執(zhí)行完成后的進(jìn)位標(biāo)志
63、。</p><p><b> IR是指令寄存器。</b></p><p> C_z_j_flag是條件轉(zhuǎn)移指令“JNC ADR”或者“JNZ ADR”產(chǎn)生的條件轉(zhuǎn)移指令</p><p> Sjmp_addr是條件轉(zhuǎn)移指令“JNC ADR”或者“JNZ ADR”產(chǎn)生的條件轉(zhuǎn)移地址。</p><p> Result是
64、運(yùn)算器產(chǎn)生的運(yùn)算結(jié)果。</p><p> (三)CPU結(jié)構(gòu)設(shè)計(jì)</p><p> 一條指令需要3拍時(shí)間 </p><p> ?。?)t1:取指。t1上升沿MADDR PC,t2上升沿指令送IR;PC+1(temp)</p><p> ?。?)t2:譯碼分析、運(yùn)算處理(Z、C—TEMP);</p><p>
65、 (3)t3:存儲(chǔ)器、寄存器讀寫(xiě),下降沿寫(xiě)寄存器,改變C、Z、PC等。</p><p> 三周期指令:包括所有的算術(shù)邏輯指令:ADD,SUB,DEC,INC,CMP,AND,OR,XOR,TEST,SHL,SHR,SAR。除了絕對(duì)轉(zhuǎn)移指令JMPA外的所有控制轉(zhuǎn)移指令:JR,JRC,JRNC,JRZ,JRNZ。一條數(shù)據(jù)傳送指令:MOV。這些指令只需三個(gè)周期就可以完成,其中,前兩個(gè)周期用于取指。這些指令都可以用操作
66、碼前兩位都是00,所以很容易和其它指令區(qū)別。見(jiàn)下圖:</p><p><b> 三周期指令時(shí)序圖</b></p><p> 2.簡(jiǎn)單CPU結(jié)構(gòu):</p><p> 無(wú)流水、無(wú)Cache;主要部件有:運(yùn)算單元ALU;通用寄存器組;控制器(譯碼);取指操作(時(shí)序電路);存儲(chǔ)器操作。</p><p> CPU由5部分組
67、成:取指部分instru_fetch、指令譯碼部分decoder_unit、執(zhí)行部分exe_unit、存儲(chǔ)器部分memory_unit、和通用寄存器組regfile。另外,還需設(shè)計(jì)一個(gè)程序包exe_cpu_components,將各底層設(shè)計(jì)實(shí)體作為元件存儲(chǔ),供各設(shè)計(jì)實(shí)體使用。頂層設(shè)計(jì)實(shí)體exe_cpu完成CPU 的5個(gè)組成部分的連接。</p><p><b> 3、整體結(jié)構(gòu)設(shè)計(jì)</b>&l
68、t;/p><p> 我們?cè)谠O(shè)計(jì)整體結(jié)構(gòu)時(shí),依據(jù)的是各指令的數(shù)據(jù)通路。然后采用自頂向下,逐步分解細(xì)化的方法進(jìn)行設(shè)計(jì)。先整體模塊,后局部模塊。</p><p><b> CPU整體結(jié)構(gòu)</b></p><p> 串行指令CPU整體結(jié)構(gòu)圖</p><p> 4、 各分模塊結(jié)構(gòu)設(shè)計(jì)</p><p>&
69、lt;b> 控制器結(jié)構(gòu)</b></p><p> 串行指令CPU控制器結(jié)構(gòu)圖</p><p><b> 運(yùn)算器結(jié)構(gòu)</b></p><p> 串行指令CPU運(yùn)算器結(jié)構(gòu)圖</p><p> ?。ㄋ模〤PU設(shè)計(jì)實(shí)現(xiàn)</p><p> 1、通用寄存器組regfile</
70、p><p> 通用寄存器組內(nèi)包含4個(gè)16位寄存器。這是一個(gè)具有寫(xiě)入端口,2個(gè)讀出端口的通用寄存器組。寫(xiě)入端口將指令執(zhí)行后得到的目的寄存器的值在的下降沿寫(xiě)入目的寄存器中。只有具有寫(xiě)目的寄存器功能的指令執(zhí)行結(jié)束時(shí)才寫(xiě)目的寄存器。有些指令,如JMP指令等執(zhí)行結(jié)束后不會(huì)改變通用寄存器組的值。通用寄存器組的2個(gè)讀出端口,一個(gè)是目的寄存器讀出端口,一個(gè)是源寄存器讀出端口,從這2個(gè)端口讀出的內(nèi)容供執(zhí)行部分exe_unit和存儲(chǔ)器
71、部分memory_unit使用。</p><p> 通用寄存組內(nèi)還有2個(gè)標(biāo)志位:z_out和c_out,在的下降沿根據(jù)指令執(zhí)行的結(jié)果改變或者不改變它們的值。這2個(gè)標(biāo)志位的值送執(zhí)行部分exe_unit使用。</p><p> 通用寄存器組各引腳結(jié)構(gòu)如下圖:</p><p><b> 圖regfile</b></p><p
72、> 通用寄存器組是通過(guò)4個(gè)寄存器、2個(gè)2-4譯碼器和1個(gè)4-1選擇器構(gòu)成,其各個(gè)部分連接關(guān)系如下圖所示:</p><p> 圖regfile組成</p><p> 通用寄存器組部分regifile源代碼:</p><p><b> 寄存器reg</b></p><p> regfile的引腳如下圖所示:&
73、lt;/p><p><b> 圖regfile</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity reg is port</p><p> (reset: instd_logi
74、c;</p><p> d_input: instd_logic_vector(15 downto 0);</p><p> clk:instd_logic;</p><p> write: instd_logic;</p><p> sel: instd_logic;</p><p>
75、q_output: outstd_logic_vector(15 downto 0)</p><p><b> );</b></p><p><b> end reg;</b></p><p> architecture a OF reg is</p><p><b> beg
76、in</b></p><p> process(reset,clk)</p><p><b> begin</b></p><p> IF reset = '0' then</p><p> q_output <= x"0000"; elsif clk&
77、#39;event and clk = '0' then --時(shí)鐘下降沿觸發(fā)</p><p> if sel ='1' and write = '1' then</p><p> q_output <= d_input;</p><p><b> end if;</b></p&
78、gt;<p><b> end if;</b></p><p> end process;</p><p><b> end a;</b></p><p> 2-4譯碼器decoder_2_to_4</p><p> 2-4譯碼器的引腳如下圖所示:</p>&l
79、t;p><b> 圖2-4譯碼器</b></p><p> Library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> entity decoder_2_to_4 is</p><p><b> port (</b>&l
80、t;/p><p> sel: in std_logic_vector(1 downto 0);</p><p> sel00: out std_logic;</p><p> sel01: out std_logic;</p><p> sel02: out std_logic;</p><p> sel03:
81、 out std_logic );</p><p> end decoder_2_to_4;</p><p> architecture Behavioral of decoder_2_to_4 is</p><p><b> begin</b></p><p> sel00 <= (not sel(1))
82、 and (not sel(0));</p><p> sel01 <= (not sel(1)) and sel(0) ;</p><p> sel02 <= sel(1) and (not sel(0)) ;</p><p> sel03 <= sel(1) and sel(0) ;</p><p> end B
83、ehavioral;</p><p> 4選1選擇器mux_4_to_1</p><p> 4-1 選擇器的引腳如下圖所示:</p><p><b> 圖4-1選擇器</b></p><p> library ieee;</p><p> use ieee.std_logic_1164.
84、all;</p><p> entity mux_4_to_1 is</p><p><b> port (</b></p><p><b> input0,</b></p><p><b> input1,</b></p><p><b&
85、gt; input2,</b></p><p> input3: in std_logic_vector(15 downto 0);</p><p> sel: in std_logic_vector(1 downto 0);</p><p> out_put: out std_logic_vector(15 downto 0))
86、;</p><p> end mux_4_to_1;</p><p> architecture Behavioral of mux_4_to_1 is</p><p><b> begin</b></p><p> mux: process(sel, input0, input1, input2, input3
87、)</p><p><b> begin</b></p><p> case sel is </p><p> when "00" => </p><p> out_put <= input0;</p><p> when "01" =
88、> </p><p> out_put <= input1;</p><p> when "10" => </p><p> out_put <= Input2;</p><p> when "11" => </p><p> out_pu
89、t <= Input3;</p><p><b> end case;</b></p><p> end process;</p><p> end Behavioral;</p><p> 通用寄存器組regfile</p><p> library ieee;</p>
90、;<p> use ieee.std_logic_1164.all;</p><p> use work.exp_cpu_components.all;</p><p> entity regfile is</p><p> port ( DR: in std_logic_vector(1 downto 0); --源寄存器號(hào)<
91、/p><p> SR: in std_logic_vector(1 downto 0); --目的寄存器號(hào) </p><p> reset: in std_logic;</p><p> write: in std_logic;--寫(xiě)寄存器信號(hào) </p><p>
92、 clk: in std_logic;</p><p> d_input: in std_logic_vector(15 downto 0); --寫(xiě)寄存器的數(shù)據(jù)</p><p> change_z: in std_logic;--如果為1,則重新設(shè)置z標(biāo)志</p><p> change_c: in std_logic;</p>
93、<p> c_in: in std_logic;</p><p> z_in: in std_logic;</p><p> R0,R1,R2,R3: out std_logic_vector(15 downto 0);</p><p> output_DR: out std_logic_vector(15 downto 0
94、); </p><p> output_SR: out std_logic_vector(15 downto 0);</p><p> c_out: out std_logic;</p><p> z_out: out std_logic );</p><p> end regfile;<
95、;/p><p> architecture struct of regfile is</p><p> signal reg00, reg01, reg02,reg03: std_logic_vector(15 downto 0);</p><p> signal sel00, sel01, sel02, sel03: std_logic;</p>
96、<p><b> begin</b></p><p> R0 <= reg00;</p><p> R1 <= reg01;</p><p> R2 <= reg02;</p><p> R3 <= reg03;</p><p> z_c_proc:
97、process(reset,clk) --對(duì)指令執(zhí)行結(jié)束后的z、c標(biāo)志進(jìn)行處理</p><p><b> begin</b></p><p> if reset = '0' then</p><p> z_out <= '0';</p><p> c_out <= &
98、#39;0';</p><p> elsif clk'event and clk = '0' then if change_z = '1' then</p><p> z_out <= z_in;</p><p><b> end if;</b></p><p&g
99、t; if change_c = '1' then</p><p> c_out <= c_in;</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p>&
100、lt;p> Areg00: reg port map(--寄存器R0</p><p> reset=> reset,</p><p> d_input=> d_input,</p><p> clk=> clk,</p><p> write=> write,</p>
101、<p> sel=> sel00,</p><p> q_output=> reg00);</p><p> Areg01: reg port map(--寄存器R1</p><p> reset=> reset,</p><p> d_input=> d_input,</p
102、><p> clk=> clk,</p><p> write=> write,</p><p> sel => sel01,</p><p> q_output=> reg01);</p><p> Areg02: reg port map(--寄存器R2<
103、/p><p> reset=> reset,</p><p> d_input=> d_input,</p><p> clk=> clk,</p><p> write=> write,</p><p> sel=> sel02,</p>&
104、lt;p> q_output=> reg02);</p><p> Areg03: reg port map(--寄存器R3</p><p> reset=> reset,</p><p> d_input=> d_input,</p><p> clk=> clk,<
105、/p><p> write=> write,</p><p> sel=> sel03,</p><p> q_output=> reg03);</p><p> des_decoder: decoder_2_to_4 port map(--2 — 4譯碼器</p><p> se
106、l => DR,</p><p> sel00 => sel00,</p><p> sel01 => sel01,</p><p> sel02 => sel02,</p><p> sel03 => sel03 );</p><p> muxB: mux_4_to_
107、1 port map(--目的寄存器讀出4選1選擇器</p><p> input0 => reg00,</p><p> input1 => reg01,</p><p> input2 => reg02,</p><p> input3 => reg03,</p><p&g
108、t; sel => DR,</p><p> out_put => output_DR);</p><p> muxA: mux_4_to_1 PORT MAP(--源寄存器讀出4選1選擇器</p><p> input0 => reg00,</p><p> input1 => reg0
109、1,</p><p> input2 => reg02,</p><p> input3 => reg03,</p><p> sel => SR,</p><p> out_put => output_SR);</p><p> end struct;</p>&
110、lt;p> 2、取指部分instru_fetch</p><p> 取指部分完成4項(xiàng)工作:</p><p> (1)產(chǎn)生時(shí)鐘信號(hào)、和,供實(shí)驗(yàn)CPU各部分使用</p><p> ?。?)在復(fù)位信號(hào)reset為低時(shí)將PC復(fù)位為0;在一條指令執(zhí)行結(jié)束后,根據(jù)指令執(zhí)行的結(jié)果在的下降沿改變PC的值。</p><p> ?。?)將從存儲(chǔ)器讀出
111、的指令的堆一個(gè)字在的上升沿送至指令寄存器IR中。</p><p> ?。?)計(jì)算PC+1的值pc_inc,為雙字指令取第二個(gè)指令字做準(zhǔn)備。</p><p> 取指部分instru_fetch源代碼</p><p> 取指部分的各引腳關(guān)系如圖:</p><p> 圖instru_fetch</p><p> li
112、brary ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_arith.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> use work.exp_cpu_components.
113、all;</p><p> entity instru_fetch is</p><p> port(reset,clk:in std_logic;</p><p> data_read: in std_logic_vector(15 downto 0); --存儲(chǔ)器讀出的數(shù)</p><p> lj_instruct: in st
114、d_logic; --長(zhǎng)轉(zhuǎn)移指令</p><p> DW_intruct:in std_logic;</p><p> c_z_j_flag: in std_logic; --為1時(shí)進(jìn)行條件轉(zhuǎn)移</p><p> sjmp_addr: in std_logic_vector(15 downto 0); --條件轉(zhuǎn)移指令的轉(zhuǎn)移地址</p>&l
115、t;p> t1,t2,t3: buffer std_logic;</p><p> pc: buffer std_logic_vector(15 downto 0);</p><p> pc_inc: buffer std_logic_vector(15 downto 0);</p><p> IR: out std_logic_v
116、ector(15 downto 0));</p><p> end instru_fetch;</p><p> architecture behav of instru_fetch is signal start:std_logic;</p><p><b> begin</b></p><p> IR_p
117、oc: process(reset,t2)</p><p><b> begin</b></p><p> if reset = '0' then</p><p> IR <= x"7000"; --nop指令</p><p> elsif t2'event a
118、nd t2 = '1' then</p><p> IR <= data_read;</p><p><b> end if;</b></p><p> end process;</p><p> process(reset,clk)</p><p><b>
119、; begin</b></p><p> if reset = '0' then</p><p> start <= '1';</p><p><b> else</b></p><p> if clk'event and clk ='0'
120、; then start <= '0';</p><p><b> end if;</b></p><p><b> end if;</b></p><p> end process;</p><p> process(reset,clk)</p>
121、<p><b> begin</b></p><p> if reset = '0' then</p><p> t1 <= '0';</p><p> t2 <= '0';</p><p> t3 <= '0';&l
122、t;/p><p> elsif clk'event and clk = '1' then t1 <= start or t3;</p><p><b> t2 <= t1;</b></p><p><b> t3 <= t2;</b></p><p>&
123、lt;b> end if;</b></p><p> end process;</p><p> pc_inc <= pc + '1';--為取雙字指令的第2個(gè)字或者計(jì)算相對(duì)轉(zhuǎn)移地址做準(zhǔn)備</p><p> PC_proc:process(reset,t3)</p><p><b&g
124、t; begin</b></p><p> if reset = '0' then</p><p> pc <= x"0000";</p><p> elsif t3'event and t3 = '0' then</p><p> if lj_instr
125、uct = '1' then</p><p> pc <= data_read;</p><p> elsif c_z_j_flag ='1' then</p><p> pc <= sjmp_addr;</p><p> elsif DW_intruct = '1' the
126、n</p><p> pc <= pc + "10";</p><p><b> else</b></p><p> pc <= pc_inc;</p><p><b> end if;</b></p><p><b> e
127、nd if;</b></p><p> end process;</p><p> end behav;</p><p> 指令譯碼部分decoder_unit</p><p> 指令譯碼部分根據(jù)指令寄存器IR的值產(chǎn)生實(shí)驗(yàn)CPU所需要的各種控制信號(hào)和其他信號(hào):</p><p> SR:源寄存器號(hào)(
128、編址)</p><p> DR:目的寄存器號(hào)(編址)</p><p> Op_code:控制ALU進(jìn)行8種運(yùn)算操作的3位編碼</p><p> Zj_instruct:為1表示本條指令是條“JNZ ADR”指令</p><p> Cj_instruct: 為1表示本條指令是條“JNC ADR”指令</p><p&g
129、t; Lj_instruct: 為1表示本條指令是條“JMP ADR”指令</p><p> DRWr:為1表示在的下降沿將本條指令的執(zhí)行結(jié)果寫(xiě)入目的寄存器</p><p> Mem_Write:為1表示本條指令有存儲(chǔ)器寫(xiě)操作,存儲(chǔ)器的地址是源寄存器的內(nèi)容。</p><p> DW_instruct:為1表示本條指令是雙字指令</p><
130、p> Change_z:為1表示本條指令可能改變Z(結(jié)果為0)標(biāo)志</p><p> Change_c:為1表示本條指令可能改變C(進(jìn)位)標(biāo)志</p><p> Sel_memdata:為1表四本條指令寫(xiě)入目的寄存器的值來(lái)自讀寄存器</p><p> R_sjmp_addr:計(jì)算條件轉(zhuǎn)移地址所需要的16位相對(duì)地址。它是由條件轉(zhuǎn)移指令中的8位相對(duì)地址經(jīng)過(guò)
131、符號(hào)擴(kuò)展生成的。</p><p> 指令譯碼器在傳統(tǒng)上屬于控制器部分,是控制器的核心。所謂組合邏輯控制器是指指令譯碼器是有組合邏輯構(gòu)成的,所謂微程序控制器是指指令譯碼器主要由控制存儲(chǔ)器ROM和少許組合邏輯構(gòu)成的。</p><p> 指令譯碼部分decoder_unit源代碼:</p><p> decoder_unit的引腳關(guān)系如下圖:</p>
132、<p> library ieee;</p><p> use ieee.std_logic_1164.all;</p><p> use ieee.std_logic_arith.all;</p><p> use ieee.std_logic_unsigned.all;</p><p> use work.exp_cp
133、u_components.all;</p><p> entity decoder_unit is</p><p> port (IR: in std_logic_vector(15 downto 0);</p><p> SR: out std_logic_vector(1 downto 0);</p><p> D
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 16位cpu綜合設(shè)計(jì) 計(jì)算機(jī)組成原理課程設(shè)計(jì)
- 計(jì)算機(jī)組成原理課程設(shè)計(jì)---簡(jiǎn)單計(jì)算機(jī)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 計(jì)算機(jī)組成原理課程設(shè)計(jì)---簡(jiǎn)單計(jì)算機(jī)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 計(jì)算機(jī)組成原理課程設(shè)計(jì)--簡(jiǎn)單計(jì)算機(jī)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 計(jì)算機(jī)系統(tǒng)綜合課程設(shè)計(jì)
- 16位精簡(jiǎn)指令cpu設(shè)計(jì)—計(jì)算機(jī)組成原理課程設(shè)計(jì)
- 課程設(shè)計(jì)--微型計(jì)算機(jī)系統(tǒng)設(shè)計(jì)
- 計(jì)算機(jī)系統(tǒng)綜合課程設(shè)計(jì)doc
- 計(jì)算機(jī)組成與系統(tǒng)結(jié)構(gòu)課程設(shè)計(jì)--單周期32位cpu的設(shè)計(jì)
- 計(jì)算機(jī)系統(tǒng)算法設(shè)計(jì)與分析報(bào)告課程設(shè)計(jì)
- 計(jì)算機(jī)系統(tǒng)綜合課程設(shè)計(jì)2ppt
- 計(jì)算機(jī)系統(tǒng)綜合課程設(shè)計(jì)報(bào)告模版doc
- 計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)課程介紹
- 計(jì)算機(jī)組成原理課程設(shè)計(jì)--簡(jiǎn)單計(jì)算機(jī)的設(shè)計(jì)
- 計(jì)算機(jī)系課程設(shè)計(jì)--一個(gè)簡(jiǎn)單的文件系統(tǒng)的詳細(xì)設(shè)計(jì)
- 計(jì)算機(jī)硬件課程設(shè)計(jì)報(bào)告---簡(jiǎn)單計(jì)算機(jī)的設(shè)計(jì)
- 計(jì)算機(jī)組成原理課程設(shè)計(jì)---簡(jiǎn)單計(jì)算機(jī)的設(shè)計(jì)
- 計(jì)算機(jī)系統(tǒng)算法設(shè)計(jì)與分析報(bào)告課程設(shè)計(jì) _0
- 計(jì)算機(jī)組成原理課程設(shè)計(jì)報(bào)告--簡(jiǎn)單計(jì)算機(jī)
- 課程設(shè)計(jì)-基于微程序控制器的簡(jiǎn)單計(jì)算機(jī)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
評(píng)論
0/150
提交評(píng)論