mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	replaced flopenl with flopenr when clearing to 0
This commit is contained in:
		
							parent
							
								
									398337951d
								
							
						
					
					
						commit
						0516ee768b
					
				
							
								
								
									
										13
									
								
								wally-pipelined/src/cache/dcachefsm.sv
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								wally-pipelined/src/cache/dcachefsm.sv
									
									
									
									
										vendored
									
									
								
							@ -146,18 +146,7 @@ module dcachefsm
 | 
			
		||||
 | 
			
		||||
  always_ff @(posedge clk, posedge reset)
 | 
			
		||||
    if (reset)    CurrState <= #1 STATE_READY;
 | 
			
		||||
    else CurrState <= #1 NextState;
 | 
			
		||||
 | 
			
		||||
/* -----\/----- EXCLUDED -----\/-----
 | 
			
		||||
  flopenl #(.TYPE(statetype))
 | 
			
		||||
  StateReg(.clk,
 | 
			
		||||
	   .load(reset),
 | 
			
		||||
	   .en(1'b1),
 | 
			
		||||
	   .d(NextState),
 | 
			
		||||
	   .q(CurrState),
 | 
			
		||||
	   .val(STATE_READY));
 | 
			
		||||
 -----/\----- EXCLUDED -----/\----- */
 | 
			
		||||
  
 | 
			
		||||
    else CurrState <= #1 NextState;  
 | 
			
		||||
  
 | 
			
		||||
  // next state logic and some state ouputs.
 | 
			
		||||
  always_comb begin
 | 
			
		||||
 | 
			
		||||
@ -77,7 +77,7 @@ module flopenr #(parameter WIDTH = 8) (
 | 
			
		||||
    if (reset)    q <= #1 0;
 | 
			
		||||
    else if (en) q <= #1 d;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
// flop with enable, asynchronous load
 | 
			
		||||
module flopenl #(parameter WIDTH = 8, parameter type TYPE=logic [WIDTH-1:0]) (
 | 
			
		||||
  input  logic clk, load, en,
 | 
			
		||||
@ -89,7 +89,7 @@ module flopenl #(parameter WIDTH = 8, parameter type TYPE=logic [WIDTH-1:0]) (
 | 
			
		||||
    if (load)    q <= #1 val;
 | 
			
		||||
    else if (en) q <= #1 d;
 | 
			
		||||
endmodule
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
// flop with asynchronous reset, synchronous clear
 | 
			
		||||
module floprc #(parameter WIDTH = 8) (
 | 
			
		||||
  input  logic clk,
 | 
			
		||||
 | 
			
		||||
@ -115,19 +115,17 @@ module csrm #(parameter
 | 
			
		||||
  assign IllegalCSRMWriteReadonlyM = CSRMWriteM && (CSRAdrM == MVENDORID || CSRAdrM == MARCHID || CSRAdrM == MIMPID || CSRAdrM == MHARTID);
 | 
			
		||||
 | 
			
		||||
  // CSRs
 | 
			
		||||
  flopenl #(`XLEN) MTVECreg(clk, reset, WriteMTVECM, {CSRWriteValM[`XLEN-1:2], 1'b0, CSRWriteValM[0]}, `XLEN'b0, MTVEC_REGW); //busybear: changed reset value to 0
 | 
			
		||||
  flopenr #(`XLEN) MTVECreg(clk, reset, WriteMTVECM, {CSRWriteValM[`XLEN-1:2], 1'b0, CSRWriteValM[0]}, MTVEC_REGW); //busybear: changed reset value to 0
 | 
			
		||||
  generate
 | 
			
		||||
    if (`S_SUPPORTED | (`U_SUPPORTED & `N_SUPPORTED)) begin // DELEG registers should exist
 | 
			
		||||
      flopenl #(`XLEN) MEDELEGreg(clk, reset, WriteMEDELEGM, CSRWriteValM & MEDELEG_MASK /*12'h7FF*/, `XLEN'b0, MEDELEG_REGW);
 | 
			
		||||
      flopenl #(`XLEN) MIDELEGreg(clk, reset, WriteMIDELEGM, CSRWriteValM & MIDELEG_MASK /*12'h222*/, `XLEN'b0, MIDELEG_REGW);
 | 
			
		||||
      flopenr #(`XLEN) MEDELEGreg(clk, reset, WriteMEDELEGM, CSRWriteValM & MEDELEG_MASK /*12'h7FF*/, MEDELEG_REGW);
 | 
			
		||||
      flopenr #(`XLEN) MIDELEGreg(clk, reset, WriteMIDELEGM, CSRWriteValM & MIDELEG_MASK /*12'h222*/, MIDELEG_REGW);
 | 
			
		||||
    end else begin
 | 
			
		||||
      assign MEDELEG_REGW = 0;
 | 
			
		||||
      assign MIDELEG_REGW = 0;
 | 
			
		||||
    end
 | 
			
		||||
  endgenerate
 | 
			
		||||
 | 
			
		||||
//  flopenl #(`XLEN) MIPreg(clk, reset, WriteMIPM, CSRWriteValM, zero, MIP_REGW);
 | 
			
		||||
//  flopenl #(`XLEN) MIEreg(clk, reset, WriteMIEM, CSRWriteValM, zero, MIE_REGW);
 | 
			
		||||
  flopenr #(`XLEN) MSCRATCHreg(clk, reset, WriteMSCRATCHM, CSRWriteValM, MSCRATCH_REGW);
 | 
			
		||||
  flopenr #(`XLEN) MEPCreg(clk, reset, WriteMEPCM, NextEPCM, MEPC_REGW); 
 | 
			
		||||
  flopenr #(`XLEN) MCAUSEreg(clk, reset, WriteMCAUSEM, NextCauseM, MCAUSE_REGW);
 | 
			
		||||
@ -135,13 +133,13 @@ module csrm #(parameter
 | 
			
		||||
  else flopenr #(`XLEN) MTVALreg(clk, reset, WriteMTVALM, NextMtvalM, MTVAL_REGW);
 | 
			
		||||
  generate
 | 
			
		||||
    if (`BUSYBEAR == 1)
 | 
			
		||||
      flopenl #(32)   MCOUNTERENreg(clk, reset, WriteMCOUNTERENM, {CSRWriteValM[31:2],1'b0,CSRWriteValM[0]}, 32'b0, MCOUNTEREN_REGW);
 | 
			
		||||
      flopenr #(32)   MCOUNTERENreg(clk, reset, WriteMCOUNTERENM, {CSRWriteValM[31:2],1'b0,CSRWriteValM[0]}, MCOUNTEREN_REGW);
 | 
			
		||||
    else if (`BUILDROOT == 1)
 | 
			
		||||
      flopenl #(32)   MCOUNTERENreg(clk, reset, WriteMCOUNTERENM, CSRWriteValM[31:0], 32'h0, MCOUNTEREN_REGW);
 | 
			
		||||
      flopenr #(32)   MCOUNTERENreg(clk, reset, WriteMCOUNTERENM, CSRWriteValM[31:0], MCOUNTEREN_REGW);
 | 
			
		||||
    else
 | 
			
		||||
      flopenl #(32)   MCOUNTERENreg(clk, reset, WriteMCOUNTERENM, CSRWriteValM[31:0], 32'hFFFFFFFF, MCOUNTEREN_REGW);
 | 
			
		||||
  endgenerate
 | 
			
		||||
  flopenl #(32)   MCOUNTINHIBITreg(clk, reset, WriteMCOUNTINHIBITM, CSRWriteValM[31:0], 32'h0, MCOUNTINHIBIT_REGW);
 | 
			
		||||
  flopenr #(32)   MCOUNTINHIBITreg(clk, reset, WriteMCOUNTINHIBITM, CSRWriteValM[31:0], MCOUNTINHIBIT_REGW);
 | 
			
		||||
 | 
			
		||||
  // There are PMP_ENTRIES = 0, 16, or 64 PMPADDR registers, each of which has its own flop
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -85,10 +85,10 @@ module csrs #(parameter
 | 
			
		||||
      assign WriteSCOUNTERENM = CSRSWriteM && (CSRAdrM == SCOUNTEREN) && ~StallW;
 | 
			
		||||
 | 
			
		||||
      // CSRs
 | 
			
		||||
      flopenl #(`XLEN) STVECreg(clk, reset, WriteSTVECM, {CSRWriteValM[`XLEN-1:2], 1'b0, CSRWriteValM[0]}, `XLEN'b0, STVEC_REGW); //busybear: change reset to 0
 | 
			
		||||
      flopenr #(`XLEN) STVECreg(clk, reset, WriteSTVECM, {CSRWriteValM[`XLEN-1:2], 1'b0, CSRWriteValM[0]}, STVEC_REGW); //busybear: change reset to 0
 | 
			
		||||
      flopenr #(`XLEN) SSCRATCHreg(clk, reset, WriteSSCRATCHM, CSRWriteValM, SSCRATCH_REGW);
 | 
			
		||||
      flopenr #(`XLEN) SEPCreg(clk, reset, WriteSEPCM, NextEPCM, SEPC_REGW); 
 | 
			
		||||
      flopenl #(`XLEN) SCAUSEreg(clk, reset, WriteSCAUSEM, NextCauseM, `XLEN'b0, SCAUSE_REGW);
 | 
			
		||||
      flopenr #(`XLEN) SCAUSEreg(clk, reset, WriteSCAUSEM, NextCauseM, SCAUSE_REGW);
 | 
			
		||||
      if(`QEMU) assign STVAL_REGW = `XLEN'b0;
 | 
			
		||||
      else flopenr #(`XLEN) STVALreg(clk, reset, WriteSTVALM, NextMtvalM, STVAL_REGW);
 | 
			
		||||
      if (`MEM_VIRTMEM)
 | 
			
		||||
@ -96,17 +96,17 @@ module csrs #(parameter
 | 
			
		||||
      else
 | 
			
		||||
        assign SATP_REGW = 0; // hardwire to zero if virtual memory not supported
 | 
			
		||||
      if (`BUSYBEAR == 1)
 | 
			
		||||
        flopenl #(32)   SCOUNTERENreg(clk, reset, WriteSCOUNTERENM, {CSRWriteValM[31:2],1'b0,CSRWriteValM[0]}, 32'b0, SCOUNTEREN_REGW);
 | 
			
		||||
        flopenr #(32)   SCOUNTERENreg(clk, reset, WriteSCOUNTERENM, {CSRWriteValM[31:2],1'b0,CSRWriteValM[0]}, SCOUNTEREN_REGW);
 | 
			
		||||
      else if (`BUILDROOT == 1)
 | 
			
		||||
        flopenl #(32)   SCOUNTERENreg(clk, reset, WriteSCOUNTERENM, CSRWriteValM[31:0], 32'h0, SCOUNTEREN_REGW);
 | 
			
		||||
        flopenr #(32)   SCOUNTERENreg(clk, reset, WriteSCOUNTERENM, CSRWriteValM[31:0], SCOUNTEREN_REGW);
 | 
			
		||||
      else
 | 
			
		||||
        flopenl #(32)   SCOUNTERENreg(clk, reset, WriteSCOUNTERENM, CSRWriteValM[31:0], 32'hFFFFFFFF, SCOUNTEREN_REGW);
 | 
			
		||||
      if (`N_SUPPORTED) begin
 | 
			
		||||
        logic WriteSEDELEGM, WriteSIDELEGM;
 | 
			
		||||
        assign WriteSEDELEGM = CSRSWriteM && (CSRAdrM == SEDELEG);
 | 
			
		||||
        assign WriteSIDELEGM = CSRSWriteM && (CSRAdrM == SIDELEG);
 | 
			
		||||
        flopenl #(`XLEN) SEDELEGreg(clk, reset, WriteSEDELEGM, CSRWriteValM & SEDELEG_MASK /* 12'h1FF */, `XLEN'b0, SEDELEG_REGW);
 | 
			
		||||
        flopenl #(`XLEN) SIDELEGreg(clk, reset, WriteSIDELEGM, CSRWriteValM, `XLEN'b0, SIDELEG_REGW);
 | 
			
		||||
        flopenr #(`XLEN) SEDELEGreg(clk, reset, WriteSEDELEGM, CSRWriteValM & SEDELEG_MASK, SEDELEG_REGW);
 | 
			
		||||
        flopenr #(`XLEN) SIDELEGreg(clk, reset, WriteSIDELEGM, CSRWriteValM, SIDELEG_REGW);
 | 
			
		||||
      end else begin
 | 
			
		||||
        assign SEDELEG_REGW = 0;
 | 
			
		||||
        assign SIDELEG_REGW = 0;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user