freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于fpga的開放式cpu設(shè)計的畢業(yè)設(shè)計-資料下載頁

2024-11-07 22:03本頁面

【導(dǎo)讀】全滿足其產(chǎn)品要求,動態(tài)CPU的開發(fā)已經(jīng)越來越重要。本文基于現(xiàn)代EDA技術(shù),參?,F(xiàn),并進(jìn)行了相關(guān)仿真驗證。路,設(shè)計了數(shù)據(jù)通路上的各功能模塊,并采用VerilogHDL語言實現(xiàn)各功能模塊。

  

【正文】 的,只會使信息的利用率下降。所以這種方法在復(fù)雜系統(tǒng)中很少單獨采用,往往與其它編碼方法混合起來使用。 ( 2 )字段編碼法 將微命令字段分為若干個小段,每段內(nèi)采用最短編碼法,段與段之間采用直接控制法。這種方法段內(nèi)位數(shù)少、段間不干預(yù)、控制靈活。進(jìn)一步分為字段直接編碼法和字段間接編碼法。 ( 3 )混合控制法 把直接控制法和字段直接編碼法相結(jié)合使用,以便能綜合考慮微指令字長,靈活性,微程序執(zhí)行速度等因素。 根據(jù)以上比較,本 CPU 系統(tǒng) 采用直接控制法和字段直接編碼法相結(jié)合的微命令字 段編碼方式。 微指令的格式 大體可劃分為兩大類:水平微指令和垂直微指令。微指令的編譯方法是決定微指令格式的主要因素,在設(shè)計計算機(jī)時考慮到速度、價格因素采用不同的編譯方法,即使在同一臺計算機(jī)中,也有幾種編譯法并存的局面。 ( l )水平型微指令 這種格式一次可定義并執(zhí)行多個并行操作微命令。同時按照微命令字段的編譯方法不同又分為 3 種,一種是直接控制法全水平型微指令,不采用譯碼器,另一種是字段譯碼法水平型微指令,第三種是直接和譯碼相混合的水平型微指令。 ( 2 )垂直型微指令 這種格式在微指令中設(shè)置微操作碼,對微操作碼進(jìn)行 譯碼,確定微指令功能。垂直型微指令的結(jié)構(gòu)類似于機(jī)器指令的結(jié)構(gòu),每條微指令的功能較簡單,因此,實現(xiàn)一條機(jī)器指令的微程序要比水平型微指令編寫的微程序長得多,實際上是以較長的微程序換取較短的微指令字長。 對兩種微指令格式比較, 本系統(tǒng) 采用水 平型微指令格式,主要因為水平型微指令并行操作力強(qiáng),靈活,效率高 。 控制器的具體實現(xiàn)及 原理圖 將在以下的存儲器及流水線設(shè)計中給出相關(guān)部分。 存儲器設(shè)計及實現(xiàn) 控制器中的存儲器 本科生畢業(yè)設(shè)計(論文) 21 由于在 Quartus II 軟件中,可以很方便的從元件庫中調(diào)出并根據(jù)需要配置想要的 ROM 或 RAM,所以存儲器可以很方便獲得。這里只是要說明一下 ,控制 器中的存儲器可由可編程存儲器 ROM 構(gòu)成 ,優(yōu)點是可以修改微程序或者說修改指令系統(tǒng),通常把由可編程存儲器構(gòu)成、可通過改變微指令和微程序來改變機(jī)器的指令系統(tǒng)的設(shè)計叫做動態(tài)微程序設(shè)計。動態(tài)微程序設(shè)計的出發(fā)點是為了使計算機(jī)能更靈活、更有效地適應(yīng)于不同的設(shè)計目標(biāo)。比如說允許用戶借助可寫控 制存儲器在原來指令系統(tǒng)的基礎(chǔ)上增加一些指令來提高程序的執(zhí)行效率, 可擴(kuò)充 自己需要 的指令,然后把擴(kuò)充的指令所對應(yīng)的微指令信息寫入控制存儲器的相應(yīng)單元中便可。 本系統(tǒng)既是動態(tài)微程 序設(shè)計,可以再 ROM 中擴(kuò)充指令。 寄存器 模塊的代碼編寫 及實現(xiàn) 下面給出 寄存器模塊的 Verilog HDL 語言實現(xiàn): module RegFile ( RsData, RtData, clk, RegWriteData, RegWriteAddr, RegWriteEn, RsAddr, RtAddr )。 input clk。 input [31:0] RegWriteData。 input [4:0] RegWriteAddr。 input RegWriteEn。 input [4:0] RsAddr, RtAddr。 output [31:0]RsData。 output [31:0]RtData。 reg [31:0] regs [0:31]。 assign RsData = (RsAddr == 539。b0) ? 3239。b0 : regs[RsAddr]。 assign RtData = (RtAddr == 539。b0) ? 3239。b0 : regs[RtAddr]。 always @ (negedge clk) begin if (RegWriteEn) regs[RegWriteAddr] = RegWriteData。 end endmodule 圖 34 是寄存器模塊的原理圖 本科生畢業(yè)設(shè)計(論文) 22 圖 34 寄存器原理圖 本科生畢業(yè)設(shè)計(論文) 23 第 四 章 流水線的設(shè)計及實現(xiàn) 本 CPU 采用 5 級流水線, 5 個流水段分別命名為 IF(取指 ),ID(指令譯碼) ,EXE(執(zhí)行) ,MEM(訪存)和 WB(回寫)。 整個流水線之間的關(guān)系和數(shù)據(jù)流向如下圖所示 圖 4 流水線整體結(jié)構(gòu)圖 IF 級設(shè)計 IF 流水線的功能 在 IF 級, 使用 PC 的內(nèi)容訪問指令存儲器,取出指令,并在當(dāng)前 IF 周期結(jié)束時,把指令送往到流水線寄存器中,同時計算出下一條指令地址。這樣,當(dāng)下一個 IF 周期到來時, PC 得到新的指令地址, 流水線 寄存器得到之前 IF 周期取出的指令。 PC 寄存器的輸入值有 5 個來源: ( 1 ) 中斷入口地址: 0; ( 2 )分支地址:由信號 Branch 來控制; ( 3 )跳轉(zhuǎn)到立即數(shù):由信號 Jump 來控制; ( 4 )跳轉(zhuǎn)到寄存器值:由信號 Jr 來控制; ( 5 ) PC + 4 ,當(dāng)上述控制信號無效時,程序順序執(zhí)行。 IF 流水線的代碼編寫及實現(xiàn) IF 流水線的 Verilog HDL 語言實現(xiàn): module IF ( pc, instr, clk, rst, Branch, WritePC, BranchAddr )。 input clk, rst。 input Branch, WritePC。 input[31:0] BranchAddr。 output [31:0]instr。 output [31:0]pc。 本科生畢業(yè)設(shè)計(論文) 24 reg [31:0] pc。 wire [31:0] address。 always @(posedge clk) begin if(rst) pc = 3239。b0。 else if (WritePC) begin if(Branch) pc = BranchAddr+4。 else pc = pc + 4。 end else pc = pc。 end assign address = rst?0:(Branch?BranchAddr:pc)。 instrmem lpm_rom_inst(.address(address[5:2]), .clock(clk), .q(instr))。 endmodule 圖 41 是 IF 流水線的原理圖 圖 41 IF 流水線原理圖 ID 流水線設(shè)計 ID 流水線的功能 指令譯碼階段主要完成以下 4 個任務(wù): ( 1 )指令譯碼; ( 2 )從寄存器中讀出數(shù)據(jù); ( 3 )生成分支 地址; 本科生畢業(yè)設(shè)計(論文) 25 ( 4 )沖突檢測。 其中,指令譯碼只對 I 格式和 J 格式指令進(jìn)行譯碼,產(chǎn)生指令在 EX 級、 MEM 級和 WB 級的控制信號,而將 R 格式指令放在 EX 級進(jìn)行譯碼,這樣分割了組合邏輯,加快了譯碼速度。 ID 流水線的代碼編寫及實現(xiàn) 由于 ID 流水線的 Verilog HDL 語言實現(xiàn) 代碼較多,這里僅列出關(guān)鍵部分: module ID( clk,rst,D_IR,D_NPC, E_WriteReg, E_RD, E_Result, M_WriteReg, M_RD, M_Result, W_WriteReg,W_RegWriteAddr,W_RegWriteData, //output WritePC,Branch,WriteIR,ReadMem,WriteReg,MemToReg,WriteMem, ALUcontrol,RegDes,ALUSrcB,FWDB,FWDA, BranchAddr, ea,eb,ei,ert,erd)。 input clk,rst。 input [31:0] D_IR,D_NPC。 input E_WriteReg,M_WriteReg,W_WriteReg。 input [4:0] E_RD,M_RD,W_RegWriteAddr。 input [31:0] E_Result,M_Result,W_RegWriteData。 output WritePC,Branch,WriteIR,ReadMem,WriteReg,MemToReg,WriteMem,RegDes,ALUSrcB。 output [3:0] ALUcontrol。 output [1:0] FWDA,FWDB。 output [31:0] BranchAddr。 output [31:0] ea,eb,ei。 output [4:0] ert,erd。 wire [31:0] RegA,RegB。 `define opfield 31:26 `define rs 25:21 `define rt 20:16 `define immediate 15:0 本科生畢業(yè)設(shè)計(論文) 26 `define rd 15:11 `define funct 5:0 wire [5:0] op。 wire [4:0] RtAddr, RdAddr, RsAddr。 wire [5:0] func。 wire [15:0] immediate。 assign op = D_IR[`opfield]。 assign RtAddr = D_IR[`rt]。 assign RdAddr = D_IR[`rd]。 assign RsAddr = D_IR[`rs]。 assign func = D_IR[`funct]。 assign immediate = D_IR[`immediate]。 … 圖 42 是 ID 流水線的原理圖 圖 42 ID 流水線原理圖 EXE 流水線設(shè)計 EXE 流水線的功能 EXE 級主要由以下幾個模塊組成: ( 1 ) alu 模塊:負(fù)責(zé)完成算術(shù)和邏輯運算; 本科生畢業(yè)設(shè)計(論文) 27 ( 2 ) Shifter 模塊:負(fù)責(zé)完成移位運算; ( 3 ) ALUCntrl 模塊:負(fù)責(zé)生成 alu 模塊和 Shifer 模塊的運算類型控信號; ( 4 ) Forward 模塊:在發(fā)生數(shù)據(jù)沖突時,負(fù)責(zé)生成前遞控制信號 ForwardA 和ForwardB ,從而將 MEM 級或 WB 級的數(shù)據(jù)前遞到 EXE 級。 EXE 流水線的代碼編寫及實現(xiàn) EXE 流水線的 Verilog HDL 語言實現(xiàn) : module EXE( E_RegDes,E_ALUSrcB, E_ALUcontrol, E_A,E_B,E_I, E_RT,E_RD, ALUResult, mrd,mb )。 input E_RegDes,E_ALUSrcB。 input [3:0] E_ALUcontrol。 input [31:0] E_A,E_B,E_I。 input [4:0] E_RT,E_RD。 output [31:0] ALUResult。 output [4:0] mrd。 output [31:0] mb。 wire [31:0] ALUOpB。 assign ALUOpB = E_ALUSrcB?E_B:E_I。 assign mrd = E_RegDes?E_RD:E_RT。 assign mb = E_B。 ALU ALU(.ALUResult(ALUResult),.ALUcontrol(E_ALUcontrol), .ALUOpA(E_A), .ALUOpB(ALUOpB))。 endmodule 圖 43 是 EXE 流水線的原理圖 本科生畢業(yè)設(shè)計(論文) 28 圖 43 EXE 流水線原理圖 MEM 流水線設(shè)計 MEM 流水線的功能 MEM 級是專為 Load / Store 指令而設(shè)置的。要存儲的數(shù)據(jù)來自寄存器堆,訪問存儲器的地址由 ALU 計算得出。 Load 指令讀存儲器,并把讀出的數(shù)據(jù)寫入流水線寄存器。 Store 指令把來自寄存器堆的數(shù)據(jù)寫入存儲器。 ALU 計算結(jié)果如果不是存儲器地址則直接寫入流水線寄存器。 MEM 流水線的代碼編寫及實現(xiàn) MEM 流水線的 Verilog HDL 語言實現(xiàn) : module MEM( c
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1