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

歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

5級流水無cache cpu實驗計算機組成原理 課程設(shè)計報告

  • 資源ID:29418728       資源大?。?span id="24d9guoke414" class="font-tahoma">828KB        全文頁數(shù):26頁
  • 資源格式: DOC        下載積分:15積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要15積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認(rèn)打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

5級流水無cache cpu實驗計算機組成原理 課程設(shè)計報告

計算機組成原理課程設(shè)計報告5級流水無cache CPU實驗1.1 實驗內(nèi)容:無cache流水CPU的分析與改造1. 理解無cache流水CPU的工作原理,明確系統(tǒng)總體結(jié)構(gòu)和數(shù)據(jù)通路圖,分析解決各種相關(guān)用到的主要信號,以及詳細(xì)分析各流水段的功能和實現(xiàn)。2. 將16位的指令系統(tǒng)改為8位,設(shè)計新的指令系統(tǒng),并修改相應(yīng)的數(shù)據(jù)通路。3. 修改規(guī)則文件(cpu.txt),并編寫測試程序驗證系統(tǒng)改造的正確性。1.2 總體基本信息1. 深刻理解無cache流水cpu的工作原理。在詳細(xì)分析了各流水段的功能實現(xiàn)、3種相關(guān)的產(chǎn)生原因和解決方法的基礎(chǔ)上,完成了以下后續(xù)工作。2. 修改指令系統(tǒng)。具體包括:a) 16位指令改為8位,重新編寫了指令OP碼。b) 新增了MOVI指令。由于原指令系統(tǒng)沒有將立即數(shù)存進(jìn)指定寄存器的指令,因此此處新增一條MOVI指令。指令的匯編語句為MOVI DR, IMM其中DR為目的寄存器,IMM為立即數(shù)。因為指令長度為8位,OP和DR共占了6位,因此IMM的大小不大于3(即二進(jìn)制“00”至“11”)。c) 修改及刪除了部分指令。此處詳見5.1。3. 修改系統(tǒng)控制信號。在保持原有系統(tǒng)邏輯功能基本不變的情況下,修改各個模塊里控制信號位數(shù)以及模塊接口信號位數(shù)以和新的指令系統(tǒng)兼容。4. 增加內(nèi)存模塊。使用vhdl編寫了一個ram模塊,根據(jù)讀寫信號來選擇讀寫功能。reset時將事先寫好的二進(jìn)制形式程序?qū)戇M(jìn)內(nèi)存。5. 擴展了常量定義文件。在常量定義文件unitpack.vhd中,具體地:a) 新增了ALU功能選擇信號常量aluMOVI。b) 新增了寄存器編號常量R0、R1、R2和R3。c) 新增了ram類型。6. 使用Quartus II進(jìn)行功能仿真并debug。7. 使用bdf構(gòu)造頂層實體cpum。由于新增了內(nèi)存模塊,而原系統(tǒng)是使用vhdl編寫的,為了方便對接,我們使用bdf的形式將無cache流水線cpu和內(nèi)存模塊連接起來構(gòu)造頂層實體cpum,“m”的含義是“memory”,即帶內(nèi)存模塊的無cache流水線cpu。8. 重畫數(shù)據(jù)通路圖。我們使用了Microsoft Visio軟件在原有的系統(tǒng)總結(jié)結(jié)構(gòu)圖的基礎(chǔ)上修改并新增了部分模塊,詳見2。2、系統(tǒng)總體結(jié)構(gòu)及數(shù)據(jù)通路圖總體結(jié)構(gòu)圖:數(shù)據(jù)通路圖:整個CPU由以下幾個模塊組成:l 取指模塊(IF):給出內(nèi)存地址,讀取指令并送入指令寄存器,為下一級準(zhǔn)備數(shù)據(jù)。由于PC控制模塊處于取指模塊中,因此控制相關(guān)的檢測也置于取指模塊。l 譯碼模塊(ID):讀取寄存器值和指令譯碼。我們采取一次譯碼,逐級傳遞的方式,譯出后幾級流水所需的控制信號和數(shù)據(jù)(如立即數(shù)等),在每次時鐘上升沿到來時送入下一級。實際上,結(jié)構(gòu)相關(guān)、控制相關(guān)、數(shù)據(jù)相關(guān)的檢測都可歸入譯碼部分??紤]到“相關(guān)檢測”涉及到的信號分屬不同階段以及整體結(jié)構(gòu)的清晰性,我們將“相關(guān)檢測”獨立出來。l 執(zhí)行模塊(Ex):完成算術(shù)邏輯運算、計算有效地址和提供數(shù)據(jù)通道。l 訪存模塊(Ma):選擇地址線的數(shù)據(jù)來源和數(shù)據(jù)線的流向。訪存和取指在功能上是獨立的,但CPU對外只有一條地址線和數(shù)據(jù)線的事實決定了訪存和取指是相互聯(lián)系的。當(dāng)執(zhí)行LOAD/STORE指令時,地址線由ALU送入“訪存段”的值提供;取指時,則由PC提供。當(dāng)寫內(nèi)存時,CPU內(nèi)部數(shù)據(jù)送數(shù)據(jù)線;當(dāng)需要讀內(nèi)存時,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)存模塊memory,根據(jù)訪存地址mem_adr和讀寫信號wr來控制。3 解決各種相關(guān)用到的主要信號的分析3.1控制相關(guān) 控制相關(guān)是指因為程序的執(zhí)行方向可能改變而引起的相關(guān)。當(dāng)執(zhí)行跳轉(zhuǎn)指令時,就會發(fā)生這種情況。除JR外,JRZ等條件跳轉(zhuǎn)需要根據(jù)當(dāng)前狀態(tài)位來決定是否跳轉(zhuǎn),而當(dāng)前狀態(tài)位是由前面最近的會影響狀態(tài)位的指令(如算術(shù)指令)決定。常規(guī)的也是比較簡單的做法是在碰到JRX之類的跳轉(zhuǎn)指令時,延遲后邊流水線的進(jìn)入。但我們通過分析,認(rèn)為可以一點都不必延遲,通過旁路處理把控制相關(guān)轉(zhuǎn)為數(shù)據(jù)相關(guān)來處理。這樣處理,不必延遲,可以提高流水線的性能。按我們的方式解決控制相關(guān)需要做兩項工作:1) 通過旁路,提供狀態(tài)寄存器的值和臨時狀態(tài)位的值,為判斷是否跳轉(zhuǎn)作準(zhǔn)備;2) 選擇PC更新的時機1旁路處理在每條指令譯碼時,會產(chǎn)生一個信號setFlag,它決定了在執(zhí)行階段是否根據(jù)ALU計算結(jié)果改變狀態(tài)位。從下面的時序圖中可以發(fā)現(xiàn),只要我們在JRX指令譯碼時提供以下3個信號就可作出是否跳轉(zhuǎn)的決定:信號含義tFlagALU計算出的臨時狀態(tài)位,Flag狀態(tài)寄存器輸出,e_setFlag狀態(tài)寄存器寫使能表17 處理控制相關(guān)信號若e_setFlag要寫狀態(tài)寄存器,則說明前一條指令會影響狀態(tài)位,這時根據(jù)tFlag決定是否跳轉(zhuǎn);若e_setFlag要保持狀態(tài)寄存器,則說明前一條指令不會影響狀態(tài)位,這時根據(jù)Flag決定是否跳轉(zhuǎn)。涉及到控制相關(guān)的關(guān)鍵信號是setFlag信號,產(chǎn)生于譯碼模塊,作用于執(zhí)行模塊,即identity.vhdhe exentity.vhd文件中。如下圖所示。從上圖可看出,凡是涉及到數(shù)值計算和關(guā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í)行階段需要數(shù)據(jù)時,上一指令尚未給出,這種情況是無法用旁路技術(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,則表示前一指令要回寫寄存器。此時,若e_SA或e_SB等于m_SA,則必然數(shù)據(jù)相關(guān),這是因為我們規(guī)定,若回寫寄存器,則寄存器A口選擇信號所指定的即為目的寄存器。否則無關(guān)。2 中間隔1條指令的兩指令數(shù)據(jù)相關(guān)的檢測 若w_wRegEn=1,則表示第一條指令要回寫寄存器。此時,若e_SA或e_SB等于w_SA,則必然數(shù)據(jù)相關(guān)。否則無關(guān)。當(dāng)然,上述兩種情況可能會一同出現(xiàn)。這時,我們就按情況1處理。因為情況2可以理解為接連出現(xiàn)情況1。下圖為各個指令在譯碼時產(chǎn)生的wRegEn信號,可以發(fā)現(xiàn)凡是會寫進(jìn)寄存器的指令,該信號值都為1。3.3 結(jié)構(gòu)相關(guān)由于在設(shè)計中不包含緩存,因此會有取指和訪存的沖突,即結(jié)構(gòu)相關(guān)。如下圖:關(guān)鍵信號是wrMem信號,表示是否讀寫內(nèi)存。具體出現(xiàn)在結(jié)構(gòu)相關(guān)沖突檢測與問題解決模塊Hazarddetectentity.vhd中,產(chǎn)生于譯碼模塊identity.vhd中。具體使用方法如下:1) 沖突檢測只有執(zhí)行訪存指令(LOAD/STORE)時,才會出現(xiàn)沖突。因此,我們在譯碼時產(chǎn)生一個標(biāo)志是否訪存的信號wrMem。含義如下:wrMem意義00寫內(nèi)存(STORE)01讀內(nèi)存(LOAD)1不占用內(nèi)存 表16 wMEM控制信號通過檢查“訪存階段”的m_wrMem就可確定是否沖突。2)取指延后在每次取指時,若有沖突,則往IR中寫入空指令(NOP),并保持PC不變,使取指延后一個節(jié)拍。4 各流水段功能和實現(xiàn)的詳細(xì)分析4.1取指(IF)4.1.1 實現(xiàn)功能列表取指模塊實現(xiàn)的功能是:l 給定內(nèi)存地址,讀取內(nèi)存中的指令l 將指令送入指令寄存器,提供給下一級的譯碼模塊l 實現(xiàn)控制相關(guān)沖突檢測l 根據(jù)讀取到的指令是否為跳轉(zhuǎn)指令來更新PC4.1.2輸入、輸出信號分析主要輸入信號:Z,C狀態(tài)寄存器tempZ,tempCALU計算出的臨時狀態(tài)位,用于相關(guān)沖突檢測e_setFlag狀態(tài)寄存器寫使能端,產(chǎn)生于譯碼時。決定是否在執(zhí)行階段根據(jù)ALU計算出來的結(jié)果改變狀態(tài)位PCStall決定是否保持PC不變,由結(jié)構(gòu)相關(guān)沖突檢測模塊產(chǎn)生IFFlush決定是否往指令寄存器IR里寫入空指令,來自結(jié)構(gòu)相關(guān)檢測模塊OuterDB內(nèi)存讀取過來的數(shù)據(jù)主要輸出信號:PC_addrPC作為內(nèi)存地址輸出,用于下一節(jié)拍的取指d_PCInc1PC + 1d_IR指令寄存器輸出 4.1.3功能實現(xiàn)邏輯通過分析控制信號我們可以大概了解到取指模塊的功能實現(xiàn)邏輯是如何的。廣義上來說,取指模塊包括結(jié)構(gòu)相關(guān)沖突檢測模塊,因為PCStall信號(用來實現(xiàn)IF段對PC的更新)和IFFlush信號(對IR寫入空指令)就來自結(jié)構(gòu)相關(guān)沖突檢測模塊。結(jié)構(gòu)相關(guān)檢測模塊叫HazardDetectEntity,其模塊圖如下:其中輸入信號的含義是:m_wrMemwrMem在訪存階段的值w_rwMemwrMem在寫回階段的值d_IR指令寄存器通過檢測訪存階段的wrMem信號即可確定是否發(fā)生了結(jié)構(gòu)沖突。每次取指后,若有沖突,則往IR中寫入空指令(NOP),并保持PC不變,使得取指延后一個節(jié)拍。除此之外,setFlag信號在此處的作用是,決定用狀態(tài)寄存器輸出Flag還是ALU計算出的臨時狀態(tài)位tFlag來判斷跳轉(zhuǎn)。4.2譯碼(ID)4.2.1 實現(xiàn)功能列表譯碼模塊實現(xiàn)的功能是:l 讀取指令寄存器中的指令l 對指令進(jìn)行譯碼,發(fā)送控制信號4.2.2輸入、輸出信號分析主要輸入信號:d_IR從取指模塊來的指令d_PCInc1從取指模塊來的pc+1w_wbData寫回數(shù)據(jù),從寫回模塊里來w_destReg要寫回的目標(biāo)寄存器w_wRegEn寄存器寫使能端主要輸出信號:e_RAOut寄存器A輸出值e_RBOut寄存器B輸出值e_IMM立即數(shù)輸出值e_ALUSrcALU輸入端選擇信號e_ALUOprALU運算選擇信號e_SetFlag狀態(tài)寄存器寫使能信號e_wrMem訪存信號e_wRegEn寄存器寫使能信號e_destReg目標(biāo)寄存器e_MemToReg內(nèi)存寫入寄存器使能信號4.2.3功能實現(xiàn)邏輯譯碼模塊內(nèi)部寫好了根據(jù)不同的指令發(fā)送不同的控制信號的代碼,采取一次譯碼,逐級傳遞的方式,譯出后幾級流水所需的控制信號和數(shù)據(jù)(如立即數(shù))。在每次時鐘上升沿到來時送入下一級。實際上,結(jié)構(gòu)相關(guān)、控制相關(guān)、數(shù)據(jù)相關(guān)的檢測都可歸入譯碼部分。考慮到“相關(guān)檢測”涉及到的信號分屬不同階段以及整體結(jié)構(gòu)的清晰性,作者將“相關(guān)檢測”獨立出來。4.3執(zhí)行(EX)4.3.1 實現(xiàn)功能列表執(zhí)行模塊實現(xiàn)的功能是:l 根據(jù)控制信號完成算術(shù)邏輯運算l 根據(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上一個指令在執(zhí)行模塊產(chǎn)生的輸出,作為下一條指令在執(zhí)行模塊執(zhí)行的輸入信號之一主要輸出信號: m_SA、m_ALUOut、m_RBdata、i_tempZ、i_tempC、m_flag、m_wRegEn、m_memToReg、m_destReg、m_wrMem主要來自上一級模塊傳過來的控制信號4.3.3功能實現(xiàn)邏輯執(zhí)行模塊執(zhí)行的功能很簡單,和上個學(xué)期做的CPU綜合性實驗類似,主要是一些ALU邏輯運算和狀態(tài)寄存器的更新操作。在這里還有向下一模塊傳遞控制信號的作用。其中,forwardA和forwardB信號是來自數(shù)據(jù)相關(guān)沖突檢測模塊的信號。 模塊圖如下所示:作用是在發(fā)生讀后寫數(shù)據(jù)相關(guān)時,直接將計算好了的結(jié)果在寫回目標(biāo)寄存器時也發(fā)往下一條指令的執(zhí)行模塊作為ALU的輸入之一。4.4訪存(MEM)4.4.1 實現(xiàn)功能列表訪存模塊實現(xiàn)的功能是:l 根據(jù)地址線對內(nèi)存進(jìn)行讀操作或者寫操作4.4.2輸入、輸出信號分析主要輸入信號:m_wrMem內(nèi)存讀寫控制信號m_ALUOut來自ALU的輸出結(jié)果m_RBdata要寫回的數(shù)據(jù)PC程序計數(shù)器的值主要輸出信號:w_wrMem傳送到寫回模塊的內(nèi)存讀寫控制信號wr讀寫控制信號addr要讀取的內(nèi)存地址OuterDB既可作為輸入又可作為輸出,用于傳輸數(shù)據(jù)4.4.3功能實現(xiàn)邏輯訪存和取指在功能上是獨立的,但是因為CPU對外只有一條地址線和數(shù)據(jù)線,因此訪存和取指在實際上是有聯(lián)系和沖突的。當(dāng)執(zhí)行Load/Store指令時,地址線由ALU送入訪存段的值提供;取指時,則由PC提供。當(dāng)寫內(nèi)存時,CPU內(nèi)部數(shù)據(jù)送往數(shù)據(jù)線。當(dāng)需要讀內(nèi)存時,CPU往數(shù)據(jù)線送高阻。4.5寫回(WB)4.5.1 實現(xiàn)功能列表寫回模塊實現(xiàn)的功能是:l 選擇寫回數(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功能實現(xiàn)邏輯此部分較為簡單,即通過s_w_memToReg信號來決定是將ALU的輸出寫進(jìn)寄存器還是將從內(nèi)存讀出來的數(shù)據(jù)寫進(jìn)寄存器。模塊圖如下:5 系統(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邏輯左移,最低位補0,最高位移入CSHR DR 0111邏輯右移,最高位補0,最低位移入CMOVI DR,IMM1000IMM(立即數(shù))DR,存立即數(shù)進(jìn)寄存器數(shù)據(jù)傳送指令MOV DR,SR1001SR DRLOAD DR,SR1010SR DRSTORE DR,SR1011 SR DRJR ADR1100無條件跳轉(zhuǎn)到ADR , ADR=原PC值+OFFSET控制轉(zhuǎn)移指令JRC ADR1101當(dāng)C=1時,跳轉(zhuǎn)到ADR, ADR=原PC值+OFFSETJRZ ADR1110當(dāng)Z=1時,跳轉(zhuǎn)到ADR, ADR=原PC值+OFFSETNOP1111空操作其他5.1.1選擇改動說明包括NOP空操作指令在內(nèi)指令系統(tǒng)共包括16條指令,在原有的25條指令的基礎(chǔ)上刪除了10條,新增了1條。具體地,刪除了DEC,INC,TEST,SAR,PUSH,POP,JRNC,JRNZ,LOADH,LOADL,新增了一條數(shù)據(jù)傳送指令MOVI。5.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_LOGIC);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;-讀寫功能的實現(xiàn)IF wr=0 THENdatabus <= Z8;ram(conv_integer(addr) <= databus;END IF; IF wr=1 THEN databus <= ram(conv_integer(addr);END IF;END PROCESS; END rtl;內(nèi)存模塊使用vhdl編寫,內(nèi)存由ram組成,讀出數(shù)據(jù)線和寫入數(shù)據(jù)線為同一條數(shù)據(jù)總線,因此不能同時進(jìn)行讀寫。因為這樣所以會產(chǎn)生結(jié)構(gòu)相關(guān),即在取指的時候不可以訪存,否則會產(chǎn)生沖突。內(nèi)存讀寫功能由wr信號進(jìn)行控制,當(dāng)wr為0時執(zhí)行寫功能,當(dāng)wr為1時執(zhí)行讀功能。2) 代碼段2,取指模塊ifentity.vhdop <= IR(7 downto 4);-操作碼取指令的高4位-控制相關(guān)信號e_setFlag,用于選擇當(dāng)狀態(tài)寄存器的值來源with e_setFlag select ZZ <= Zwhen flag_hold, tempZ when others;with e_setFlag select CC <= Cwhen flag_hold,-由于跳轉(zhuǎn)信號中只保留了JR、JRC、JRZ,因此此處只判斷該3個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 + x"01"-此處修改了PC位數(shù) WITH PCIncSel SELECT-當(dāng)有跳轉(zhuǎn)時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 <= x"00"-此處修改了PC位數(shù) elsif FALLING_EDGE(clk) and (PCStall=0) then PC <= PCnext;end if;end process;取指模塊主要修改了與pc相關(guān)的地址信號的位數(shù)和跳轉(zhuǎn)判斷,由于修改指令系統(tǒng)時只保留了JR/JRC/JRZ3條跳轉(zhuǎn)指令,因此在跳轉(zhuǎn)判斷時只考慮該3條跳轉(zhuǎn)指令,根據(jù)跳轉(zhuǎn)判斷來選擇如何更新pc的值。1) 代碼段1,執(zhí)行模塊exentity.vhd,case e_ALUOpr is -選擇ALU的運算,此處主要修改了位數(shù),邏輯功能不變when aluAdd => ALUResult := opR + opS; tempV := (not opR(7)and(not opS(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 := opR 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功能選擇信號及其處理實現(xiàn)when aluMOVI => ALUResult := "00000"&opS(3 downto 0);when others => null;end case; 修改了alu選擇信號以及alu功能信號的判斷邏輯,以及狀態(tài)寄存器的判斷邏輯,之所以修改是因為位數(shù)的修改。除此以外還增加了aluMOVI的alu功能信號及其對應(yīng)的邏輯功能實現(xiàn)。1) 代碼段1,譯碼模塊identity.vhd新增了的WriteBack:process(reset,clk) -寫回模塊begin if reset=0 then-新增了初始化寄存器一步 RegArray(0) <= x"00" RegArray(1) <= x"00" RegArray(2) <= x"00" RegArray(3) <= x"00"elsif FALLING_EDGE(clk) and w_wRegEn=1 thenRegArray(wRegIndex) <= w_WBData;end if;end process;Decode_Pro:process(d_IR) -修改了op碼以及控制信號的長度variable op : std_logic_vector(3 downto 0);variable ctrl:std_logic_vector(17 downto 0);begin op := d_IR(7 downto 4); -修改了操作碼的長度 -譯碼產(chǎn)生的信號:SA,SB,Wrmem,wRegEn,MemToReg,ALUSrc,ALUOpr,SetFlag case op is-控制信號when ADD=> 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" imm <= "000000"&d_IR(1 downto 0);when ORins=> 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 downto 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*指令,計算offset,并向Exe插入Bubble offset<=d_IR(3)&d_IR(3)&d_IR(3)&d_IR(3)&d_IR(3 downto 0); when others => ctrl:=DoNothing; end case;譯碼模塊主要修改了控制信號ctrl的位數(shù),并根據(jù)“SA, SB, Wrmem, wRegEn, MemToReg, ALUSrc, ALUOpr, SetFlag”的順序增加了MOVI指令的控制信號,如下所示:when MOVI => ctrl:=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"- 2210;ram(11) <= LOAD & R0 & R2;- R0的值為ADD & R0 & "01", 即0000 00 01ram(12) <= CMP & R0 & R1;- CF = 1, ZF = 0ram(13) <= JRC & "1111"- 跳轉(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é)果都與預(yù)期相符,證明測試結(jié)果是正確的。7 本課程設(shè)計的總結(jié)7.1 A同學(xué)總結(jié)由于上一學(xué)期在計算機組成原理的綜合性實驗中擔(dān)當(dāng)了主力隊員,對cpu的基本組織結(jié)構(gòu)也算是十分了解,因此該學(xué)期主動擔(dān)當(dāng)了組長。然而事實并沒有那么簡單,當(dāng)?shù)谝淮慰吹酱a時發(fā)現(xiàn),由于上次綜合性實驗大部分通過畫圖連線實現(xiàn),邏輯功能十分明確,一目了然,然而該學(xué)期的cpu頂層實體是通過vhdl代碼實現(xiàn)的,因此初期花了不少時間在了解代碼的語法以及邏輯功能上,完成此步以后,我們組開展了對3種相關(guān)進(jìn)行詳細(xì)分析。弄清楚流水CPU的實現(xiàn)原理后,后續(xù)的修改工作就十分簡單了。一開始我們是采用機箱+DebugController的方式進(jìn)行調(diào)試,后來由于實驗室的機箱資源有限,便再次采取了用Quartus的時序功能仿真來調(diào)試,并添加了內(nèi)存模塊。7.2B同學(xué)總結(jié)在此次課程設(shè)計中,我主要:參與修訂指令系統(tǒng);負(fù)責(zé)數(shù)據(jù)相關(guān)模塊的修改;負(fù)責(zé)譯碼和訪存模塊的修改;負(fù)責(zé)MOVI指令的增加,主要是在常量定義文件unitpack里增加MOVI的op 碼常量以及aluMOVI的alu功能選擇信號,并在譯碼模塊增加MOVI的控制信號及相關(guān)代碼;負(fù)責(zé)擴展常量定義文件。在組長的組織下循序漸進(jìn),大部分不懂得問題都能夠通過討論解決。7.3 C同學(xué)總結(jié)在這次的計算機組成原理課程設(shè)計里,我負(fù)責(zé)的是:參與修訂指令系統(tǒng);負(fù)責(zé)結(jié)構(gòu)相關(guān)模塊的修改;負(fù)責(zé)執(zhí)行模塊和寫回模塊的修改;負(fù)責(zé)新頂層實體cpum.bdf文件的接線,主要是在創(chuàng)建了cpuentity和memory的bsf文件后,新建cpum.bdf文件并將上述兩個原件加入,利用Quartus的接線功能將原件連接起來。26

注意事項

本文(5級流水無cache cpu實驗計算機組成原理 課程設(shè)計報告)為本站會員(仙***)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(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ù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!