mirror of
https://github.com/openhwgroup/cva6.git
synced 2025-04-24 14:17:16 -04:00
Remove access exception - everything is a PF
This commit is contained in:
parent
e0de70e02b
commit
b74d776a13
2 changed files with 15 additions and 11 deletions
14
src/mmu.sv
14
src/mmu.sv
|
@ -260,7 +260,7 @@ module mmu #(
|
|||
ierr_valid_n = 1'b1;
|
||||
end
|
||||
// throw a page fault
|
||||
fetch_exception = {INSTR_ACCESS_FAULT, fetch_vaddr_i, 1'b1};
|
||||
fetch_exception = {INSTR_PAGE_FAULT, fetch_vaddr_i, 1'b1};
|
||||
end
|
||||
end else
|
||||
// ---------
|
||||
|
@ -372,16 +372,14 @@ module mmu #(
|
|||
// this is a store
|
||||
if (lsu_is_store_q) begin
|
||||
// check if the page is write-able and we are not violating privileges
|
||||
if (!dtlb_pte_q.w || daccess_err) begin
|
||||
lsu_exception_o = {ST_ACCESS_FAULT, lsu_vaddr_q, 1'b1};
|
||||
end
|
||||
// check if the dirty flag is set
|
||||
if (!dtlb_pte_q.d) begin
|
||||
// also check if the dirty flag is set
|
||||
if (!dtlb_pte_q.w || daccess_err || !dtlb_pte_q.d) begin
|
||||
lsu_exception_o = {STORE_PAGE_FAULT, lsu_vaddr_q, 1'b1};
|
||||
end
|
||||
// this is a load, check for sufficient access privileges
|
||||
|
||||
// this is a load, check for sufficient access privileges - throw a page fault if necessary
|
||||
end else if (daccess_err) begin
|
||||
lsu_exception_o = {LD_ACCESS_FAULT, lsu_vaddr_q, 1'b1};
|
||||
lsu_exception_o = {LOAD_PAGE_FAULT, lsu_vaddr_q, 1'b1};
|
||||
end
|
||||
end else
|
||||
|
||||
|
|
|
@ -42,7 +42,13 @@ class exception_trace_item;
|
|||
INSTR_PAGE_FAULT: this.cause_s = "Instruction Page Fault";
|
||||
LOAD_PAGE_FAULT: this.cause_s = "Load Page Fault";
|
||||
STORE_PAGE_FAULT: this.cause_s = "Store Page Fault";
|
||||
default: this.cause = "Interrupt";
|
||||
S_SW_INTERRUPT: this.cause_s = "Supervisor Software Interrupt";
|
||||
M_SW_INTERRUPT: this.cause_s = "Machine Software Interrupt";
|
||||
S_TIMER_INTERRUPT: this.cause_s = "Supervisor Timer Interrupt";
|
||||
M_TIMER_INTERRUPT: this.cause_s = "Machine Timer Interrupt";
|
||||
S_EXT_INTERRUPT: this.cause_s = "Supervisor External Interrupt";
|
||||
M_EXT_INTERRUPT: this.cause_s = "Machine External Interrupt";
|
||||
default: this.cause_s = "Interrupt";
|
||||
endcase
|
||||
|
||||
this.tval = tval;
|
||||
|
@ -52,8 +58,8 @@ class exception_trace_item;
|
|||
function string printException();
|
||||
string s;
|
||||
s = $sformatf("Exception @%10t, PC: %h, Cause: %s", $time, this.pc, this.cause_s);
|
||||
// write out tval if it wasn't an environment call, in that case the tval field has no meaning
|
||||
if (!(this.cause inside {ENV_CALL_MMODE, ENV_CALL_SMODE, ENV_CALL_UMODE}))
|
||||
// write out tval if it wasn't an environment call or interrupt, in that case the tval field has no meaning
|
||||
if (!(this.cause inside {ENV_CALL_MMODE, ENV_CALL_SMODE, ENV_CALL_UMODE, S_SW_INTERRUPT, M_SW_INTERRUPT, S_TIMER_INTERRUPT, M_TIMER_INTERRUPT, S_EXT_INTERRUPT, M_EXT_INTERRUPT}))
|
||||
s = $sformatf("%s, \n\t\t\t\ttval: %h", s, this.tval);
|
||||
return s;
|
||||
endfunction
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue