Using uvm_analysis_fifo is fine, but requires calling get whenever an item is available.
uvm_analysis_imp or uvm_analysis_imp_decl(port_identifier) are helpful because they have the TLM connections in it, you don’t have to call get. Instead, there is a write method (write_port_identifier for uvm_analysis_imp_decl) which gets called every time there’s a new item available.
Uvm_analysis_imp example:

Example for uvm_analysis_imp_decl:
https://verificationguide.com/uvm/tlm-analysis-port-multi-analysis-imp-port/
Using
uvm_analysis_fifois fine, but requires callinggetwhenever an item is available.uvm_analysis_imporuvm_analysis_imp_decl(port_identifier)are helpful because they have the TLM connections in it, you don’t have to callget. Instead, there is a write method (write_port_identifier foruvm_analysis_imp_decl) which gets called every time there’s a new item available.Uvm_analysis_imp example:
Example for uvm_analysis_imp_decl:
https://verificationguide.com/uvm/tlm-analysis-port-multi-analysis-imp-port/