TLM2通信
TLM2.0多用于SystemC,与TLM1.0相比,2.0的优势包括:
- 双向的阻塞或非阻塞接口
- 时间标记
- 统一的数据包
TLM2.0使得接口之间的通信更趋于标准化,更容易为系统构建抽象模型。
接口实现
TLM2的传输是双向的,一次完整的数据传输包含request和response类型,与TLM1 transport端口传输方式类似。TLM2支持blocking和nonblocking两种transport方式:
- blocking传输方式要求在一次传输过程中,完成request和response的传输
- nonblocking传输方式则将request和response的传输分为了两个独立的单向传输,两次传输整体视为完成一次握手传输
//两种传输方式对应的UVM方法
task b_transport(T t, uvm_tlm_time delay); //blocking传输方式
function uvm_tlm_sync_e nb_transport_fw(T t, ref P p, input uvm_tlm_time delay); //nonblocking传输方式
function uvm_tlm_sync_e nb_transport_bw(T t, ref P p, input uvm_tlm_time delay);
T代表统一的传输数据类uvm_tlm_generic_payload;P代表在nonblocking传输方式中用来做状态同步的类型。
在定义TLM2的过程中,仍然有initiator和target的概念,也有port、export、imp端口类型。对于port类型,它是用来发起请求并调用target一端的传输方法,export用来传导这一要求,最后由imp端口所在的组件来实现数据传输方法。
TLM2的端口类型称之为socket,有port、export、imp组合而成。一个socket首先是双向传输的,例如TLM1de双向传输端口transport可以用来做单次完成的双向传输,master和slave端口用来完成多次的双向传输。
socket按照blocking和nonblocking的传输方式,组合initiator或target的发起端区别,可以分为以下端口类型:
uvm_tlm_b_initiator_socket
uvm_tlm_b_target_socket
uvm_tlm_nb_initiator_socket
uvm_tlm_nb_target_socket
uvm_tlm_b_passthrough_initiator_socket
uvm_tlm_b_passthrough_target_socket
uvm_tlm_nb_passthrough_initiator_socket
uvm_tlm_nb_passthrough_target_socket
socket类型都继承于uvm_port_base,