@@ -71,8 +71,9 @@ class AXI4Bridge() extends Module with AXI4Config {
7171 })
7272
7373 // preposition
74- protected val instAxiId = Fill (AxiIdLen , " b0" .U (1 .W ))
75- protected val memAxiId = Fill (AxiIdLen , " b1" .U (1 .W ))
74+ protected val instAxiId = " b1010" .U (4 .W )
75+ protected val memAxiId = " b1111" .U (4 .W )
76+ protected val loaderReg : Bool = RegInit (false .B )
7677
7778 // only mem oper can write dram
7879 protected val wtTrans = WireDefault (io.mem.req === AxiReqWt .U )
@@ -299,11 +300,12 @@ class AXI4Bridge() extends Module with AXI4Config {
299300 protected val instAddrEnd = WireDefault (UInt (4 .W ), instAddrOpA + instAddrOpB)
300301 protected val instOverstep = WireDefault (instAddrEnd(3 , ALIGNED_INST_WIDTH ) =/= 0 .U )
301302 protected val instAxiSize = AXI_INST_SIZE
302- protected val instAxiAddr = Cat (io.inst.addr (AxiAddrWidth - 1 , ALIGNED_INST_WIDTH ), Fill ( ALIGNED_INST_WIDTH , " b0 " . U ( 1 . W ) ))
303+ protected val instAxiAddr = Wire ( UInt (AxiAddrWidth . W ))
303304 protected val instAlignedOffsetLow = Wire (UInt (OFFSET_INST_WIDTH .W ))
304305 protected val instAlignedOffsetHig = Wire (UInt (OFFSET_INST_WIDTH .W ))
305306 protected val instMask = Wire (UInt (MASK_INST_WIDTH .W ))
306307
308+ instAxiAddr := Cat (io.inst.addr(AxiAddrWidth - 1 , ALIGNED_INST_WIDTH ), Fill (ALIGNED_INST_WIDTH , " b0" .U (1 .W )))
307309 instAxiLen := Mux (instTransAligned.asBool(), (TRANS_LEN - 1 ).U , Cat (Fill (7 , " b0" .U (1 .W )), instOverstep))
308310 instAlignedOffsetLow := Cat (OFFSET_INST_WIDTH .U , io.inst.addr(ALIGNED_INST_WIDTH - 1 , 0 )) << 3
309311 instAlignedOffsetHig := AxiInstDataWidth .U - instAlignedOffsetLow
@@ -429,6 +431,10 @@ class AXI4Bridge() extends Module with AXI4Config {
429431 // printf(p"[axi4]io.mem.wdata << memAlignedOffsetLow = 0x${Hexadecimal(io.mem.wdata << memAlignedOffsetLow)}\n\n")
430432 // }
431433 }.otherwise {
434+ when(io.mem.req === AxiReqWt .U && io.mem.addr >= " h8000_0004" .U && io.mem.addr <= " h8000_00FF" .U ) {
435+ loaderReg := true .B
436+ }
437+
432438 memTransAligned := io.mem.addr(ALIGNED_MEM_WIDTH - 1 , 0 ) === 0 .U
433439 memAddrOpA := Cat (0 .U , io.mem.addr(ALIGNED_MEM_WIDTH - 1 , 0 ))
434440 memOverstep := memAddrEnd(3 , ALIGNED_MEM_WIDTH ) =/= 0 .U
@@ -447,7 +453,7 @@ class AXI4Bridge() extends Module with AXI4Config {
447453 memMaskHig := memMask(MASK_MEM_WIDTH - 1 , AxiDataWidth )
448454 memStrbLow := memStrb << io.mem.addr(ALIGNED_MEM_WIDTH - 1 , 0 )
449455 memStrbHig := memStrb >> ((AxiDataWidth / 8 ).U - io.mem.addr(ALIGNED_MEM_WIDTH - 1 , 0 ))
450- // when(io.mem.wdata =/= 0 .U) {
456+ // when(io.mem.wdata === "h00000413".U || io.mem.wdata === "h00100117" .U) {
451457 // printf(p"[axi4] ram access\n")
452458 // printf(p"[axi4]memAlignedOffsetLow = 0x${Hexadecimal(memAlignedOffsetLow)}\n")
453459 // printf(p"[axi4]io.mem.addr = 0x${Hexadecimal(io.mem.addr)}\n")
@@ -607,14 +613,17 @@ class AXI4Bridge() extends Module with AXI4Config {
607613 }
608614 }.elsewhen(memTransLen === i.U ) {
609615 memDataReadReg := axiRdDataLow
616+ // when(io.axi.r.bits.data(31, 0) == "h8000_0000".U) {
610617 // printf("mem rdata align!!!!!!!!!!!!!!!!!!!!!!!!!!!\n")
611618 // printf(p"[axi4]memAlignedOffsetLow = 0x${Hexadecimal(memAlignedOffsetLow)}\n")
612619 // printf(p"[axi4]memAlignedOffsetHig = 0x${Hexadecimal(memAlignedOffsetHig)}\n")
613620 // printf(p"[axi4]memMask = 0x${Hexadecimal(memMask)}\n")
614621 // printf(p"[axi4]memMaskLow = 0x${Hexadecimal(memMaskLow)}\n")
615622 // printf(p"[axi4]memMaskHig = 0x${Hexadecimal(memMaskHig)}\n")
623+ // printf(p"[axi4]io.axi.ar.bits.addr = 0x${Hexadecimal(io.axi.ar.bits.addr)}\n")
616624 // printf(p"[axi4]io.axi.r.bits.data = 0x${Hexadecimal(io.axi.r.bits.data)}\n")
617625 // printf(p"[axi4]axiRdDataLow = 0x${Hexadecimal(axiRdDataLow)}\n\n")
626+ // }
618627 }
619628 }
620629 }
0 commit comments