mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Merge branch 'main' of https://github.com/davidharrishmc/riscv-wally into main
This commit is contained in:
		
						commit
						9b29710990
					
				@ -119,7 +119,7 @@ module csr #(parameter
 | 
				
			|||||||
  assign CSRSWriteM = CSRWriteM & (|PrivilegeModeW);
 | 
					  assign CSRSWriteM = CSRWriteM & (|PrivilegeModeW);
 | 
				
			||||||
  assign CSRUWriteM = CSRWriteM;  
 | 
					  assign CSRUWriteM = CSRWriteM;  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  csri  csri(.clk, .reset, .StallW, .CSRMWriteM, .CSRSWriteM,
 | 
					  csri  csri(.clk, .reset, .FlushW, .StallW, .CSRMWriteM, .CSRSWriteM,
 | 
				
			||||||
             .CSRAdrM, .ExtIntM, .TimerIntM, .SwIntM,
 | 
					             .CSRAdrM, .ExtIntM, .TimerIntM, .SwIntM,
 | 
				
			||||||
             .MIDELEG_REGW, .MIP_REGW, .MIE_REGW, .SIP_REGW, .SIE_REGW, .CSRWriteValM);
 | 
					             .MIDELEG_REGW, .MIP_REGW, .MIE_REGW, .SIP_REGW, .SIE_REGW, .CSRWriteValM);
 | 
				
			||||||
  csrsr csrsr(.clk, .reset, .StallW,
 | 
					  csrsr csrsr(.clk, .reset, .StallW,
 | 
				
			||||||
@ -137,7 +137,7 @@ module csr #(parameter
 | 
				
			|||||||
              .CSRAdrM, .PrivilegeModeW, .CSRWriteValM,
 | 
					              .CSRAdrM, .PrivilegeModeW, .CSRWriteValM,
 | 
				
			||||||
              .MCOUNTINHIBIT_REGW, .MCOUNTEREN_REGW, .SCOUNTEREN_REGW,
 | 
					              .MCOUNTINHIBIT_REGW, .MCOUNTEREN_REGW, .SCOUNTEREN_REGW,
 | 
				
			||||||
              .MTIME_CLINT,  .CSRCReadValM, .IllegalCSRCAccessM);
 | 
					              .MTIME_CLINT,  .CSRCReadValM, .IllegalCSRCAccessM);
 | 
				
			||||||
  csrm  csrm(.clk, .reset, .StallW,
 | 
					  csrm  csrm(.clk, .reset, .FlushW, .StallW,
 | 
				
			||||||
              .CSRMWriteM, .MTrapM, .CSRAdrM,
 | 
					              .CSRMWriteM, .MTrapM, .CSRAdrM,
 | 
				
			||||||
              .NextEPCM, .NextCauseM, .NextMtvalM, .MSTATUS_REGW, 
 | 
					              .NextEPCM, .NextCauseM, .NextMtvalM, .MSTATUS_REGW, 
 | 
				
			||||||
              .CSRWriteValM, .CSRMReadValM, .MTVEC_REGW,
 | 
					              .CSRWriteValM, .CSRMReadValM, .MTVEC_REGW,
 | 
				
			||||||
@ -145,7 +145,7 @@ module csr #(parameter
 | 
				
			|||||||
              .MEDELEG_REGW, .MIDELEG_REGW,.PMPCFG_ARRAY_REGW, .PMPADDR_ARRAY_REGW,
 | 
					              .MEDELEG_REGW, .MIDELEG_REGW,.PMPCFG_ARRAY_REGW, .PMPADDR_ARRAY_REGW,
 | 
				
			||||||
              .MIP_REGW, .MIE_REGW, .WriteMSTATUSM,
 | 
					              .MIP_REGW, .MIE_REGW, .WriteMSTATUSM,
 | 
				
			||||||
              .IllegalCSRMAccessM, .IllegalCSRMWriteReadonlyM);
 | 
					              .IllegalCSRMAccessM, .IllegalCSRMWriteReadonlyM);
 | 
				
			||||||
  csrs  csrs(.clk, .reset,  .StallW,
 | 
					  csrs  csrs(.clk, .reset,  .FlushW, .StallW,
 | 
				
			||||||
              .CSRSWriteM, .STrapM, .CSRAdrM,
 | 
					              .CSRSWriteM, .STrapM, .CSRAdrM,
 | 
				
			||||||
              .NextEPCM, .NextCauseM, .NextMtvalM, .SSTATUS_REGW, 
 | 
					              .NextEPCM, .NextCauseM, .NextMtvalM, .SSTATUS_REGW, 
 | 
				
			||||||
              .STATUS_TVM, .CSRWriteValM, .PrivilegeModeW,
 | 
					              .STATUS_TVM, .CSRWriteValM, .PrivilegeModeW,
 | 
				
			||||||
@ -153,12 +153,12 @@ module csr #(parameter
 | 
				
			|||||||
              .SCOUNTEREN_REGW, .SEDELEG_REGW, .SIDELEG_REGW, 
 | 
					              .SCOUNTEREN_REGW, .SEDELEG_REGW, .SIDELEG_REGW, 
 | 
				
			||||||
              .SATP_REGW, .SIP_REGW, .SIE_REGW,
 | 
					              .SATP_REGW, .SIP_REGW, .SIE_REGW,
 | 
				
			||||||
              .WriteSSTATUSM, .IllegalCSRSAccessM);
 | 
					              .WriteSSTATUSM, .IllegalCSRSAccessM);
 | 
				
			||||||
  csrn  csrn(.clk, .reset, .StallW,
 | 
					  csrn  csrn(.clk, .reset, .FlushW, .StallW,
 | 
				
			||||||
              .CSRNWriteM(CSRUWriteM), .UTrapM, .CSRAdrM,
 | 
					              .CSRNWriteM(CSRUWriteM), .UTrapM, .CSRAdrM,
 | 
				
			||||||
              .NextEPCM, .NextCauseM, .NextMtvalM, .USTATUS_REGW, 
 | 
					              .NextEPCM, .NextCauseM, .NextMtvalM, .USTATUS_REGW, 
 | 
				
			||||||
              .CSRWriteValM, .CSRNReadValM, .UEPC_REGW, .UTVEC_REGW, 
 | 
					              .CSRWriteValM, .CSRNReadValM, .UEPC_REGW, .UTVEC_REGW, 
 | 
				
			||||||
              .UIP_REGW, .UIE_REGW, .WriteUSTATUSM, .IllegalCSRNAccessM);
 | 
					              .UIP_REGW, .UIE_REGW, .WriteUSTATUSM, .IllegalCSRNAccessM);
 | 
				
			||||||
  csru  csru(.clk, .reset, .StallW,
 | 
					  csru  csru(.clk, .reset, .FlushW, .StallW,
 | 
				
			||||||
              .CSRUWriteM, .CSRAdrM, .CSRWriteValM, .CSRUReadValM,  
 | 
					              .CSRUWriteM, .CSRAdrM, .CSRWriteValM, .CSRUReadValM,  
 | 
				
			||||||
              .SetFflagsM, .FRM_REGW, .WriteFRMM, .WriteFFLAGSM,
 | 
					              .SetFflagsM, .FRM_REGW, .WriteFRMM, .WriteFFLAGSM,
 | 
				
			||||||
              .IllegalCSRUAccessM);
 | 
					              .IllegalCSRUAccessM);
 | 
				
			||||||
 | 
				
			|||||||
@ -38,7 +38,7 @@ module csri #(parameter
 | 
				
			|||||||
  SIE = 12'h104,
 | 
					  SIE = 12'h104,
 | 
				
			||||||
  SIP = 12'h144) (
 | 
					  SIP = 12'h144) (
 | 
				
			||||||
    input  logic             clk, reset, 
 | 
					    input  logic             clk, reset, 
 | 
				
			||||||
    input  logic             StallW,
 | 
					    input  logic             FlushW, StallW,
 | 
				
			||||||
    input  logic             CSRMWriteM, CSRSWriteM,
 | 
					    input  logic             CSRMWriteM, CSRSWriteM,
 | 
				
			||||||
    input  logic [11:0]      CSRAdrM,
 | 
					    input  logic [11:0]      CSRAdrM,
 | 
				
			||||||
    input  logic             ExtIntM, TimerIntM, SwIntM,
 | 
					    input  logic             ExtIntM, TimerIntM, SwIntM,
 | 
				
			||||||
@ -52,6 +52,9 @@ module csri #(parameter
 | 
				
			|||||||
  logic [11:0]     MIP_WRITE_MASK, SIP_WRITE_MASK;
 | 
					  logic [11:0]     MIP_WRITE_MASK, SIP_WRITE_MASK;
 | 
				
			||||||
  logic            WriteMIPM, WriteMIEM, WriteSIPM, WriteSIEM;
 | 
					  logic            WriteMIPM, WriteMIEM, WriteSIPM, WriteSIEM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  logic            InstrValidNotFlushedM;
 | 
				
			||||||
 | 
					  assign InstrValidNotFlushedM = ~StallW & ~FlushW;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Determine which interrupts need to be set
 | 
					  // Determine which interrupts need to be set
 | 
				
			||||||
  // assumes no N-mode user interrupts
 | 
					  // assumes no N-mode user interrupts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -66,10 +69,10 @@ module csri #(parameter
 | 
				
			|||||||
   end
 | 
					   end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Interrupt Write Enables
 | 
					  // Interrupt Write Enables
 | 
				
			||||||
  assign WriteMIPM = CSRMWriteM & (CSRAdrM == MIP) & ~StallW;
 | 
					  assign WriteMIPM = CSRMWriteM & (CSRAdrM == MIP) & InstrValidNotFlushedM;
 | 
				
			||||||
  assign WriteMIEM = CSRMWriteM & (CSRAdrM == MIE) & ~StallW;
 | 
					  assign WriteMIEM = CSRMWriteM & (CSRAdrM == MIE) & InstrValidNotFlushedM;
 | 
				
			||||||
  assign WriteSIPM = CSRSWriteM & (CSRAdrM == SIP) & ~StallW;
 | 
					  assign WriteSIPM = CSRSWriteM & (CSRAdrM == SIP) & InstrValidNotFlushedM;
 | 
				
			||||||
  assign WriteSIEM = CSRSWriteM & (CSRAdrM == SIE) & ~StallW;
 | 
					  assign WriteSIEM = CSRSWriteM & (CSRAdrM == SIE) & InstrValidNotFlushedM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Interrupt Pending and Enable Registers
 | 
					// Interrupt Pending and Enable Registers
 | 
				
			||||||
// MEIP, MTIP, MSIP are read-only
 | 
					// MEIP, MTIP, MSIP are read-only
 | 
				
			||||||
 | 
				
			|||||||
@ -70,7 +70,7 @@ module csrm #(parameter
 | 
				
			|||||||
   MIDELEG_MASK = {{(`XLEN-12){1'b0}}, 12'h222}
 | 
					   MIDELEG_MASK = {{(`XLEN-12){1'b0}}, 12'h222}
 | 
				
			||||||
) (
 | 
					) (
 | 
				
			||||||
    input logic 	     clk, reset, 
 | 
					    input logic 	     clk, reset, 
 | 
				
			||||||
    input logic 	     StallW,
 | 
					    input logic 	     FlushW, StallW,
 | 
				
			||||||
    input logic 	     CSRMWriteM, MTrapM,
 | 
					    input logic 	     CSRMWriteM, MTrapM,
 | 
				
			||||||
    input logic [11:0] 	     CSRAdrM,
 | 
					    input logic [11:0] 	     CSRAdrM,
 | 
				
			||||||
    input logic [`XLEN-1:0]  NextEPCM, NextCauseM, NextMtvalM, MSTATUS_REGW, 
 | 
					    input logic [`XLEN-1:0]  NextEPCM, NextCauseM, NextMtvalM, MSTATUS_REGW, 
 | 
				
			||||||
@ -95,6 +95,9 @@ module csrm #(parameter
 | 
				
			|||||||
  logic            WriteMSCRATCHM, WriteMEPCM, WriteMCAUSEM, WriteMTVALM;
 | 
					  logic            WriteMSCRATCHM, WriteMEPCM, WriteMCAUSEM, WriteMTVALM;
 | 
				
			||||||
  logic            WriteMCOUNTERENM, WriteMCOUNTINHIBITM;
 | 
					  logic            WriteMCOUNTERENM, WriteMCOUNTINHIBITM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  logic            InstrValidNotFlushedM;
 | 
				
			||||||
 | 
					  assign InstrValidNotFlushedM = ~StallW & ~FlushW;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 // There are PMP_ENTRIES = 0, 16, or 64 PMPADDR registers, each of which has its own flop
 | 
					 // There are PMP_ENTRIES = 0, 16, or 64 PMPADDR registers, each of which has its own flop
 | 
				
			||||||
  genvar i;
 | 
					  genvar i;
 | 
				
			||||||
  if (`PMP_ENTRIES > 0) begin:pmp
 | 
					  if (`PMP_ENTRIES > 0) begin:pmp
 | 
				
			||||||
@ -110,13 +113,13 @@ module csrm #(parameter
 | 
				
			|||||||
      else
 | 
					      else
 | 
				
			||||||
        assign ADDRLocked[i] = PMPCFG_ARRAY_REGW[i][7] | (PMPCFG_ARRAY_REGW[i+1][7] & PMPCFG_ARRAY_REGW[i+1][4:3] == 2'b01);
 | 
					        assign ADDRLocked[i] = PMPCFG_ARRAY_REGW[i][7] | (PMPCFG_ARRAY_REGW[i+1][7] & PMPCFG_ARRAY_REGW[i+1][4:3] == 2'b01);
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
      assign WritePMPADDRM[i] = (CSRMWriteM & (CSRAdrM == (PMPADDR0+i))) & ~StallW & ~ADDRLocked[i];
 | 
					      assign WritePMPADDRM[i] = (CSRMWriteM & (CSRAdrM == (PMPADDR0+i))) & InstrValidNotFlushedM & ~ADDRLocked[i];
 | 
				
			||||||
      flopenr #(`XLEN) PMPADDRreg(clk, reset, WritePMPADDRM[i], CSRWriteValM, PMPADDR_ARRAY_REGW[i]);
 | 
					      flopenr #(`XLEN) PMPADDRreg(clk, reset, WritePMPADDRM[i], CSRWriteValM, PMPADDR_ARRAY_REGW[i]);
 | 
				
			||||||
      if (`XLEN==64) begin
 | 
					      if (`XLEN==64) begin
 | 
				
			||||||
        assign WritePMPCFGM[i] = (CSRMWriteM & (CSRAdrM == (PMPCFG0+2*(i/8)))) & ~StallW & ~CFGLocked[i];
 | 
					        assign WritePMPCFGM[i] = (CSRMWriteM & (CSRAdrM == (PMPCFG0+2*(i/8)))) & InstrValidNotFlushedM & ~CFGLocked[i];
 | 
				
			||||||
        flopenr #(8) PMPCFGreg(clk, reset, WritePMPCFGM[i], CSRWriteValM[(i%8)*8+7:(i%8)*8], PMPCFG_ARRAY_REGW[i]);
 | 
					        flopenr #(8) PMPCFGreg(clk, reset, WritePMPCFGM[i], CSRWriteValM[(i%8)*8+7:(i%8)*8], PMPCFG_ARRAY_REGW[i]);
 | 
				
			||||||
      end else begin
 | 
					      end else begin
 | 
				
			||||||
        assign WritePMPCFGM[i]  = (CSRMWriteM & (CSRAdrM == (PMPCFG0+i/4))) & ~StallW & ~CFGLocked[i];
 | 
					        assign WritePMPCFGM[i]  = (CSRMWriteM & (CSRAdrM == (PMPCFG0+i/4))) & InstrValidNotFlushedM & ~CFGLocked[i];
 | 
				
			||||||
        flopenr #(8) PMPCFGreg(clk, reset, WritePMPCFGM[i], CSRWriteValM[(i%4)*8+7:(i%4)*8], PMPCFG_ARRAY_REGW[i]);
 | 
					        flopenr #(8) PMPCFGreg(clk, reset, WritePMPCFGM[i], CSRWriteValM[(i%4)*8+7:(i%4)*8], PMPCFG_ARRAY_REGW[i]);
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
@ -131,16 +134,16 @@ module csrm #(parameter
 | 
				
			|||||||
  assign MHARTID_REGW = 0;
 | 
					  assign MHARTID_REGW = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // Write machine Mode CSRs 
 | 
					  // Write machine Mode CSRs 
 | 
				
			||||||
  assign WriteMSTATUSM = CSRMWriteM & (CSRAdrM == MSTATUS) & ~StallW;
 | 
					  assign WriteMSTATUSM = CSRMWriteM & (CSRAdrM == MSTATUS) & InstrValidNotFlushedM;
 | 
				
			||||||
  assign WriteMTVECM = CSRMWriteM & (CSRAdrM == MTVEC) & ~StallW;
 | 
					  assign WriteMTVECM = CSRMWriteM & (CSRAdrM == MTVEC) & InstrValidNotFlushedM;
 | 
				
			||||||
  assign WriteMEDELEGM = CSRMWriteM & (CSRAdrM == MEDELEG) & ~StallW;
 | 
					  assign WriteMEDELEGM = CSRMWriteM & (CSRAdrM == MEDELEG) & InstrValidNotFlushedM;
 | 
				
			||||||
  assign WriteMIDELEGM = CSRMWriteM & (CSRAdrM == MIDELEG) & ~StallW;
 | 
					  assign WriteMIDELEGM = CSRMWriteM & (CSRAdrM == MIDELEG) & InstrValidNotFlushedM;
 | 
				
			||||||
  assign WriteMSCRATCHM = CSRMWriteM & (CSRAdrM == MSCRATCH) & ~StallW;
 | 
					  assign WriteMSCRATCHM = CSRMWriteM & (CSRAdrM == MSCRATCH) & InstrValidNotFlushedM;
 | 
				
			||||||
  assign WriteMEPCM = MTrapM | (CSRMWriteM & (CSRAdrM == MEPC)) & ~StallW;
 | 
					  assign WriteMEPCM = MTrapM | (CSRMWriteM & (CSRAdrM == MEPC)) & InstrValidNotFlushedM;
 | 
				
			||||||
  assign WriteMCAUSEM = MTrapM | (CSRMWriteM & (CSRAdrM == MCAUSE)) & ~StallW;
 | 
					  assign WriteMCAUSEM = MTrapM | (CSRMWriteM & (CSRAdrM == MCAUSE)) & InstrValidNotFlushedM;
 | 
				
			||||||
  assign WriteMTVALM = MTrapM | (CSRMWriteM & (CSRAdrM == MTVAL)) & ~StallW;
 | 
					  assign WriteMTVALM = MTrapM | (CSRMWriteM & (CSRAdrM == MTVAL)) & InstrValidNotFlushedM;
 | 
				
			||||||
  assign WriteMCOUNTERENM = CSRMWriteM & (CSRAdrM == MCOUNTEREN) & ~StallW;
 | 
					  assign WriteMCOUNTERENM = CSRMWriteM & (CSRAdrM == MCOUNTEREN) & InstrValidNotFlushedM;
 | 
				
			||||||
  assign WriteMCOUNTINHIBITM = CSRMWriteM & (CSRAdrM == MCOUNTINHIBIT) & ~StallW;
 | 
					  assign WriteMCOUNTINHIBITM = CSRMWriteM & (CSRAdrM == MCOUNTINHIBIT) & InstrValidNotFlushedM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  assign IllegalCSRMWriteReadonlyM = CSRMWriteM & (CSRAdrM == MVENDORID | CSRAdrM == MARCHID | CSRAdrM == MIMPID | CSRAdrM == MHARTID);
 | 
					  assign IllegalCSRMWriteReadonlyM = CSRMWriteM & (CSRAdrM == MVENDORID | CSRAdrM == MARCHID | CSRAdrM == MIMPID | CSRAdrM == MHARTID);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -42,7 +42,7 @@ module csrn #(parameter
 | 
				
			|||||||
  UTVAL = 12'h043,
 | 
					  UTVAL = 12'h043,
 | 
				
			||||||
  UIP = 12'h044) (
 | 
					  UIP = 12'h044) (
 | 
				
			||||||
    input  logic             clk, reset, 
 | 
					    input  logic             clk, reset, 
 | 
				
			||||||
    input  logic             StallW,
 | 
					    input  logic             FlushW, StallW,
 | 
				
			||||||
    input  logic             CSRNWriteM, UTrapM,
 | 
					    input  logic             CSRNWriteM, UTrapM,
 | 
				
			||||||
    input  logic [11:0]      CSRAdrM,
 | 
					    input  logic [11:0]      CSRAdrM,
 | 
				
			||||||
    input  logic [`XLEN-1:0] NextEPCM, NextCauseM, NextMtvalM, USTATUS_REGW, 
 | 
					    input  logic [`XLEN-1:0] NextEPCM, NextCauseM, NextMtvalM, USTATUS_REGW, 
 | 
				
			||||||
@ -61,12 +61,15 @@ module csrn #(parameter
 | 
				
			|||||||
    logic [`XLEN-1:0] UEDELEG_REGW, UIDELEG_REGW;
 | 
					    logic [`XLEN-1:0] UEDELEG_REGW, UIDELEG_REGW;
 | 
				
			||||||
    logic [`XLEN-1:0] USCRATCH_REGW, UCAUSE_REGW, UTVAL_REGW;
 | 
					    logic [`XLEN-1:0] USCRATCH_REGW, UCAUSE_REGW, UTVAL_REGW;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    logic             InstrValidNotFlushedM;
 | 
				
			||||||
 | 
					    assign InstrValidNotFlushedM = ~StallW & ~FlushW;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Write enables
 | 
					    // Write enables
 | 
				
			||||||
    assign WriteUSTATUSM = CSRNWriteM & (CSRAdrM == USTATUS) & ~StallW;
 | 
					    assign WriteUSTATUSM = CSRNWriteM & (CSRAdrM == USTATUS) & InstrValidNotFlushedM;
 | 
				
			||||||
    assign WriteUTVECM = CSRNWriteM & (CSRAdrM == UTVEC) & ~StallW;
 | 
					    assign WriteUTVECM = CSRNWriteM & (CSRAdrM == UTVEC) & InstrValidNotFlushedM;
 | 
				
			||||||
    assign WriteUEPCM = UTrapM | (CSRNWriteM & (CSRAdrM == UEPC)) & ~StallW;
 | 
					    assign WriteUEPCM = UTrapM | (CSRNWriteM & (CSRAdrM == UEPC)) & InstrValidNotFlushedM;
 | 
				
			||||||
    assign WriteUCAUSEM = UTrapM | (CSRNWriteM & (CSRAdrM == UCAUSE)) & ~StallW;
 | 
					    assign WriteUCAUSEM = UTrapM | (CSRNWriteM & (CSRAdrM == UCAUSE)) & InstrValidNotFlushedM;
 | 
				
			||||||
    assign WriteUTVALM = UTrapM | (CSRNWriteM & (CSRAdrM == UTVAL)) & ~StallW;
 | 
					    assign WriteUTVALM = UTrapM | (CSRNWriteM & (CSRAdrM == UTVAL)) & InstrValidNotFlushedM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // CSRs
 | 
					    // CSRs
 | 
				
			||||||
    flopenl #(`XLEN) UTVECreg(clk, reset, WriteUTVECM, {CSRWriteValM[`XLEN-1:2], 1'b0, CSRWriteValM[0]}, `RESET_VECTOR, UTVEC_REGW);
 | 
					    flopenl #(`XLEN) UTVECreg(clk, reset, WriteUTVECM, {CSRWriteValM[`XLEN-1:2], 1'b0, CSRWriteValM[0]}, `RESET_VECTOR, UTVEC_REGW);
 | 
				
			||||||
 | 
				
			|||||||
@ -52,7 +52,7 @@ module csrs #(parameter
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  ) (
 | 
					  ) (
 | 
				
			||||||
    input logic 	     clk, reset, 
 | 
					    input logic 	     clk, reset, 
 | 
				
			||||||
    input logic 	     StallW,
 | 
					    input logic 	     FlushW, StallW,
 | 
				
			||||||
    input logic 	     CSRSWriteM, STrapM,
 | 
					    input logic 	     CSRSWriteM, STrapM,
 | 
				
			||||||
    input logic [11:0] 	     CSRAdrM,
 | 
					    input logic [11:0] 	     CSRAdrM,
 | 
				
			||||||
    input logic [`XLEN-1:0]  NextEPCM, NextCauseM, NextMtvalM, SSTATUS_REGW, 
 | 
					    input logic [`XLEN-1:0]  NextEPCM, NextCauseM, NextMtvalM, SSTATUS_REGW, 
 | 
				
			||||||
@ -81,14 +81,17 @@ module csrs #(parameter
 | 
				
			|||||||
    logic [`XLEN-1:0] SSCRATCH_REGW, STVAL_REGW;
 | 
					    logic [`XLEN-1:0] SSCRATCH_REGW, STVAL_REGW;
 | 
				
			||||||
    (* mark_debug = "true" *) logic [`XLEN-1:0] SCAUSE_REGW;      
 | 
					    (* mark_debug = "true" *) logic [`XLEN-1:0] SCAUSE_REGW;      
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    assign WriteSSTATUSM = CSRSWriteM & (CSRAdrM == SSTATUS)  & ~StallW;
 | 
					    logic             InstrValidNotFlushedM;
 | 
				
			||||||
    assign WriteSTVECM = CSRSWriteM & (CSRAdrM == STVEC) & ~StallW;
 | 
					    assign InstrValidNotFlushedM = ~StallW & ~FlushW;
 | 
				
			||||||
    assign WriteSSCRATCHM = CSRSWriteM & (CSRAdrM == SSCRATCH) & ~StallW;
 | 
					
 | 
				
			||||||
    assign WriteSEPCM = STrapM | (CSRSWriteM & (CSRAdrM == SEPC)) & ~StallW;
 | 
					    assign WriteSSTATUSM = CSRSWriteM & (CSRAdrM == SSTATUS)  & InstrValidNotFlushedM;
 | 
				
			||||||
    assign WriteSCAUSEM = STrapM | (CSRSWriteM & (CSRAdrM == SCAUSE)) & ~StallW;
 | 
					    assign WriteSTVECM = CSRSWriteM & (CSRAdrM == STVEC) & InstrValidNotFlushedM;
 | 
				
			||||||
    assign WriteSTVALM = STrapM | (CSRSWriteM & (CSRAdrM == STVAL)) & ~StallW;
 | 
					    assign WriteSSCRATCHM = CSRSWriteM & (CSRAdrM == SSCRATCH) & InstrValidNotFlushedM;
 | 
				
			||||||
    assign WriteSATPM = CSRSWriteM & (CSRAdrM == SATP) & (PrivilegeModeW == `M_MODE | ~STATUS_TVM) & ~StallW;
 | 
					    assign WriteSEPCM = STrapM | (CSRSWriteM & (CSRAdrM == SEPC)) & InstrValidNotFlushedM;
 | 
				
			||||||
    assign WriteSCOUNTERENM = CSRSWriteM & (CSRAdrM == SCOUNTEREN) & ~StallW;
 | 
					    assign WriteSCAUSEM = STrapM | (CSRSWriteM & (CSRAdrM == SCAUSE)) & InstrValidNotFlushedM;
 | 
				
			||||||
 | 
					    assign WriteSTVALM = STrapM | (CSRSWriteM & (CSRAdrM == STVAL)) & InstrValidNotFlushedM;
 | 
				
			||||||
 | 
					    assign WriteSATPM = CSRSWriteM & (CSRAdrM == SATP) & (PrivilegeModeW == `M_MODE | ~STATUS_TVM) & InstrValidNotFlushedM;
 | 
				
			||||||
 | 
					    assign WriteSCOUNTERENM = CSRSWriteM & (CSRAdrM == SCOUNTEREN) & InstrValidNotFlushedM;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // CSRs
 | 
					    // CSRs
 | 
				
			||||||
    flopenr #(`XLEN) STVECreg(clk, reset, WriteSTVECM, {CSRWriteValM[`XLEN-1:2], 1'b0, CSRWriteValM[0]}, 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
 | 
				
			||||||
 | 
				
			|||||||
@ -37,7 +37,7 @@ module csru #(parameter
 | 
				
			|||||||
  FRM = 12'h002,
 | 
					  FRM = 12'h002,
 | 
				
			||||||
  FCSR = 12'h003) (
 | 
					  FCSR = 12'h003) (
 | 
				
			||||||
    input  logic             clk, reset, 
 | 
					    input  logic             clk, reset, 
 | 
				
			||||||
    input  logic             StallW,
 | 
					    input  logic             FlushW, StallW,
 | 
				
			||||||
    input  logic             CSRUWriteM,
 | 
					    input  logic             CSRUWriteM,
 | 
				
			||||||
    input  logic [11:0]      CSRAdrM,
 | 
					    input  logic [11:0]      CSRAdrM,
 | 
				
			||||||
    input  logic [`XLEN-1:0] CSRWriteValM,
 | 
					    input  logic [`XLEN-1:0] CSRWriteValM,
 | 
				
			||||||
@ -54,10 +54,13 @@ module csru #(parameter
 | 
				
			|||||||
    logic [2:0] NextFRMM;
 | 
					    logic [2:0] NextFRMM;
 | 
				
			||||||
    logic [4:0] NextFFLAGSM;
 | 
					    logic [4:0] NextFFLAGSM;
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
 | 
					    logic       InstrValidNotFlushedM;
 | 
				
			||||||
 | 
					    assign InstrValidNotFlushedM = ~StallW & ~FlushW;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Write enables
 | 
					    // Write enables
 | 
				
			||||||
    //assign WriteFCSRM = CSRUWriteM & (CSRAdrM == FCSR)  & ~StallW;
 | 
					    //assign WriteFCSRM = CSRUWriteM & (CSRAdrM == FCSR)  & InstrValidNotFlushedM;
 | 
				
			||||||
    assign WriteFRMM = (CSRUWriteM & (CSRAdrM == FRM | CSRAdrM == FCSR))  & ~StallW;
 | 
					    assign WriteFRMM = (CSRUWriteM & (CSRAdrM == FRM | CSRAdrM == FCSR))  & InstrValidNotFlushedM;
 | 
				
			||||||
    assign WriteFFLAGSM = (CSRUWriteM & (CSRAdrM == FFLAGS | CSRAdrM == FCSR))  & ~StallW;
 | 
					    assign WriteFFLAGSM = (CSRUWriteM & (CSRAdrM == FFLAGS | CSRAdrM == FCSR))  & InstrValidNotFlushedM;
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
    // Write Values
 | 
					    // Write Values
 | 
				
			||||||
    assign NextFRMM = (CSRAdrM == FCSR) ? CSRWriteValM[7:5] : CSRWriteValM[2:0];
 | 
					    assign NextFRMM = (CSRAdrM == FCSR) ? CSRWriteValM[7:5] : CSRWriteValM[2:0];
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user