The uvm_tlm_analysis_fifo always return the last value when get()

Most likely because you are not cloning the transaction getting pushed into the FIFO. You are pushing the same object into the fifo.