所以一旦initiator里的PORT确定了,那么target里的IMP也基本就确定了, 源代码中约束了通信方法以及配对的PORT与IMP格式 总结 1、不同组件之间进行通信时的需求决定了所需port/imp对的类型 需要阻塞那就需要选择blocking的PORT对 initiator是producer还是consumer决定了通信方法选择用put(阻塞)/try_put(非阻塞)还是get/try...
UVM的transaction级别通信的数据接收方式也有多种, 其中一种就是使用uvm_blocking_get_port。 在my_model中, 定义了一个端口, 并在build_phase中对其进行实例化。 在main_phase中, 通过port.get任务来得到从i_agt的monitor中发出的transaction。 在my_monitor和my_model中定义并实现了各自的端口之后, 通信的功能...
2.根据get/put/transport/peek/get_peek,端口可分为uvm_blocking/nonblocking_get_*, uvm_blocking/nonblocking_put*, uvm_blocking/nonblocking_transport*等; 3.根据port/export/imp,端口可分为uvm_*blocking_put/get/transport_port/export/imp; (1) PORT, EXPORT, IMP体现的是控制流,在这种控制流中,PORT具...
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函数来实现组件间的链接。如...
uvm_peek_PORT uvrn_blocking_get_peek_PORT uvm_nonblocking_get_peek_PORT uvm_get_peek_PORT 按照UVM 端口名的命名规则, 它们指出了通信的两个要素: • 是不是阻寒的方式(即可以等待延时); • 何种通信方法。 单向通信--方法 • 阻塞传输方式将blocking前缀作为函数名的一部分, 而非阻塞方式则名为no...
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...
uvm_blocking_get_port #(my_transaction) port; uvm_analysis_port #(my_transaction) ap; extern function new(string name, uvm_component parent); extern function void build_phase(uvm_phase phase); extern virtual task main_phase(uvm_phase phase); ...
3.在agent和 scoreboard之间添加一个uvm_analysis_fifo。FIFO的本质是一块缓存加连个IMP。scoreboard 使用blocking_get_port 端口: `ifndef MY_SCOREBOARD__SV `define MY_SCOREBOARD__SV class my_scoreboard extends uvm_scoreboard; my_transaction expect_queue[$]; ...
在my_scoreboard中使用uvm_blocking_get_port新建两个port:exp_port、act_port,并在main_phase中,通过fork建立起两个进程,一个进程处理exp_port的数据(ref),当收到数据后,把数据放入expect_queue中;另外一个进程处理act_port的数据(dut),当收集到这些数据后,从expect_queue中弹出之前从exp_port收到的数据,并调...
uvm_blocking_get_port #(simple_trans) get_port; function new( string name, uvm_component parent); get_port = new(“get_port”, this); ... endfunction virtual task run(); simple_trans t; for(int i = 0; i < N; i++) begin ...