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