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