mirror of
https://github.com/openhwgroup/cvw
synced 2025-02-11 06:05:49 +00:00
added inputs to pmaadrdec
This commit is contained in:
parent
da8eb7749f
commit
54b6a2dcad
@ -29,6 +29,9 @@ module pmaadrdec (
|
|||||||
input logic [31:0] HADDR,
|
input logic [31:0] HADDR,
|
||||||
input logic [31:0] Base, Range,
|
input logic [31:0] Base, Range,
|
||||||
input logic Supported,
|
input logic Supported,
|
||||||
|
input logic AccessValid,
|
||||||
|
input logic [2:0] Size,
|
||||||
|
input logic [3:0] SizeMask,
|
||||||
output logic HSEL
|
output logic HSEL
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -38,8 +41,8 @@ module pmaadrdec (
|
|||||||
// for example, if Base = 0x04002000 and range = 0x00000FFF,
|
// for example, if Base = 0x04002000 and range = 0x00000FFF,
|
||||||
// then anything address between 0x04002000 and 0x04002FFF should match (HSEL=1)
|
// then anything address between 0x04002000 and 0x04002FFF should match (HSEL=1)
|
||||||
|
|
||||||
assign match = (HADDR ~^ Base) | Range;
|
assign match = &((HADDR ~^ Base) | Range);
|
||||||
assign HSEL = &match & Supported;
|
assign HSEL = match & Supported;
|
||||||
|
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
|
@ -64,20 +64,20 @@ module pmachecker (
|
|||||||
|
|
||||||
|
|
||||||
// Determine which region of physical memory (if any) is being accessed
|
// Determine which region of physical memory (if any) is being accessed
|
||||||
pmaadrdec boottimdec(HADDR, `BOOTTIMBASE, `BOOTTIMRANGE, `BOOTTIMSUPPORTED, BootTim);
|
pmaadrdec boottimdec(HADDR, `BOOTTIMBASE, `BOOTTIMRANGE, `BOOTTIMSUPPORTED, AccessRX, Size, 4'b1111, BootTim);
|
||||||
pmaadrdec timdec(HADDR, `TIMBASE, `TIMRANGE, `TIMSUPPORTED, Tim);
|
pmaadrdec timdec(HADDR, `TIMBASE, `TIMRANGE, `TIMSUPPORTED, AccessRWX, Size, 4'b1111, Tim);
|
||||||
pmaadrdec clintdec(HADDR, `CLINTBASE, `CLINTRANGE, `CLINTSUPPORTED, CLINT);
|
pmaadrdec clintdec(HADDR, `CLINTBASE, `CLINTRANGE, `CLINTSUPPORTED, AccessRW, Size, (`XLEN==64 ? 4'b1000 : 4'b0100), CLINT);
|
||||||
pmaadrdec gpiodec(HADDR, `GPIOBASE, `GPIORANGE, `GPIOSUPPORTED, GPIO);
|
pmaadrdec gpiodec(HADDR, `GPIOBASE, `GPIORANGE, `GPIOSUPPORTED, AccessRW, Size, 4'b0100, GPIO);
|
||||||
pmaadrdec uartdec(HADDR, `UARTBASE, `UARTRANGE, `UARTSUPPORTED, UART);
|
pmaadrdec uartdec(HADDR, `UARTBASE, `UARTRANGE, `UARTSUPPORTED, AccessRW, Size, 4'b0001, UART);
|
||||||
pmaadrdec plicdec(HADDR, `PLICBASE, `PLICRANGE, `PLICSUPPORTED, PLIC);
|
pmaadrdec plicdec(HADDR, `PLICBASE, `PLICRANGE, `PLICSUPPORTED, AccessRW, Size, 4'b0100, PLIC);
|
||||||
|
|
||||||
// Swizzle region bits
|
// Swizzle region bits
|
||||||
assign Regions = {BootTim, Tim, CLINT, GPIO, UART, PLIC};
|
assign Regions = {BootTim, Tim, CLINT, GPIO, UART, PLIC};
|
||||||
|
|
||||||
// Only RAM memory regions are cacheable
|
// Only RAM memory regions are cacheable
|
||||||
assign Cacheable = BootTim | Tim;
|
assign Cacheable = BootTim | Tim;
|
||||||
assign Idempotent = BootTim | Tim;
|
assign Idempotent = Tim;
|
||||||
assign AtomicAllowed = BootTim | Tim;
|
assign AtomicAllowed = Tim;
|
||||||
|
|
||||||
assign ValidBootTim = '1;
|
assign ValidBootTim = '1;
|
||||||
assign ValidTim = '1;
|
assign ValidTim = '1;
|
||||||
@ -98,9 +98,9 @@ module pmachecker (
|
|||||||
|
|
||||||
assign PMAAccessFault = ~|HSELRegions;
|
assign PMAAccessFault = ~|HSELRegions;
|
||||||
|
|
||||||
|
// Detect access faults
|
||||||
assign PMAInstrAccessFaultF = ExecuteAccessF && PMAAccessFault;
|
assign PMAInstrAccessFaultF = ExecuteAccessF && PMAAccessFault;
|
||||||
assign PMALoadAccessFaultM = ReadAccessM && PMAAccessFault;
|
assign PMALoadAccessFaultM = ReadAccessM && PMAAccessFault;
|
||||||
assign PMAStoreAccessFaultM = WriteAccessM && PMAAccessFault;
|
assign PMAStoreAccessFaultM = WriteAccessM && PMAAccessFault;
|
||||||
|
|
||||||
assign PMASquashBusAccess = PMAAccessFault && AccessRWX;
|
assign PMASquashBusAccess = PMAAccessFault && AccessRWX;
|
||||||
endmodule
|
endmodule
|
||||||
|
Loading…
Reference in New Issue
Block a user