1package device 2 3import chisel3._ 4import chisel3.util._ 5import chipsalliance.rocketchip.config.Parameters 6import freechips.rocketchip.diplomacy.AddressSet 7import utils._ 8 9// we support 256 interrupt bits by default 10class IntrGenIO extends Bundle { 11 val intrVec = Output(UInt(256.W)) 12} 13 14class AXI4IntrGenerator 15( 16 address: Seq[AddressSet] 17)(implicit p: Parameters) 18 extends AXI4SlaveModule(address, executable = false, _extra = new IntrGenIO) 19{ 20 21 override lazy val module = new AXI4SlaveModuleImp(this){ 22 23 val intrReg = RegInit(VecInit(Seq.fill(8)(0.U(32.W)))) 24 io.extra.get.intrVec := Cat(intrReg.reverse) 25 26 when (in.w.fire()) { 27 intrReg(waddr(4, 2)) := in.w.bits.data(31, 0) 28 } 29 30 in.r.bits.data := intrReg(raddr) 31 } 32} 33