九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

5級流水無cache cpu實(shí)驗(yàn)計(jì)算機(jī)組成原理 課程設(shè)計(jì)報(bào)告

上傳人:仙*** 文檔編號:29418728 上傳時(shí)間:2021-10-07 格式:DOC 頁數(shù):26 大?。?28KB
收藏 版權(quán)申訴 舉報(bào) 下載
5級流水無cache cpu實(shí)驗(yàn)計(jì)算機(jī)組成原理 課程設(shè)計(jì)報(bào)告_第1頁
第1頁 / 共26頁
5級流水無cache cpu實(shí)驗(yàn)計(jì)算機(jī)組成原理 課程設(shè)計(jì)報(bào)告_第2頁
第2頁 / 共26頁
5級流水無cache cpu實(shí)驗(yàn)計(jì)算機(jī)組成原理 課程設(shè)計(jì)報(bào)告_第3頁
第3頁 / 共26頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《5級流水無cache cpu實(shí)驗(yàn)計(jì)算機(jī)組成原理 課程設(shè)計(jì)報(bào)告》由會(huì)員分享,可在線閱讀,更多相關(guān)《5級流水無cache cpu實(shí)驗(yàn)計(jì)算機(jī)組成原理 課程設(shè)計(jì)報(bào)告(26頁珍藏版)》請?jiān)谘b配圖網(wǎ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)用到的主要信號,以及詳細(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)控制信號。在保持原有系統(tǒng)邏輯功能基本不變的情況下,修改各個(gè)模塊里控制信號位數(shù)以及模塊接口信號位數(shù)以和新的指令系統(tǒng)兼容。4. 增加內(nèi)存模塊。使用vhdl編寫了一個(gè)ram模塊,根據(jù)讀寫信號來選擇讀寫功能。reset時(shí)將事先寫好的二進(jìn)

3、制形式程序?qū)戇M(jìn)內(nèi)存。5. 擴(kuò)展了常量定義文件。在常量定義文件unitpack.vhd中,具體地:a) 新增了ALU功能選擇信號常量aluMOVI。b) 新增了寄存器編號常量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):讀取寄存器值和指令譯碼。我們采取一次譯碼,逐級傳遞的方式,譯出后幾級流水所需的控制信號和數(shù)據(jù)(如立即數(shù)等),在每次時(shí)鐘上升沿到來時(shí)送入下一級。實(shí)際上,結(jié)構(gòu)相關(guān)、控制相關(guān)、數(shù)據(jù)相關(guān)的檢測都可歸入譯碼部分。考慮到“相關(guān)檢測”涉及到的信號分屬不同階段以及整體結(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ù)寫使能信號wRegEn將數(shù)據(jù)回寫到寄存器堆;l HazardDetectUnit模塊:檢測結(jié)構(gòu)相關(guān);l ForwardingUnit模塊:檢測數(shù)據(jù)相關(guān)。l 內(nèi)存

6、模塊memory,根據(jù)訪存地址mem_adr和讀寫信號wr來控制。3 解決各種相關(guān)用到的主要信號的分析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è)信號setFlag,它決定了在執(zhí)行階段是否根據(jù)ALU計(jì)算結(jié)果改變狀態(tài)位。從下面的時(shí)序圖中可以發(fā)現(xiàn),只要我們在JRX指令譯碼時(shí)提供以下3個(gè)信號就可作出是否跳轉(zhuǎn)的決定:信號含義tFlagALU計(jì)算出的臨時(shí)狀態(tài)位,Flag狀態(tài)寄存器輸出,e_setFlag狀態(tài)寄存器寫使能表17 處理控制相關(guān)信號若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)鍵信號是setFlag信號,產(chǎn)生于譯碼模塊,作用于執(zhí)行模塊,即identity.vhdhe exentity.vhd文件中。如下圖所示。從上圖可看出,凡是涉及到數(shù)值計(jì)算和關(guān)系運(yùn)算的指令的低三位均為001,而不涉及的則為000。該信號傳到執(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)鍵信號是m_wRegEn和w_wRegEn,主要使用是在數(shù)據(jù)相關(guān)檢測模塊forwardingentity.vhd中,在identity.vhd、exentity.vhd、memaccessentity.vhd中均有使用。具體的使用方法如下。相關(guān)的檢測都置于“執(zhí)行階段”。信號wRegEn是寄存器寫使能,SA,SB是寄存器組A,B口選擇信號。信號前綴表示信號所處的階段。如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口選擇信號所指定的即為目的寄存器。否則無關(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信號,可以發(fā)現(xiàn)凡是會(huì)寫進(jìn)寄存器的指令,該信號值都為1。3.3 結(jié)構(gòu)相關(guān)由于在設(shè)計(jì)中不包含緩存,因此會(huì)有取指和訪存的沖突,即結(jié)構(gòu)相關(guān)。如下圖:關(guān)鍵信號是wrMem信號,表

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)志是否訪存的信號wrMem。含義如下:wrMem意義00寫內(nèi)存(STORE)01讀內(nèi)存(LOAD)1不占用內(nèi)存 表16 wMEM控制信號通過檢查“訪存階段”的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輸入、輸出信號分析主要輸入信號: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、輸出信號:PC_addrPC作為內(nèi)存地址輸出,用于下一節(jié)拍的取指d_PCInc1PC + 1d_IR指令寄存器輸出 4.1.3功能實(shí)現(xiàn)邏輯通過分析控制信號我們可以大概了解到取指模塊的功能實(shí)現(xiàn)邏輯是如何的。廣義上來說,取指模塊包括結(jié)構(gòu)相關(guān)沖突檢測模塊,因?yàn)镻CStall信號(用來實(shí)現(xiàn)IF段對PC的更新)和IFFlush信號(對IR寫入空指令)就來自結(jié)構(gòu)相關(guān)沖突檢測模塊。結(jié)構(gòu)相關(guān)檢測模塊叫HazardDetectEntity,其模塊圖如下:其中輸入信號的含義是:m_wrMemwrMem在訪存階段的值w_rwMemwrMem在寫回階段的值d_IR指令寄存器通過檢測訪存階段的wrMem信號即可確定是否

14、發(fā)生了結(jié)構(gòu)沖突。每次取指后,若有沖突,則往IR中寫入空指令(NOP),并保持PC不變,使得取指延后一個(gè)節(jié)拍。除此之外,setFlag信號在此處的作用是,決定用狀態(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ā)送控制信號4.2.2輸入、輸出信號分析主要輸入信號:d_IR從取指模塊來的指令d_PCInc1從取指模塊來的pc+1w_wbData寫回?cái)?shù)據(jù),從寫回模塊里來w_destReg要寫回的目標(biāo)寄存器w_wRegEn寄存器寫使能端主要輸出信號:e_RAOut寄存器A

15、輸出值e_RBOut寄存器B輸出值e_IMM立即數(shù)輸出值e_ALUSrcALU輸入端選擇信號e_ALUOprALU運(yùn)算選擇信號e_SetFlag狀態(tài)寄存器寫使能信號e_wrMem訪存信號e_wRegEn寄存器寫使能信號e_destReg目標(biāo)寄存器e_MemToReg內(nèi)存寫入寄存器使能信號4.2.3功能實(shí)現(xiàn)邏輯譯碼模塊內(nèi)部寫好了根據(jù)不同的指令發(fā)送不同的控制信號的代碼,采取一次譯碼,逐級傳遞的方式,譯出后幾級流水所需的控制信號和數(shù)據(jù)(如立即數(shù))。在每次時(shí)鐘上升沿到來時(shí)送入下一級。實(shí)際上,結(jié)構(gòu)相關(guān)、控制相關(guān)、數(shù)據(jù)相關(guān)的檢測都可歸入譯碼部分。考慮到“相關(guān)檢測”涉及到的信號分屬不同階段以及整體結(jié)構(gòu)的清晰

16、性,作者將“相關(guān)檢測”獨(dú)立出來。4.3執(zhí)行(EX)4.3.1 實(shí)現(xiàn)功能列表執(zhí)行模塊實(shí)現(xiàn)的功能是:l 根據(jù)控制信號完成算術(shù)邏輯運(yùn)算l 根據(jù)控制信號計(jì)算有效地址l 提供數(shù)據(jù)通道,將上一級傳遞過來的控制信號傳到下一級4.3.2輸入、輸出信號分析主要輸入信號:e_RAOut、e_RBOut、e_ALUSrc、e_ALUOpr、e_SetFlag、e_IMM、e_memToReg、 e_wRegEn、來自譯碼模塊的控制信號forwardA、forwardB來自數(shù)據(jù)相關(guān)沖突檢測模塊的輸出e_ALUOut上一個(gè)指令在執(zhí)行模塊產(chǎn)生的輸出,作為下一條指令在執(zhí)行模塊執(zhí)行的輸入信號之一主要輸出信號: m_SA、m_

17、ALUOut、m_RBdata、i_tempZ、i_tempC、m_flag、m_wRegEn、m_memToReg、m_destReg、m_wrMem主要來自上一級模塊傳過來的控制信號4.3.3功能實(shí)現(xiàn)邏輯執(zhí)行模塊執(zhí)行的功能很簡單,和上個(gè)學(xué)期做的CPU綜合性實(shí)驗(yàn)類似,主要是一些ALU邏輯運(yùn)算和狀態(tài)寄存器的更新操作。在這里還有向下一模塊傳遞控制信號的作用。其中,forwardA和forwardB信號是來自數(shù)據(jù)相關(guān)沖突檢測模塊的信號。 模塊圖如下所示:作用是在發(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輸入、輸出信號分析主要輸入信號:m_wrMem內(nèi)存讀寫控制信號m_ALUOut來自ALU的輸出結(jié)果m_RBdata要寫回的數(shù)據(jù)PC程序計(jì)數(shù)器的值主要輸出信號:w_wrMem傳送到寫回模塊的內(nèi)存讀寫控制信號wr讀寫控制信號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ù)寫使能信號wRegEn將數(shù)據(jù)寫回到寄存器組4.5.2輸入、輸出信號分析主要輸入信號: 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信號來決定是將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;-讀寫控制信號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信號進(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)信號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)信號中只保留了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功能選擇信號及其處理實(shí)現(xiàn)when aluMOVI = ALUResult := 00000&opS(3 downto 0);when others = null;end case; 修改了alu選擇

29、信號以及alu功能信號的判斷邏輯,以及狀態(tài)寄存器的判斷邏輯,之所以修改是因?yàn)槲粩?shù)的修改。除此以外還增加了aluMOVI的alu功能信號及其對應(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指令及其譯碼出來的控制信號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;譯碼模塊主要修改了控制信號ctrl的位數(shù),并根據(jù)“SA, SB, Wrmem, wRegEn, MemToReg, ALUSrc, ALUOpr, SetFlag”的順序增加了MOVI指令的控制信號,如下所示: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) = A

34、DD & 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;- 2210;ram(11) = LOAD & R0 & R2;- R0的值為ADD & R0 & 01, 即0000 00 01ram(12) = CMP & R0 & R1;- CF = 1, ZF = 0ram(13) = JRC & 1111;

35、- 跳轉(zhuǎn)到15號地址ram(14) = MOVI & R3 & 11;- 如果跳轉(zhuǎn)則不執(zhí)行該指令ram(15) = STORE & R3 & R0;- 0號地址的內(nèi)容變?yōu)?0000 0001ram(16) = MOVI & R0 & 11;- R0 = 3ram(17) = MOVI & R1 & 01;- R1 = 1ram(18) = SUBB & R0 & R1;- R0 = R0 R1ram(19) = JRZ & 1111;- 此處不跳ram(20) = JR & 0000;-此處跳6.3 測試結(jié)果測試環(huán)境測試程序測試結(jié)果五級流水Quartus程序1正確6.4 測試總結(jié)試程序的結(jié)果都

36、與預(yù)期相符,證明測試結(jié)果是正確的。7 本課程設(shè)計(jì)的總結(jié)7.1 A同學(xué)總結(jié)由于上一學(xué)期在計(jì)算機(jī)組成原理的綜合性實(shí)驗(yàn)中擔(dān)當(dāng)了主力隊(duì)員,對cpu的基本組織結(jié)構(gòu)也算是十分了解,因此該學(xué)期主動(dòng)擔(dān)當(dāng)了組長。然而事實(shí)并沒有那么簡單,當(dāng)?shù)谝淮慰吹酱a時(shí)發(fā)現(xiàn),由于上次綜合性實(shí)驗(yàn)大部分通過畫圖連線實(shí)現(xiàn),邏輯功能十分明確,一目了然,然而該學(xué)期的cpu頂層實(shí)體是通過vhdl代碼實(shí)現(xiàn)的,因此初期花了不少時(shí)間在了解代碼的語法以及邏輯功能上,完成此步以后,我們組開展了對3種相關(guān)進(jìn)行詳細(xì)分析。弄清楚流水CPU的實(shí)現(xiàn)原理后,后續(xù)的修改工作就十分簡單了。一開始我們是采用機(jī)箱+DebugController的方式進(jìn)行調(diào)試,后來由于

37、實(shí)驗(yàn)室的機(jī)箱資源有限,便再次采取了用Quartus的時(shí)序功能仿真來調(diào)試,并添加了內(nèi)存模塊。7.2B同學(xué)總結(jié)在此次課程設(shè)計(jì)中,我主要:參與修訂指令系統(tǒng);負(fù)責(zé)數(shù)據(jù)相關(guān)模塊的修改;負(fù)責(zé)譯碼和訪存模塊的修改;負(fù)責(zé)MOVI指令的增加,主要是在常量定義文件unitpack里增加MOVI的op 碼常量以及aluMOVI的alu功能選擇信號,并在譯碼模塊增加MOVI的控制信號及相關(guān)代碼;負(fù)責(zé)擴(kuò)展常量定義文件。在組長的組織下循序漸進(jìn),大部分不懂得問題都能夠通過討論解決。7.3 C同學(xué)總結(jié)在這次的計(jì)算機(jī)組成原理課程設(shè)計(jì)里,我負(fù)責(zé)的是:參與修訂指令系統(tǒng);負(fù)責(zé)結(jié)構(gòu)相關(guān)模塊的修改;負(fù)責(zé)執(zhí)行模塊和寫回模塊的修改;負(fù)責(zé)新頂層實(shí)體cpum.bdf文件的接線,主要是在創(chuàng)建了cpuentity和memory的bsf文件后,新建cpum.bdf文件并將上述兩個(gè)原件加入,利用Quartus的接線功能將原件連接起來。26

展開閱讀全文
溫馨提示:
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!