




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、計(jì)算機(jī)組成原理課程設(shè)計(jì)報(bào)告5級流水無cache CPU實(shí)驗(yàn)1.1 實(shí)驗(yàn)內(nèi)容:無cache流水CPU的分析與改造1. 理解無cache流水CPU的工作原理,明確系統(tǒng)總體結(jié)構(gòu)和數(shù)據(jù)通路圖,分析解決各種相關(guān)用到的主要信號(hào),以及詳細(xì)分析各流水段的功能和實(shí)現(xiàn)。2. 將16位的指令系統(tǒng)改為8位,設(shè)計(jì)新的指令系統(tǒng),并修改相應(yīng)的數(shù)據(jù)通路。3. 修改規(guī)則文件(cpu.txt),并編寫測試程序驗(yàn)證系統(tǒng)改造的正確性。1.2 總體基本信息1. 深刻理解無cache流水cpu的工作原理。在詳細(xì)分析了各流水段的功能實(shí)現(xiàn)、3種相關(guān)的產(chǎn)生原因和解決方法的基礎(chǔ)上,完成了以下后續(xù)工作。2. 修改指令系統(tǒng)。具體包括:a) 16位指
2、令改為8位,重新編寫了指令OP碼。b) 新增了MOVI指令。由于原指令系統(tǒng)沒有將立即數(shù)存進(jìn)指定寄存器的指令,因此此處新增一條MOVI指令。指令的匯編語句為MOVI DR, IMM其中DR為目的寄存器,IMM為立即數(shù)。因?yàn)橹噶铋L度為8位,OP和DR共占了6位,因此IMM的大小不大于3(即二進(jìn)制“00”至“11”)。c) 修改及刪除了部分指令。此處詳見5.1。3. 修改系統(tǒng)控制信號(hào)。在保持原有系統(tǒng)邏輯功能基本不變的情況下,修改各個(gè)模塊里控制信號(hào)位數(shù)以及模塊接口信號(hào)位數(shù)以和新的指令系統(tǒng)兼容。4. 增加內(nèi)存模塊。使用vhdl編寫了一個(gè)ram模塊,根據(jù)讀寫信號(hào)來選擇讀寫功能。reset時(shí)將事先寫好的二進(jìn)
3、制形式程序?qū)戇M(jìn)內(nèi)存。5. 擴(kuò)展了常量定義文件。在常量定義文件unitpack.vhd中,具體地:a) 新增了ALU功能選擇信號(hào)常量aluMOVI。b) 新增了寄存器編號(hào)常量R0、R1、R2和R3。c) 新增了ram類型。6. 使用Quartus II進(jìn)行功能仿真并debug。7. 使用bdf構(gòu)造頂層實(shí)體cpum。由于新增了內(nèi)存模塊,而原系統(tǒng)是使用vhdl編寫的,為了方便對接,我們使用bdf的形式將無cache流水線cpu和內(nèi)存模塊連接起來構(gòu)造頂層實(shí)體cpum,“m”的含義是“memory”,即帶內(nèi)存模塊的無cache流水線cpu。8. 重畫數(shù)據(jù)通路圖。我們使用了Microsoft Visio軟
4、件在原有的系統(tǒng)總結(jié)結(jié)構(gòu)圖的基礎(chǔ)上修改并新增了部分模塊,詳見2。2、系統(tǒng)總體結(jié)構(gòu)及數(shù)據(jù)通路圖總體結(jié)構(gòu)圖:數(shù)據(jù)通路圖:整個(gè)CPU由以下幾個(gè)模塊組成:l 取指模塊(IF):給出內(nèi)存地址,讀取指令并送入指令寄存器,為下一級準(zhǔn)備數(shù)據(jù)。由于PC控制模塊處于取指模塊中,因此控制相關(guān)的檢測也置于取指模塊。l 譯碼模塊(ID):讀取寄存器值和指令譯碼。我們采取一次譯碼,逐級傳遞的方式,譯出后幾級流水所需的控制信號(hào)和數(shù)據(jù)(如立即數(shù)等),在每次時(shí)鐘上升沿到來時(shí)送入下一級。實(shí)際上,結(jié)構(gòu)相關(guān)、控制相關(guān)、數(shù)據(jù)相關(guān)的檢測都可歸入譯碼部分。考慮到“相關(guān)檢測”涉及到的信號(hào)分屬不同階段以及整體結(jié)構(gòu)的清晰性,我們將“相關(guān)檢測”獨(dú)立
5、出來。l 執(zhí)行模塊(Ex):完成算術(shù)邏輯運(yùn)算、計(jì)算有效地址和提供數(shù)據(jù)通道。l 訪存模塊(Ma):選擇地址線的數(shù)據(jù)來源和數(shù)據(jù)線的流向。訪存和取指在功能上是獨(dú)立的,但CPU對外只有一條地址線和數(shù)據(jù)線的事實(shí)決定了訪存和取指是相互聯(lián)系的。當(dāng)執(zhí)行LOAD/STORE指令時(shí),地址線由ALU送入“訪存段”的值提供;取指時(shí),則由PC提供。當(dāng)寫內(nèi)存時(shí),CPU內(nèi)部數(shù)據(jù)送數(shù)據(jù)線;當(dāng)需要讀內(nèi)存時(shí),CPU往數(shù)據(jù)線送高阻。l 回寫模塊(Wb):選擇回寫數(shù)據(jù)源和根據(jù)寫使能信號(hào)wRegEn將數(shù)據(jù)回寫到寄存器堆;l HazardDetectUnit模塊:檢測結(jié)構(gòu)相關(guān);l ForwardingUnit模塊:檢測數(shù)據(jù)相關(guān)。l 內(nèi)存
6、模塊memory,根據(jù)訪存地址mem_adr和讀寫信號(hào)wr來控制。3 解決各種相關(guān)用到的主要信號(hào)的分析3.1控制相關(guān) 控制相關(guān)是指因?yàn)槌绦虻膱?zhí)行方向可能改變而引起的相關(guān)。當(dāng)執(zhí)行跳轉(zhuǎn)指令時(shí),就會(huì)發(fā)生這種情況。除JR外,JRZ等條件跳轉(zhuǎn)需要根據(jù)當(dāng)前狀態(tài)位來決定是否跳轉(zhuǎn),而當(dāng)前狀態(tài)位是由前面最近的會(huì)影響狀態(tài)位的指令(如算術(shù)指令)決定。常規(guī)的也是比較簡單的做法是在碰到JRX之類的跳轉(zhuǎn)指令時(shí),延遲后邊流水線的進(jìn)入。但我們通過分析,認(rèn)為可以一點(diǎn)都不必延遲,通過旁路處理把控制相關(guān)轉(zhuǎn)為數(shù)據(jù)相關(guān)來處理。這樣處理,不必延遲,可以提高流水線的性能。按我們的方式解決控制相關(guān)需要做兩項(xiàng)工作:1) 通過旁路,提供狀態(tài)寄存
7、器的值和臨時(shí)狀態(tài)位的值,為判斷是否跳轉(zhuǎn)作準(zhǔn)備;2) 選擇PC更新的時(shí)機(jī)1旁路處理在每條指令譯碼時(shí),會(huì)產(chǎn)生一個(gè)信號(hào)setFlag,它決定了在執(zhí)行階段是否根據(jù)ALU計(jì)算結(jié)果改變狀態(tài)位。從下面的時(shí)序圖中可以發(fā)現(xiàn),只要我們在JRX指令譯碼時(shí)提供以下3個(gè)信號(hào)就可作出是否跳轉(zhuǎn)的決定:信號(hào)含義tFlagALU計(jì)算出的臨時(shí)狀態(tài)位,Flag狀態(tài)寄存器輸出,e_setFlag狀態(tài)寄存器寫使能表17 處理控制相關(guān)信號(hào)若e_setFlag要寫狀態(tài)寄存器,則說明前一條指令會(huì)影響狀態(tài)位,這時(shí)根據(jù)tFlag決定是否跳轉(zhuǎn);若e_setFlag要保持狀態(tài)寄存器,則說明前一條指令不會(huì)影響狀態(tài)位,這時(shí)根據(jù)Flag決定是否跳轉(zhuǎn)。涉及
8、到控制相關(guān)的關(guān)鍵信號(hào)是setFlag信號(hào),產(chǎn)生于譯碼模塊,作用于執(zhí)行模塊,即identity.vhdhe exentity.vhd文件中。如下圖所示。從上圖可看出,凡是涉及到數(shù)值計(jì)算和關(guān)系運(yùn)算的指令的低三位均為001,而不涉及的則為000。該信號(hào)傳到執(zhí)行模塊中用于判斷是否更新狀態(tài)寄存器。3.2 數(shù)據(jù)相關(guān)數(shù)據(jù)相關(guān)是指在執(zhí)行本條指令的過程中,如果用到的操作數(shù)是前面指令的執(zhí)行結(jié)果,則必須等待前面的指令執(zhí)行完成,并把結(jié)果寫回寄存器或主存之后,本條指令才能繼續(xù)執(zhí)行。此處采用設(shè)置專用數(shù)據(jù)通路來解決數(shù)據(jù)相關(guān)問題。但旁路技術(shù)并非一勞永逸。若前一指令為LOAD,而后一指令和它數(shù)據(jù)相關(guān),如下圖所示,當(dāng)下一指令的執(zhí)
9、行階段需要數(shù)據(jù)時(shí),上一指令尚未給出,這種情況是無法用旁路技術(shù)來解決的。相關(guān)的類型有三種:1.2.3.主要用到的關(guān)鍵信號(hào)是m_wRegEn和w_wRegEn,主要使用是在數(shù)據(jù)相關(guān)檢測模塊forwardingentity.vhd中,在identity.vhd、exentity.vhd、memaccessentity.vhd中均有使用。具體的使用方法如下。相關(guān)的檢測都置于“執(zhí)行階段”。信號(hào)wRegEn是寄存器寫使能,SA,SB是寄存器組A,B口選擇信號(hào)。信號(hào)前綴表示信號(hào)所處的階段。如e_SA表示處于執(zhí)行階段的SA。1相鄰指令數(shù)據(jù)相關(guān)的檢測 若m_wRegEn=1,則表示前一指令要回寫寄存器。此時(shí),若
10、e_SA或e_SB等于m_SA,則必然數(shù)據(jù)相關(guān),這是因?yàn)槲覀円?guī)定,若回寫寄存器,則寄存器A口選擇信號(hào)所指定的即為目的寄存器。否則無關(guān)。2 中間隔1條指令的兩指令數(shù)據(jù)相關(guān)的檢測 若w_wRegEn=1,則表示第一條指令要回寫寄存器。此時(shí),若e_SA或e_SB等于w_SA,則必然數(shù)據(jù)相關(guān)。否則無關(guān)。當(dāng)然,上述兩種情況可能會(huì)一同出現(xiàn)。這時(shí),我們就按情況1處理。因?yàn)榍闆r2可以理解為接連出現(xiàn)情況1。下圖為各個(gè)指令在譯碼時(shí)產(chǎn)生的wRegEn信號(hào),可以發(fā)現(xiàn)凡是會(huì)寫進(jìn)寄存器的指令,該信號(hào)值都為1。3.3 結(jié)構(gòu)相關(guān)由于在設(shè)計(jì)中不包含緩存,因此會(huì)有取指和訪存的沖突,即結(jié)構(gòu)相關(guān)。如下圖:關(guān)鍵信號(hào)是wrMem信號(hào),表
11、示是否讀寫內(nèi)存。具體出現(xiàn)在結(jié)構(gòu)相關(guān)沖突檢測與問題解決模塊Hazarddetectentity.vhd中,產(chǎn)生于譯碼模塊identity.vhd中。具體使用方法如下:1) 沖突檢測只有執(zhí)行訪存指令(LOAD/STORE)時(shí),才會(huì)出現(xiàn)沖突。因此,我們在譯碼時(shí)產(chǎn)生一個(gè)標(biāo)志是否訪存的信號(hào)wrMem。含義如下:wrMem意義00寫內(nèi)存(STORE)01讀內(nèi)存(LOAD)1不占用內(nèi)存 表16 wMEM控制信號(hào)通過檢查“訪存階段”的m_wrMem就可確定是否沖突。2)取指延后在每次取指時(shí),若有沖突,則往IR中寫入空指令(NOP),并保持PC不變,使取指延后一個(gè)節(jié)拍。4 各流水段功能和實(shí)現(xiàn)的詳細(xì)分析4.1取指
12、(IF)4.1.1 實(shí)現(xiàn)功能列表取指模塊實(shí)現(xiàn)的功能是:l 給定內(nèi)存地址,讀取內(nèi)存中的指令l 將指令送入指令寄存器,提供給下一級的譯碼模塊l 實(shí)現(xiàn)控制相關(guān)沖突檢測l 根據(jù)讀取到的指令是否為跳轉(zhuǎn)指令來更新PC4.1.2輸入、輸出信號(hào)分析主要輸入信號(hào):Z,C狀態(tài)寄存器tempZ,tempCALU計(jì)算出的臨時(shí)狀態(tài)位,用于相關(guān)沖突檢測e_setFlag狀態(tài)寄存器寫使能端,產(chǎn)生于譯碼時(shí)。決定是否在執(zhí)行階段根據(jù)ALU計(jì)算出來的結(jié)果改變狀態(tài)位PCStall決定是否保持PC不變,由結(jié)構(gòu)相關(guān)沖突檢測模塊產(chǎn)生IFFlush決定是否往指令寄存器IR里寫入空指令,來自結(jié)構(gòu)相關(guān)檢測模塊OuterDB內(nèi)存讀取過來的數(shù)據(jù)主要
13、輸出信號(hào):PC_addrPC作為內(nèi)存地址輸出,用于下一節(jié)拍的取指d_PCInc1PC + 1d_IR指令寄存器輸出 4.1.3功能實(shí)現(xiàn)邏輯通過分析控制信號(hào)我們可以大概了解到取指模塊的功能實(shí)現(xiàn)邏輯是如何的。廣義上來說,取指模塊包括結(jié)構(gòu)相關(guān)沖突檢測模塊,因?yàn)镻CStall信號(hào)(用來實(shí)現(xiàn)IF段對PC的更新)和IFFlush信號(hào)(對IR寫入空指令)就來自結(jié)構(gòu)相關(guān)沖突檢測模塊。結(jié)構(gòu)相關(guān)檢測模塊叫HazardDetectEntity,其模塊圖如下:其中輸入信號(hào)的含義是:m_wrMemwrMem在訪存階段的值w_rwMemwrMem在寫回階段的值d_IR指令寄存器通過檢測訪存階段的wrMem信號(hào)即可確定是否
14、發(fā)生了結(jié)構(gòu)沖突。每次取指后,若有沖突,則往IR中寫入空指令(NOP),并保持PC不變,使得取指延后一個(gè)節(jié)拍。除此之外,setFlag信號(hào)在此處的作用是,決定用狀態(tài)寄存器輸出Flag還是ALU計(jì)算出的臨時(shí)狀態(tài)位tFlag來判斷跳轉(zhuǎn)。4.2譯碼(ID)4.2.1 實(shí)現(xiàn)功能列表譯碼模塊實(shí)現(xiàn)的功能是:l 讀取指令寄存器中的指令l 對指令進(jìn)行譯碼,發(fā)送控制信號(hào)4.2.2輸入、輸出信號(hào)分析主要輸入信號(hào):d_IR從取指模塊來的指令d_PCInc1從取指模塊來的pc+1w_wbData寫回?cái)?shù)據(jù),從寫回模塊里來w_destReg要寫回的目標(biāo)寄存器w_wRegEn寄存器寫使能端主要輸出信號(hào):e_RAOut寄存器A
15、輸出值e_RBOut寄存器B輸出值e_IMM立即數(shù)輸出值e_ALUSrcALU輸入端選擇信號(hào)e_ALUOprALU運(yùn)算選擇信號(hào)e_SetFlag狀態(tài)寄存器寫使能信號(hào)e_wrMem訪存信號(hào)e_wRegEn寄存器寫使能信號(hào)e_destReg目標(biāo)寄存器e_MemToReg內(nèi)存寫入寄存器使能信號(hào)4.2.3功能實(shí)現(xiàn)邏輯譯碼模塊內(nèi)部寫好了根據(jù)不同的指令發(fā)送不同的控制信號(hào)的代碼,采取一次譯碼,逐級傳遞的方式,譯出后幾級流水所需的控制信號(hào)和數(shù)據(jù)(如立即數(shù))。在每次時(shí)鐘上升沿到來時(shí)送入下一級。實(shí)際上,結(jié)構(gòu)相關(guān)、控制相關(guān)、數(shù)據(jù)相關(guān)的檢測都可歸入譯碼部分。考慮到“相關(guān)檢測”涉及到的信號(hào)分屬不同階段以及整體結(jié)構(gòu)的清晰
16、性,作者將“相關(guān)檢測”獨(dú)立出來。4.3執(zhí)行(EX)4.3.1 實(shí)現(xiàn)功能列表執(zhí)行模塊實(shí)現(xiàn)的功能是:l 根據(jù)控制信號(hào)完成算術(shù)邏輯運(yùn)算l 根據(jù)控制信號(hào)計(jì)算有效地址l 提供數(shù)據(jù)通道,將上一級傳遞過來的控制信號(hào)傳到下一級4.3.2輸入、輸出信號(hào)分析主要輸入信號(hào):e_RAOut、e_RBOut、e_ALUSrc、e_ALUOpr、e_SetFlag、e_IMM、e_memToReg、 e_wRegEn、來自譯碼模塊的控制信號(hào)forwardA、forwardB來自數(shù)據(jù)相關(guān)沖突檢測模塊的輸出e_ALUOut上一個(gè)指令在執(zhí)行模塊產(chǎn)生的輸出,作為下一條指令在執(zhí)行模塊執(zhí)行的輸入信號(hào)之一主要輸出信號(hào): m_SA、m_
17、ALUOut、m_RBdata、i_tempZ、i_tempC、m_flag、m_wRegEn、m_memToReg、m_destReg、m_wrMem主要來自上一級模塊傳過來的控制信號(hào)4.3.3功能實(shí)現(xiàn)邏輯執(zhí)行模塊執(zhí)行的功能很簡單,和上個(gè)學(xué)期做的CPU綜合性實(shí)驗(yàn)類似,主要是一些ALU邏輯運(yùn)算和狀態(tài)寄存器的更新操作。在這里還有向下一模塊傳遞控制信號(hào)的作用。其中,forwardA和forwardB信號(hào)是來自數(shù)據(jù)相關(guān)沖突檢測模塊的信號(hào)。 模塊圖如下所示:作用是在發(fā)生讀后寫數(shù)據(jù)相關(guān)時(shí),直接將計(jì)算好了的結(jié)果在寫回目標(biāo)寄存器時(shí)也發(fā)往下一條指令的執(zhí)行模塊作為ALU的輸入之一。4.4訪存(MEM)4.4.1
18、 實(shí)現(xiàn)功能列表訪存模塊實(shí)現(xiàn)的功能是:l 根據(jù)地址線對內(nèi)存進(jìn)行讀操作或者寫操作4.4.2輸入、輸出信號(hào)分析主要輸入信號(hào):m_wrMem內(nèi)存讀寫控制信號(hào)m_ALUOut來自ALU的輸出結(jié)果m_RBdata要寫回的數(shù)據(jù)PC程序計(jì)數(shù)器的值主要輸出信號(hào):w_wrMem傳送到寫回模塊的內(nèi)存讀寫控制信號(hào)wr讀寫控制信號(hào)addr要讀取的內(nèi)存地址OuterDB既可作為輸入又可作為輸出,用于傳輸數(shù)據(jù)4.4.3功能實(shí)現(xiàn)邏輯訪存和取指在功能上是獨(dú)立的,但是因?yàn)镃PU對外只有一條地址線和數(shù)據(jù)線,因此訪存和取指在實(shí)際上是有聯(lián)系和沖突的。當(dāng)執(zhí)行Load/Store指令時(shí),地址線由ALU送入訪存段的值提供;取指時(shí),則由PC提
19、供。當(dāng)寫內(nèi)存時(shí),CPU內(nèi)部數(shù)據(jù)送往數(shù)據(jù)線。當(dāng)需要讀內(nèi)存時(shí),CPU往數(shù)據(jù)線送高阻。4.5寫回(WB)4.5.1 實(shí)現(xiàn)功能列表寫回模塊實(shí)現(xiàn)的功能是:l 選擇寫回?cái)?shù)據(jù)源(來自ALU的輸出還是來自內(nèi)存)l 根據(jù)寫使能信號(hào)wRegEn將數(shù)據(jù)寫回到寄存器組4.5.2輸入、輸出信號(hào)分析主要輸入信號(hào): s_w_ALUOutALU的輸出 s_w_MemOut內(nèi)存讀取的輸出 s_w_memToReg決定寫入寄存器的數(shù)據(jù)來源 s_w_flag要寫進(jìn)狀態(tài)寄存器的值4.5.3功能實(shí)現(xiàn)邏輯此部分較為簡單,即通過s_w_memToReg信號(hào)來決定是將ALU的輸出寫進(jìn)寄存器還是將從內(nèi)存讀出來的數(shù)據(jù)寫進(jìn)寄存器。模塊圖如下:5
20、系統(tǒng)改造5.1新的指令系統(tǒng)匯編語句操作碼功能描述指令類型ADD DR,SR0000DR+SRDR算術(shù)邏輯指令SUB DR,SR0001DR-SRDRCMP DR,SR0010DR-SR 比較AND DR,SR0011DR and SRDR 邏輯與OR DR,SR0100DR or SRDR 邏輯或XOR DR,SR0101DR xor SR DR 異或SHL DR0110邏輯左移,最低位補(bǔ)0,最高位移入CSHR DR 0111邏輯右移,最高位補(bǔ)0,最低位移入CMOVI DR,IMM1000IMM(立即數(shù))DR,存立即數(shù)進(jìn)寄存器數(shù)據(jù)傳送指令MOV DR,SR1001SR DRLOAD DR,SR
21、1010SR DRSTORE DR,SR1011 SR DRJR ADR1100無條件跳轉(zhuǎn)到ADR , ADR=原PC值+OFFSET控制轉(zhuǎn)移指令JRC ADR1101當(dāng)C=1時(shí),跳轉(zhuǎn)到ADR, ADR=原PC值+OFFSETJRZ ADR1110當(dāng)Z=1時(shí),跳轉(zhuǎn)到ADR, ADR=原PC值+OFFSETNOP1111空操作其他5.1.1選擇改動(dòng)說明包括NOP空操作指令在內(nèi)指令系統(tǒng)共包括16條指令,在原有的25條指令的基礎(chǔ)上刪除了10條,新增了1條。具體地,刪除了DEC,INC,TEST,SAR,PUSH,POP,JRNC,JRNZ,LOADH,LOADL,新增了一條數(shù)據(jù)傳送指令MOVI。5.
22、2修改的代碼及說明1)代碼段1,新增內(nèi)存模塊memory.vhd-內(nèi)存-2015-10-30library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use work.unitPack.all;ENTITY memory ISPORT ( databus : inout STD_LOGIC_VECTOR(7 DOWNTO 0);-數(shù)據(jù)總線addr : IN STD_LOGIC_VECTOR(7 DOWNTO 0);-訪存地址wr : IN STD_LOGIC;-讀寫控制信號(hào)reset: IN STD_LOG
23、IC);END memory;ARCHITECTURE rtl OF memory ISSIGNAL ram:ram_type;-ram_type在unitpack.vhd文件里定義BEGINPROCESS(addr,wr,ram,databus,reset) BEGINIF reset=0 THENram(0) = MOVI & R0 & 11;-此處將程序?qū)戇M(jìn)內(nèi)存中,省略ram(15) = JR & 1110;END IF;-讀寫功能的實(shí)現(xiàn)IF wr=0 THENdatabus = Z8;ram(conv_integer(addr) = databus;END IF; IF wr=1 TH
24、EN databus = ram(conv_integer(addr);END IF;END PROCESS; END rtl;內(nèi)存模塊使用vhdl編寫,內(nèi)存由ram組成,讀出數(shù)據(jù)線和寫入數(shù)據(jù)線為同一條數(shù)據(jù)總線,因此不能同時(shí)進(jìn)行讀寫。因?yàn)檫@樣所以會(huì)產(chǎn)生結(jié)構(gòu)相關(guān),即在取指的時(shí)候不可以訪存,否則會(huì)產(chǎn)生沖突。內(nèi)存讀寫功能由wr信號(hào)進(jìn)行控制,當(dāng)wr為0時(shí)執(zhí)行寫功能,當(dāng)wr為1時(shí)執(zhí)行讀功能。2) 代碼段2,取指模塊ifentity.vhdop = IR(7 downto 4);-操作碼取指令的高4位-控制相關(guān)信號(hào)e_setFlag,用于選擇當(dāng)狀態(tài)寄存器的值來源with e_setFlag select
25、ZZ = Zwhen flag_hold, tempZ when others;with e_setFlag select CC = Cwhen flag_hold,-由于跳轉(zhuǎn)信號(hào)中只保留了JR、JRC、JRZ,因此此處只判斷該3個(gè)OPs_selZ = 1 WHEN( op=JRZ AND ZZ=1) -判斷是否跳轉(zhuǎn) OR op=JR else 0; s_selC = 1 WHEN( op=JRC AND CC=1) -判斷是否跳轉(zhuǎn) else 0; PCIncSel = 1 WHEN s_selZ=1 or s_selC=1 ELSE 0; s_PCInc1 = PC + x01;-此處修改了
26、PC位數(shù) WITH PCIncSel SELECT-當(dāng)有跳轉(zhuǎn)時(shí)pc = pc + offset,否則pc = pc + PCnext = s_PCInc1 WHEN 0, PCPlusOffset WHEN 1, s_PCInc1 when others; process(reset,clk,PCStall)beginif reset = 0 thenPC = x00;-此處修改了PC位數(shù) elsif FALLING_EDGE(clk) and (PCStall=0) then PC ALUResult := opR + opS; tempV := (not opR(7)and(not opS
27、(7)and ALUResult(7) or (opR(7)and opS(7)and (not ALUResult(7); when aluSub = ALUResult := opR - opS; tempV := ( opS(7)and(not opR(7)and (not ALUResult(7) or (NOT opS(7)and opR(7)and ALUResult(7); when aluAnd = ALUResult := opR and opS;when aluOr = ALUResult := opR or opS;when aluXor = ALUResult := o
28、pR xor opS;when aluShl = ALUResult(7 downto 1) := opR(6 downto 0); ALUResult(0) := 0;cx := opR(7);when aluShr = ALUResult(6 downto 0) := opR(7 downto 1); ALUResult(7) := 0;cx := opR(0); -增加了aluMOVI的alu功能選擇信號(hào)及其處理實(shí)現(xiàn)when aluMOVI = ALUResult := 00000&opS(3 downto 0);when others = null;end case; 修改了alu選擇
29、信號(hào)以及alu功能信號(hào)的判斷邏輯,以及狀態(tài)寄存器的判斷邏輯,之所以修改是因?yàn)槲粩?shù)的修改。除此以外還增加了aluMOVI的alu功能信號(hào)及其對應(yīng)的邏輯功能實(shí)現(xiàn)。1) 代碼段1,譯碼模塊identity.vhd新增了的WriteBack:process(reset,clk) -寫回模塊begin if reset=0 then-新增了初始化寄存器一步 RegArray(0) = x00; RegArray(1) = x00; RegArray(2) = x00; RegArray(3) = x00;elsif FALLING_EDGE(clk) and w_wRegEn=1 thenRegArra
30、y(wRegIndex) ctrl:=d_IR(3 downto 0)&10&1&1&001&0000&001;when SUBB = ctrl:=d_IR(3 downto 0)&10&1&1&001&0001&001;when ANDins = ctrl:=d_IR(3 downto 0)&10&1&1&001&0010&001;when CMP = ctrl:=d_IR(3 downto 0)&10&0&1&001&0001&001;-新增了MOVI指令及其譯碼出來的控制信號(hào)when MOVI = ctrl:=d_IR(3 downto 0)&10&1&1&101&1010&000; i
31、mm ctrl:=d_IR(3 downto 0)&10&1&1&001&0011&001;when XORins= ctrl:=d_IR(3 downto 0)&10&1&1&001&0100&001;when SHLIns = ctrl:=d_IR(3 downto 0)&10&1&1&000&0101&001;when SHRIns = ctrl:=d_IR(3 downto 0)&10&1&1&000&0110&001;when MOV = ctrl:=d_IR(3 downto 0)&10&1&1&011&0000&000;when LOAD = ctrl:=d_IR(3 downt
32、o 0)&01&1&0&011&0000&000;when STORE= ctrl:=d_IR(3 downto 0)&00&0&1&000&0000&000;when JR|JRZ|JRC = ctrl:=DoNothing; -若是JR*指令,計(jì)算offset,并向Exe插入Bubble offset ctrl:=DoNothing; end case;譯碼模塊主要修改了控制信號(hào)ctrl的位數(shù),并根據(jù)“SA, SB, Wrmem, wRegEn, MemToReg, ALUSrc, ALUOpr, SetFlag”的順序增加了MOVI指令的控制信號(hào),如下所示:when MOVI = ctr
33、l:=d_IR(3 downto 0)&10&1&1&101&1010&000; imm = 000000&d_IR(1 downto 0);最后還增加了寄存器的初始化。6 測試與總結(jié)6.1 規(guī)則文件(cpu.txt的內(nèi)容)6.2測試代碼-程序1-指令正確性測試- R0R1R2R3ram(0) = MOVI & R0 & 11;- 3000ram(1) = ADD & R0 & 01;- 4000ram(2) = MOV & R1 & R0;- 4400ram(3) = SUBB & R1 & 11;- 4100ram(4) = SUBB & R2 & 10;- 41-20ram(5) = ADD & R2 & 11;- 4110ram(6) = ORIns & R1 & R0;- 4410ram(7) = ANDIns & R1 & R2;- 4110ram(8) = XORIns & R0 & R1;- 5110ram(9) = SHLIns & R1 & 00;- 5210;ram(10) = SHRIns & R0 & 00;-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 天琴座RR型變星速度曲線模板的構(gòu)建及應(yīng)用
- 2025年會(huì)議禮品項(xiàng)目市場調(diào)查研究報(bào)告
- 幼兒園教師評估與反饋機(jī)制計(jì)劃
- 團(tuán)隊(duì)項(xiàng)目合作經(jīng)歷證明書(6篇)
- 基于Geogebra軟件的模型思想在全等三角形教學(xué)中的應(yīng)用
- 人防工程施工的風(fēng)險(xiǎn)管理措施
- 寫景作文夏天350字(10篇)
- 2025-2025學(xué)年度親子活動(dòng)組織工作計(jì)劃
- 2025年大數(shù)據(jù)分析師職業(yè)技能測試卷:數(shù)據(jù)倉庫設(shè)計(jì)與實(shí)現(xiàn)試題
- 2025年中式烹調(diào)師(中級)中式烹飪美食產(chǎn)業(yè)發(fā)展機(jī)遇預(yù)測分析理論考核試卷
- 監(jiān)獄消防安全生產(chǎn)課件
- 電力市場發(fā)展與人才培養(yǎng)戰(zhàn)略規(guī)劃
- 人力資源培訓(xùn):RACI表培訓(xùn)課件
- DBJ33T 1020-2022 建設(shè)工程地質(zhì)鉆探安全技術(shù)規(guī)程
- 高中家長會(huì) 共筑夢想,攜手未來課件-高二下學(xué)期期末家長會(huì)
- 人文關(guān)懷在臨床護(hù)理中的應(yīng)用
- 醫(yī)院營養(yǎng)科建設(shè)方案
- 幼兒園伙食費(fèi)管理制度
- 網(wǎng)絡(luò)安全服務(wù)方案
- 【MOOC】現(xiàn)代郵政英語(English for Modern Postal Service)-南京郵電大學(xué) 中國大學(xué)慕課MOOC答案
- 巨量千川營銷師(初級)認(rèn)證考試復(fù)習(xí)題庫(含答案)
評論
0/150
提交評論