forked from Github_Repos/cvw
		
	removed unnecesary PC registers in ifu
This commit is contained in:
		
							parent
							
								
									8d484174a7
								
							
						
					
					
						commit
						eb86bfc084
					
				@ -117,7 +117,7 @@ module controller(
 | 
			
		||||
                      if (InstrD[31:27] == 5'b00010)
 | 
			
		||||
                        ControlsD = `CTRLW'b1_000_00_10_001_0_00_0_0_0_0_0_0_01_0; // lr
 | 
			
		||||
                      else if (InstrD[31:27] == 5'b00011)
 | 
			
		||||
                        ControlsD = `CTRLW'b1_101_01_01_101_0_00_0_0_0_0_0_0_01_0; // sc
 | 
			
		||||
                        ControlsD = `CTRLW'b1_101_01_01_100_0_00_0_0_0_0_0_0_01_0; // sc
 | 
			
		||||
                      else 
 | 
			
		||||
                        ControlsD = `CTRLW'b1_101_01_11_001_0_00_0_0_0_0_0_0_10_0;; // amo
 | 
			
		||||
                    end else
 | 
			
		||||
@ -125,23 +125,23 @@ module controller(
 | 
			
		||||
        7'b0110011: if (Funct7D == 7'b0000000 || Funct7D == 7'b0100000)
 | 
			
		||||
                      ControlsD = `CTRLW'b1_000_00_00_000_0_10_0_0_0_0_0_0_00_0; // R-type 
 | 
			
		||||
                    else if (Funct7D == 7'b0000001 && `M_SUPPORTED)
 | 
			
		||||
                      ControlsD = `CTRLW'b1_000_00_00_100_0_00_0_0_0_0_0_1_00_0; // Multiply/Divide
 | 
			
		||||
                      ControlsD = `CTRLW'b1_000_00_00_011_0_00_0_0_0_0_0_1_00_0; // Multiply/Divide
 | 
			
		||||
                    else
 | 
			
		||||
                      ControlsD = `CTRLW'b0_000_00_00_000_0_00_0_0_0_0_0_0_00_1; // non-implemented instruction
 | 
			
		||||
        7'b0110111:   ControlsD = `CTRLW'b1_100_01_00_000_0_11_0_0_0_0_0_0_00_0; // lui
 | 
			
		||||
        7'b0111011: if ((Funct7D == 7'b0000000 || Funct7D == 7'b0100000) && `XLEN == 64)
 | 
			
		||||
                      ControlsD = `CTRLW'b1_000_00_00_000_0_10_0_0_1_0_0_0_00_0; // R-type W instructions for RV64i
 | 
			
		||||
                    else if (Funct7D == 7'b0000001 && `M_SUPPORTED && `XLEN == 64)
 | 
			
		||||
                      ControlsD = `CTRLW'b1_000_00_00_100_0_00_0_0_1_0_0_1_00_0; // W-type Multiply/Divide
 | 
			
		||||
                      ControlsD = `CTRLW'b1_000_00_00_011_0_00_0_0_1_0_0_1_00_0; // W-type Multiply/Divide
 | 
			
		||||
                    else
 | 
			
		||||
                      ControlsD = `CTRLW'b0_000_00_00_000_0_00_0_0_0_0_0_0_00_1; // non-implemented instruction
 | 
			
		||||
        7'b1100011:   ControlsD = `CTRLW'b0_010_00_00_000_1_01_0_0_0_0_0_0_00_0; // beq
 | 
			
		||||
        7'b1100111:   ControlsD = `CTRLW'b1_000_00_00_010_0_00_1_1_0_0_0_0_00_0; // jalr
 | 
			
		||||
        7'b1101111:   ControlsD = `CTRLW'b1_011_00_00_010_0_00_1_0_0_0_0_0_00_0; // jal
 | 
			
		||||
        7'b1100111:   ControlsD = `CTRLW'b1_000_00_00_000_0_00_1_1_0_0_0_0_00_0; // jalr
 | 
			
		||||
        7'b1101111:   ControlsD = `CTRLW'b1_011_00_00_000_0_00_1_0_0_0_0_0_00_0; // jal
 | 
			
		||||
        7'b1110011: if (Funct3D == 3'b000)
 | 
			
		||||
                      ControlsD = `CTRLW'b0_000_00_00_000_0_00_0_0_0_0_1_0_00_0; // privileged; decoded further in priveleged modules
 | 
			
		||||
                    else
 | 
			
		||||
                      ControlsD = `CTRLW'b1_000_00_00_011_0_00_0_0_0_1_0_0_00_0; // csrs
 | 
			
		||||
                      ControlsD = `CTRLW'b1_000_00_00_010_0_00_0_0_0_1_0_0_00_0; // csrs
 | 
			
		||||
        default:      ControlsD = `CTRLW'b0_000_00_00_000_0_00_0_0_0_0_0_0_00_1; // non-implemented instruction
 | 
			
		||||
      endcase
 | 
			
		||||
  endgenerate
 | 
			
		||||
 | 
			
		||||
@ -51,7 +51,7 @@ module datapath (
 | 
			
		||||
  input  logic             RegWriteW, 
 | 
			
		||||
  input  logic             SquashSCW,
 | 
			
		||||
  input  logic [2:0]       ResultSrcW,
 | 
			
		||||
  input  logic [`XLEN-1:0] PCLinkW,
 | 
			
		||||
  // input  logic [`XLEN-1:0] PCLinkW,
 | 
			
		||||
  input  logic [`XLEN-1:0] CSRReadValW, ReadDataW, MulDivResultW, 
 | 
			
		||||
  // Hazard Unit signals 
 | 
			
		||||
  output logic [4:0]       Rs1D, Rs2D, Rs1E, Rs2E,
 | 
			
		||||
@ -126,7 +126,7 @@ module datapath (
 | 
			
		||||
      assign SCResultW = 0;
 | 
			
		||||
  endgenerate
 | 
			
		||||
 | 
			
		||||
  mux6  #(`XLEN) resultmux(ALUResultW, ReadDataW, PCLinkW, CSRReadValW, MulDivResultW, SCResultW, ResultSrcW, ResultW);	
 | 
			
		||||
  mux5  #(`XLEN) resultmux(ALUResultW, ReadDataW, CSRReadValW, MulDivResultW, SCResultW, ResultSrcW, ResultW);	
 | 
			
		||||
/* -----\/----- EXCLUDED -----\/-----
 | 
			
		||||
  // This mux4:1 no longer needs to include PCLinkW.  This is set correctly in the execution stage.
 | 
			
		||||
  // *** need to look at how the decoder is coded to fix.
 | 
			
		||||
 | 
			
		||||
@ -49,7 +49,7 @@ module ieu (
 | 
			
		||||
  output logic [2:0]       Funct3M,
 | 
			
		||||
  // Writeback stage
 | 
			
		||||
  input  logic [`XLEN-1:0] CSRReadValW, ReadDataW, MulDivResultW,
 | 
			
		||||
  input  logic [`XLEN-1:0] PCLinkW,
 | 
			
		||||
  // input  logic [`XLEN-1:0] PCLinkW,
 | 
			
		||||
  output logic             InstrValidW,
 | 
			
		||||
  // hazards
 | 
			
		||||
  input  logic             StallE, StallM, StallW,
 | 
			
		||||
 | 
			
		||||
@ -48,7 +48,7 @@ module ifu (
 | 
			
		||||
  output logic [31:0] 	   InstrD, InstrM,
 | 
			
		||||
  output logic [`XLEN-1:0] PCM, 
 | 
			
		||||
  // Writeback
 | 
			
		||||
  output logic [`XLEN-1:0] PCLinkW,
 | 
			
		||||
  // output logic [`XLEN-1:0] PCLinkW,
 | 
			
		||||
  // Faults
 | 
			
		||||
  input  logic             IllegalBaseInstrFaultD,
 | 
			
		||||
  output logic             IllegalIEUInstrFaultD,
 | 
			
		||||
@ -212,8 +212,8 @@ module ifu (
 | 
			
		||||
  // *** redo this 
 | 
			
		||||
  flopenr #(`XLEN) PCPDReg(clk, reset, ~StallD, PCPlus2or4F, PCLinkD);
 | 
			
		||||
  flopenr #(`XLEN) PCPEReg(clk, reset, ~StallE, PCLinkD, PCLinkE);
 | 
			
		||||
  flopenr #(`XLEN) PCPMReg(clk, reset, ~StallM, PCLinkE, PCLinkM);
 | 
			
		||||
  flopenr #(`XLEN) PCPWReg(clk, reset, ~StallW, PCLinkM, PCLinkW);
 | 
			
		||||
  // flopenr #(`XLEN) PCPMReg(clk, reset, ~StallM, PCLinkE, PCLinkM);
 | 
			
		||||
  // /flopenr #(`XLEN) PCPWReg(clk, reset, ~StallW, PCLinkM, PCLinkW);
 | 
			
		||||
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user