⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 processor.v

📁 MIPS CPU tested in Icarus Verilog
💻 V
📖 第 1 页 / 共 2 页
字号:
		    .Src2(Src),		    .ALUOP(Aluop),		    .RegDest(Regdest),		    .Memory_Read(Memread),		    .Memory_Write(Memwrite),		    .Mem2Reg(Mem2reg),		    .IntFP(Intfp),		    .ArSh(Arsh));   assign 		  In0Sum2 = FetchDecode[57:32];   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Hazard Unit;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   HazardUnit hazard (.Clock(FastClock),		      .Reset(Reset),		      .Instruction(FetchDecode[31:0]),		      .MemWb_WrReg(MemoryWriteBack[4:0]),		      .ExMem_WrReg(ExecuteMemory[4:0]),		      .DecEx_WrRegRd(DecodeExecute[9:5]),		      .DecEx_WrRegRt(DecodeExecute[14:10]),		      .DecEx_RegDest(Regdest),		      .DecEx_WrRF(DecodeExecute[154]),		      .ExMem_WrRF(ExecuteMemory[74]),		      .MemWb_WrRF(MemoryWriteBack[72]),		      .HazardSelect(hazardSel),		      .FetchDec_Write(fdWr), //?		      .PC_Write(PC)); //?   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Hazard Mux;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   MUX_2_1 #18 MuxHaz (.AInput({Wr_RF,Mem2reg,Memread,Memwrite,Arsh,Intfp,BranchS,Regdest,Aluop,Src}),		       .BInput(18'b0),		       .Select(hazardSel),		       .Output(Signals));   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Left Shift;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   leftShift #26 LeftShift (.AInput({10'b0000000000,Instruction[15:0]}),			    .Output(In1Sum2));   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Adder 2 (PC+1+offset);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   adder Adder2 (.AInput(In0Sum2),		 .BInput(In1Sum2),		 .Output(OutSum2));   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Mux Dir A;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   MUX_3_1 #5 SrcAMux (.AInput(FetchDecode[25:21]),		       .BInput(FetchDecode[20:16]),		       .CInput(FetchDecode[15:11]),		       .Select({Intfp,Arsh}),		       .Output(OutSrcAMux));   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Register File;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;//   RegisterFile Registers (.Resetb(Reset),//			   .Clock(FastClock),//			   .ReadAddressA(OutSrcAMux),//			   .ReadDataA(DataA),//			   .ReadAddressB(FetchDecode[20:16]),//			   .ReadDataB(DataB),//			   .WriteAddress(MemoryWriteBack[4:0]),//			   .WriteData(OutM2RMuxInWrData),//			   .Write(MemoryWriteBack[72]));   RegisterFile RF_0 (.Resetb(Reset),		      .Clock(FastClock),		      .ReadAddressA(OutSrcAMux),		      .ReadAddressB(FetchDecode[20:16]),		      .ReadDataA(DataA),		      .ReadDataB(DataB),		      .WriteAddress(MemoryWriteBack[4:0]),		      .Write(MemoryWriteBack[72]),		      .WriteData(OutM2RMuxInWrData));   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Extension-32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   signExtension #16 Ext32 (.AInput(FetchDecode[15:0]),			    .Output(Immed_Ext_32));   //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Execute Modules!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   assign 		  In1BranchMux = DecodeExecute[136:111];   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;RegDest MUX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   assign 		  In0DestMux = DecodeExecute[14:10];   assign 		  In1DestMux = DecodeExecute[9:5];   assign 		  In2DestMux = DecodeExecute[4:0];   assign 		  RegDest_Sig = DecodeExecute[145:144];   MUX_3_1 #5 RegDest_Mux (.AInput(In0DestMux),			   .BInput(In1DestMux),			   .CInput(In2DestMux),			   .Select(RegDest_Sig),			   .Output(OutDestMux));   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Forwarding Unit;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   ForwardUnit forward (.Clock(FastClock),			.Reset(Reset),			.AddressA(OutSrcAMux),			.AddressB(FetchDecode[20:16]),			.ExDest(OutDestMux),			.MemDest(ExecuteMemory[4:0]),			.WbDest(MemoryWriteBack[4:0]),			.DecEx_WrRF(DecodeExecute[154]),			.ExMem_WrRF(ExecuteMemory[74]),			.MemWb_WrRF(MemoryWriteBack[72]),			.Forward1(fw1Sel),			.Forward2(fw2Sel));   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Forwarding MUX 1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   MUX_3_1 #32 FWMux1 (.AInput(DecodeExecute[110:79]),		       .BInput(ExecuteMemory[68:37]),		       .CInput(OutM2RMuxInWrData),		       .Select(fw1Sel),		       .Output(dataA));   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Forwarding MUX 2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   MUX_3_1 #32 FWMux2 (.AInput(DecodeExecute[78:47]),		       .BInput(ExecuteMemory[68:37]),		       .CInput(OutM2RMuxInWrData),		       .Select(fw2Sel),		       .Output(In0AluMux));      //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ALU MUX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;//   assign 		  In0AluMux = DecodeExecute[78:47];   assign 		  In1AluMux = DecodeExecute[46:15];   assign 		  Src2_Sig = DecodeExecute[137];   MUX_2_1 #32 ALUMux (.AInput(In0AluMux),		       .BInput(In1AluMux),		       .Select(Src2_Sig),		       .Output(dataB_OutAluMux));   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ALU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;//   assign 		  dataA = DecodeExecute[110:79];   assign 		  ALUOP_Sig = DecodeExecute[143:138];   ALU32 ALU (.AInput(dataA),	      .BInput(dataB_OutAluMux),	      .OpCode(ALUOP_Sig),	      .Clock(FastClock),	      .Reset(Reset),	      .Output(ALURes),	      .Overflow(Overflow),	      .Zero(Zero));   assign 		  Branch_Sig = DecodeExecute[146];   assign 		  BranchSel = Branch_Sig & Zero;   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;FPU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   FPU32 FPU (.AInput(dataA),	      .BInput(dataB_OutAluMux),	      .OpCode(ALUOP_Sig),	      .Clock(FastClock),	      .Reset(Reset),	      .Output(FPURes),	      .Overflow(Overflow),	      .Zero(Zero));   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ALU/FPU MUX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   assign 		  IntFP_Sig = DecodeExecute[147];   MUX_2_1 #32 ALU_FPU_Mux (.AInput(ALURes),			    .BInput(FPURes),			    .Select(IntFP_Sig),			    .Output(ALU_FPU_Out));   assign 		  MSignals = DecodeExecute[150:149];   assign 		  WBSignals = DecodeExecute[154:151];   //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Memory Modules!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Data Memory;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Data Memory needs instantiation%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   //The output of the memory is DataBusRead   assign 		  memdataAddress = ExecuteMemory[68:37];   assign 		  memdataWrData = ExecuteMemory[36:5];   assign 		  mem_read = ExecuteMemory[70];   assign 		  mem_write = ExecuteMemory[69];   assign 		  WbSignals = ExecuteMemory[74:71];   assign 		  reg_Dest = ExecuteMemory[4:0];   assign 		  MemoryWrite = mem_write;   assign 		  DataBusWrite = memdataWrData;   assign 		  AddressBusData = memdataAddress;   assign 		  MemoryRead = mem_read;   //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Write Back Modules!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;E24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   assign 		  memRdData = MemoryWriteBack[68:37];   signExtension #24 e24 (.AInput(memRdData[7:0]),			  .Output(sign24));   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Z24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   zeroExtension #24 z24 (.AInput(memRdData[7:0]),			  .Output(zero24));   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;E16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   signExtension #16 e16 (.AInput(memRdData[15:0]),			  .Output(sign16));   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Z24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   zeroExtension #16 z16 (.AInput(memRdData[15:0]),			  .Output(zero16));   //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Mem2Reg MUX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;   assign 		  ALU_FPU_Res = MemoryWriteBack[36:5];   assign 		  memtoreg = MemoryWriteBack[71:69];   MUX_6_1 #32 M2RMux (.AInput(ALU_FPU_Res),		       .BInput(sign24),		       .CInput(zero24),		       .DInput(sign16),		       .EInput(zero16),		       .FInput(memRdData),		       .Select(memtoreg),		       .Output(OutM2RMuxInWrData));   assign 		  OutRegDestMuxWB = MemoryWriteBack[4:0];   assign 		  write_rf = MemoryWriteBack[72];//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//-------------------------------------------------------------------------------------------------------------------------//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<   always @ (posedge SlowClock)     begin	if(Reset == 1'b1)	  begin //Clear all stage registers	     FetchDecode[57:0] = {26'b0,6'b111111,26'b0};	     DecodeExecute[154:0] = 0;	     ExecuteMemory[74:0] = 0;	     MemoryWriteBack[72:0] = 0;	  end	else	  begin	     //**********FetchDecode Latch***************	     FetchDecode[31:0] <= InstructionBusRead;	     FetchDecode[57:32] <= In0_Branch_Mux_Out_Sum1;	     //**********DecodeExecute Latch***************	     DecodeExecute[4:0] <= Instruction[10:6];	     DecodeExecute[9:5] <= Instruction[15:11];	     DecodeExecute[14:10] <= Instruction[20:16];	     DecodeExecute[46:15] <= Immed_Ext_32;	     DecodeExecute[78:47] <= DataB;	     DecodeExecute[110:79] <= DataA;	     DecodeExecute[136:111] <= OutSum2;	     DecodeExecute[154:137] <= Signals;	     //DecodeExecute[137] <= Src;	     //DecodeExecute[143:138] <= Aluop;	     //DecodeExecute[145:144] <= Regdest;	     //DecodeExecute[146] <= BranchS;	     //DecodeExecute[147] <= Intfp;	     //DecodeExecute[148] <= Arsh;	     //DecodeExecute[149] <= Memwrite;	     //DecodeExecute[150] <= Memread;	     //DecodeExecute[153:151] <= Mem2reg;	     //DecodeExecute[154] <= Wr_RF;	     //**********ExecuteMemory Latch***************	     ExecuteMemory[4:0] <= OutDestMux;	     ExecuteMemory[36:5] <= In0AluMux;	     ExecuteMemory[68:37] <= ALU_FPU_Out;	     ExecuteMemory[70:69] <= MSignals;	     ExecuteMemory[74:71] <= WBSignals;	     //**********MemoryWriteBack Latch***************	     MemoryWriteBack[4:0] <= reg_Dest;	     MemoryWriteBack[36:5] <= memdataAddress;	     MemoryWriteBack[68:37] <= DataBusRead;	     MemoryWriteBack[72:69] <= WbSignals;	  end // else: !if(Reset == 1'b1)     end // always @ (posedge SlowClock)endmodule // processor

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -