Plic Mapper
The PLIC Mapper defines the register generation and access for a PLIC (Platform Level Interrupt Controller.
PlicMapper.apply
(bus: BusSlaveFactory, mapping: PlicMapping)(gateways : Seq[PlicGateway], targets : Seq[PlicTarget])
args for PlicMapper:
bus: bus to which this ctrl is attached
mapping: a mapping configuration (see above)
gateways: a sequence of PlicGateway (interrupt sources) to generate the bus access control
targets: the sequence of PlicTarget (eg. multiple cores) to generate the bus access control
It follows the interface given by riscv: https://github.com/riscv/riscv-plic-spec/blob/master/riscv-plic.adoc
As of now, two memory mappings are available :
PlicMapping.sifive
Follows the SiFive PLIC mapping (eg. E31 core complex Manual ), basically a full fledged PLIC
PlicMapping.light
This mapping generates a lighter PLIC, at the cost of some missing optional features:
no reading the intrerrupt’s priority
no reading the interrupts’s pending bit (must use the claim/complete mechanism)
no reading the target’s threshold
The rest of the registers & logic is generated.