xref: /XiangShan/src/main/scala/device/AXI4IntrGenerator.scala (revision 29a0599e4b6a983b59235ed39e1b6b2161b64974)
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