forked from Github_Repos/cvw
		
	Touched up TLB D and A bit checks
This commit is contained in:
		
							parent
							
								
									b0f199b574
								
							
						
					
					
						commit
						07f2064c19
					
				@ -219,8 +219,6 @@ module ahblite (
 | 
			
		||||
  generate 
 | 
			
		||||
    if (`A_SUPPORTED) begin
 | 
			
		||||
      logic [`XLEN-1:0] AMOResult;
 | 
			
		||||
//      amoalu amoalu(.a(HRDATA), .b(WriteDataM), .funct(Funct7M), .width(MemSizeM), 
 | 
			
		||||
//                    .result(AMOResult));
 | 
			
		||||
      amoalu amoalu(.srca(HRDATAW), .srcb(WriteDataM), .funct(Funct7M), .width(MemSizeM), 
 | 
			
		||||
                    .result(AMOResult));
 | 
			
		||||
      mux2 #(`XLEN) wdmux(WriteDataM, AMOResult, AtomicMaskedM[1], WriteData);
 | 
			
		||||
 | 
			
		||||
@ -111,6 +111,7 @@ module tlb #(parameter TLB_ENTRIES = 8,
 | 
			
		||||
  logic [1:0]            HitPageType;
 | 
			
		||||
  logic                  CAMHit;
 | 
			
		||||
  logic [`ASID_BITS-1:0] ASID;
 | 
			
		||||
  logic                  DAFault;
 | 
			
		||||
 | 
			
		||||
  // Grab the sv mode from SATP and determine whether translation should occur
 | 
			
		||||
  assign SvMode = SATP_REGW[`XLEN-1:`XLEN-`SVMODE_BITS];
 | 
			
		||||
@ -165,7 +166,9 @@ module tlb #(parameter TLB_ENTRIES = 8,
 | 
			
		||||
      // only execute non-user mode pages.
 | 
			
		||||
      assign ImproperPrivilege = ((EffectivePrivilegeMode == `U_MODE) && ~PTE_U) ||
 | 
			
		||||
        ((EffectivePrivilegeMode == `S_MODE) && PTE_U);
 | 
			
		||||
      assign TLBPageFault = Translate && TLBHit && (ImproperPrivilege || ~PTE_X);
 | 
			
		||||
      // fault for software handling if access bit is off
 | 
			
		||||
      assign DAFault = ~PTE_A;
 | 
			
		||||
      assign TLBPageFault = Translate && TLBHit && (ImproperPrivilege || ~PTE_X || DAFault);
 | 
			
		||||
    end else begin
 | 
			
		||||
      logic ImproperPrivilege, InvalidRead, InvalidWrite;
 | 
			
		||||
 | 
			
		||||
@ -180,7 +183,9 @@ module tlb #(parameter TLB_ENTRIES = 8,
 | 
			
		||||
      // Check for write error. Writes are invalid when the page's write bit is
 | 
			
		||||
      // low.
 | 
			
		||||
      assign InvalidWrite = WriteAccess && ~PTE_W;
 | 
			
		||||
      assign TLBPageFault = Translate && TLBHit && (ImproperPrivilege || InvalidRead || InvalidWrite);
 | 
			
		||||
      // Fault for software handling if access bit is off or writing a page with dirty bit off
 | 
			
		||||
      assign DAFault = ~PTE_A | WriteAccess & ~PTE_D; 
 | 
			
		||||
      assign TLBPageFault = Translate && TLBHit && (ImproperPrivilege || InvalidRead || InvalidWrite || DAFault);
 | 
			
		||||
    end
 | 
			
		||||
  endgenerate
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user