uvm通信-TLM源码分析(uvm_sqr_if_base,uvm_tlm_if_base,uvm_port_base)

1.常见两类TLM端口

1.1用于driver和sequencer之间

1.2用于其他component之间

2.uvm_sqr_if_base

(1) 这个类没有派生自任何类;

(2) 类里面定义了如下几个task/function: get_next_item, try_next_item, item_done等;

3.uvm_tlm_if_base

(1) 该类没有派生自任何类;

(2) 该类内部定义了三类task/function:

(2.1) 阻塞性质的方法,如 task .*put/ get/ peek/ transport(T1,T2);

(2.2)非阻塞性质的方法,如 function .* try_put/ try_get/ try_peek/ nb_transport(T1,T2);

(2.3)用于广播的write;

(3) 这三类函数都需要在派生类里重新定义才能使用;

4.uvm_port_component_base

(1) 该类提供几个接口: get_connected_to, get_provided_to, is_port, is_export, is_imp;

(2) 这几个接口都需要在派生类里重载才能使用;

5.uvm_port_component(uvm_port_base的成员变量)

(1) 定义了一个比较重要的成员变量-PORT m_port;

(2) 实现了uvm_port_component_base定义的各种方法;

 

6.uvm_port_base

(1) uvm_tlm_if_base是一个单独的类,它没有派生自任何的类;

(2) uvm_analysis_port最终派生自uvm_tlm_if_base,所以uvm_analysis_port既不是一个component,也不是一个object.

 

 

(3) 一个uvm_port_base内部有一个m_comp指针(类型为uvm_port_component #(this_type)),而uvm_port_component内有一个m_port指针,该指针指向uvm_port_base,所以一个uvm_port_base和一个uvm_port_component一一对应.

(4) uvm_port_base的两个变量m_min_size与m_max_size分别标明最少要有多少个其它的端口连接到此port上.

(4.1) 对于PORT和EXPORT来说,这两个值默认为1,表明只能由一个连接到上面;

(4.2) 对于uvm_analysis_port来说,m_min_size为0,而m_max_size没有限制(因为analysis_port本身就是广播性质,作为广播来说,不会对受众做出限制);

 

(5) 对于一个port来说,如uvm_put_port,它会调用UVM_PORT_COMMON宏;在宏内部调用super.new函数时,会传入UVM_PORT来表明这是一个PORT. 同样,EXPORT和IMP也都会在new的时候传入相应的参数.

(6) uvm_port_base实现了is_port, is_export, is_imp等成员函数;

(7) 确保connect函数在end_of_elaboration_phase之前调用,即connect_phase or build_phase(由于存在实例的实例化先后顺序问题,都在connect_phase中调用此函数);

(8) 避免要连接的port为null的情况;

(9) 一个IMP不能主动调用connect函数,它只能作为connect函数的参数,被别的port连接;

(10) export.connect(port)不被允许;

(11) 调用m_check_relationship,用于再次检测两个端口之间的连接是否合法;

(11.1)检查port-to-port connection是否满足要求-CHILD.port.connect(PARENT.port);

(11.2)检查port-to-export connection是否满足要求SIBLING.port.connect(SIBLING.export);

(11.3)检查port-to-imp connection是否满足要求SIBLING.port.connect(SIBLING.imp);

(11.4)检查export-to-export connection是否满足要求PARENT.export.connect(CHILD.export);

(11.5)检查export-to-imp connection是否满足要求PARENT.export.connect(CHILD.imp);

(12) m_provided_by与m_provided_to是两个联合数组(索引是string类型,存放的内容是uvm_port_base类型);

(12.1)以A.connect(B)为例,A的m_provided_by中将会有一条B的记录,而B的m_provided_to中将会有一条A的记录;

(12.2)对于IMP而言,由于IMP只能作为connect的参数,所以IMP的m_provided_by将永远是空的,不会有任何记录存在.

 

posted on 2021-11-16 20:59  知北游。。  阅读(336)  评论(0编辑  收藏  举报

导航