UVM_PORT_COMMON宏的定义: UVM_BLOCKING_PUT_IMP宏的定义: 可以看到对应的port中定义了put方法,并且调用该put方法时会去调用该port连接的imp所在类里的put方法(一般会被重写,除非是uvm标准类库里已经实现的) 对应的imp中的源代码: 内部也实现了一个put的task 那么问题来了,能否把一个put_port连接到一个get_imp...
virtual function void connect_phase (uvm_phase phase); compA.m_put_port.connect (compB.m_put_imp); endfunction 4.让听众接受到广播之后做出反应。这里与前面有稍许不同,blocking型是在喇叭那直接调用put,然后在听众那实现put函数。现在的nonblocking型变成了调用和实现try_put函数。 调用: success = m_put...
4.1.4PORT->IMP(以uvm_blocking_put_*为例) 4.1.5EXPORT->IMP(以uvm_blocking_put_*为例) (1) PORT可以与IMP相连接,同样EXPORT也可以与IMP相连接,其连接方法与PORT和IMP的连接完全一样; 4.2 同种类型port之间的连接(port与port, export与export) 4.2.1 PORT->PORT(以uvm_blocking_put_*为例) (1) ...
• 我们从方法名也可以发现, 例如uvm_blocking_put_PORT提供的方法 task put()会在数据传送完后返回,uvm_nonblocking_put_PORT对应的两个函数try_put()和can_put()是立刻返回的。 • uvm_put_PORT则分别提供了blocking和nonblocking的方法, 这为通讯方式提供了更多选择。 blocking阻塞传输的方法包含: • Pu...
1.uvm_put/get_port与uvm_tlm_fifo使用示例(blocking) 1.1 top.sv 1moduletop;2import uvm_pkg::*;3`include"uvm_macros.svh"45import example_pkg::*;67initialrun_test("communication_test");8endmodule: top 1.2 example_pkg.sv 1package example_pkg;2import uvm_pkg::*;3`include"uvm_macros.svh...
PORT端口和EXPORT端口是UVM中最基本的通信端口。UVM中常用的PORT有uvm_blocking_put_port/uvm_blocking_get_port等。UVM中常用的EXPORT有uvm_blocking_put_export/uvm_blocking_get_export等。 无论是PORT端口还是EXPORT端口,都可以进行put、get等对transaction的基本操作。在UVM中使用connect函数来实现组件间的链接。如...
由于A中采用了blocking put的PORT,所以在B中IMP相应的类型是uvm_blocking_put_imp。同时,这个IMP有两个参数,第一个参数是要将传输的transaction,第二个参数前面说过,就是实现接口的uvm_component。在这里就是B_imp所在的uvm_component B。IM的new函数与PORT的相似,第一个参数是名字,第二个参数是一个uvm_component...
uvm_blocking_put_port 的源码: min_size 和max_size是必须连接到这个PORT的下级端口数量的最小值和最大值,即此PORT 应该调用的connect 函数的最小值和最大值。 3.B 的代码: 4.env: 5仿真结果: 1)connect是没有问题的。 2)问题是:PORT和 EXPORT 像一道门,只是一个通行的作用,不可能把一笔transaction ...
按照UVM端口名的命名规则,它们指出了通信的两大要素:①是否为阻塞的方式(是否可以等待延时);② 采用何种通信方法(put、get、peek)。其中单一端口函数的PORT可以为port、export和imp。 阻塞传输方式将blocking前缀作为函数名的一部分,而非阻塞方式则名为nonblocking。阻塞端口的方法类型为task,这保证可以实现事件等待和延...
imp,如uvm_blocking_put_imp#(my_transaction,B) B_imp,需要两个参数,包括交易类型和实现接口的uvm_component,因为实际的put操作依赖于B组件中定义的相应函数。port通常是阻塞的,使用task实现操作,而nonblocking端口则非阻塞,通过function完成。端口类型包括blocking和nonblocking的port、export和imp,...