1*d7763dc0SZihao Yupackage device 2*d7763dc0SZihao Yu 3*d7763dc0SZihao Yuimport chisel3._ 4*d7763dc0SZihao Yuimport chisel3.util._ 5*d7763dc0SZihao Yu 6*d7763dc0SZihao Yuimport bus.axi4._ 7*d7763dc0SZihao Yuimport utils._ 8*d7763dc0SZihao Yu 9*d7763dc0SZihao Yuclass AXI4UART extends AXI4SlaveModule(new AXI4Lite) { 10*d7763dc0SZihao Yu val rxfifo = RegInit(0.U(32.W)) 11*d7763dc0SZihao Yu val txfifo = Reg(UInt(32.W)) 12*d7763dc0SZihao Yu val stat = RegInit(1.U(32.W)) 13*d7763dc0SZihao Yu val ctrl = RegInit(0.U(32.W)) 14*d7763dc0SZihao Yu 15*d7763dc0SZihao Yu def putc(c: UInt): UInt = { printf("%c", c(7,0)); c } 16*d7763dc0SZihao Yu 17*d7763dc0SZihao Yu val mapping = Map( 18*d7763dc0SZihao Yu RegMap(0x0, rxfifo), 19*d7763dc0SZihao Yu RegMap(0x4, txfifo, putc), 20*d7763dc0SZihao Yu RegMap(0x8, stat), 21*d7763dc0SZihao Yu RegMap(0xc, ctrl) 22*d7763dc0SZihao Yu ) 23*d7763dc0SZihao Yu 24*d7763dc0SZihao Yu RegMap.generate(mapping, raddr(3,0), in.r.bits.data, 25*d7763dc0SZihao Yu waddr(3,0), in.w.fire(), in.w.bits.data, MaskExpand(in.w.bits.strb)) 26*d7763dc0SZihao Yu} 27