anchor.diff:  	 axiMaster.awready(awready);
         endrule
         rule rl_awfifo if (axiMaster.awvalid() == 1);
  -	 let addr = truncate(axiMaster.awaddr());
  +	 Bit#(PhysMemAddrWidth) addr = truncate(axiMaster.awaddr());
   	 let burstLen = extend(axiMaster.awlen+1) << beatShift; // calculate burstLen
   	 let tag = axiMaster.awid();
   	 awfifo.enq(PhysMemRequest{ addr: addr, tag: truncate(tag), burstLen: burstLen }); // burstlen corrected
  -	 awtagfifo.enq(tag); // what if the single request with multiple transfer??
  +	 awtagfifo.enq(tuple2(tag, addr[3:2])); // what if the single request with multiple transfer??
         endrule
   
   // resp_wr (M=>S) sending data
  
positive.code:   endmethod
  endmodule
  
  typedef 128 MpsocAxiDataWidth;
  typedef 32 PhysMemDataWidth;
  instance MkPhysMemMaster#(Axi4MasterBits#(axiAddrWidth,MpsocAxiDataWidth,idWidth,extra),addrWidth,PhysMemDataWidth)
        provisos (Add#(addrWidth,a__,axiAddrWidth),
  		Add#(c__, 6, idWidth)
  		);
     module mkPhysMemMaster#(Axi4MasterBits#(axiAddrWidth,MpsocAxiDataWidth,idWidth,extra) axiMaster)(PhysMemMaster#(addrWidth,PhysMemDataWidth));
        FIFOF#(PhysMemRequest#(addrWidth,PhysMemDataWidth)) arfifo <- mkAxiFifoF();
        FIFOF#(MemData#(PhysMemDataWidth)) rfifo <- mkAxiFifoF();
        FIFOF#(PhysMemRequest#(addrWidth,PhysMemDataWidth)) awfifo <- mkAxiFifoF();
        FIFOF#(MemData#(PhysMemDataWidth)) wfifo <- mkAxiFifoF();
        FIFOF#(Bit#(MemTagSize)) bfifo <- mkAxiFifoF();
        FIFOF#(Bit#(idWidth)) rtagfifo <- mkAxiFifoF();
        FIFOF#(Bit#(idWidth)) awtagfifo <- mkAxiFifoF();
        FIFOF#(Bit#(idWidth)) wtagfifo <- mkAxiFifoF();
  
     let beatShift = fromInteger(valueOf(TLog#(TDiv#(PhysMemDataWidth,8))));
  // req_ar (M=>S)
  
negative.code:       endrule
        rule rl_wdata if (axiMaster.wvalid() == 1);
  	 let last = axiMaster.wlast == 1;
  	 match { .tag, .lane } = awtagfifo.first;
  	 Vector#(4, Bit#(PhysMemDataWidth)) words = unpack(axiMaster.wdata());
  	 wfifo.enq(MemData { data: words[lane], tag: truncate(tag), last: last});
  	 if (last) begin
  	    awfifo.deq();
  	    wtagfifo.enq(tag);
  