UVM组件的连接
1.进程间的FIFO
uvm_tlm_fifo 实现了全部 TLM 接口方法:生产者 put 进去,消费者独立地 get 出来。当 fifo 满时,put 会阻塞;当 fifo 空时,get 会阻塞。此外它还支持 peek(只看不移除)。
TLM 接口按"是否阻塞"又分两类,这是理解 TLM 很关键的一个维度:
• 阻塞(blocking):任务(task)形式,会阻塞执行直到操作完成,不能"失败",只能等待。如 put()、get()、peek()。
• 非阻塞(nonblocking):函数(function)形式,立即返回,不消耗仿真时间。如 try_put()、try_get()、try_peek(),返回 TRUE/FALSE 表示是否成功。

• 在环境里,组件之间用 connect() 建立连接,最终形成一个"连接网表(netlist)"。这个网表会向下收敛,最终把发起方的 port 解析到目标组件的 imp 实现上。这一机制保证了:调用 put_port.put(t) 时,无论中间经过多少层,最终都会到达实现者。
2.广播机制
put/get 是一对一的点对点通信。但很多场景需要一个组件"广播"给多个观察者——最典型的就是 monitor 把采到的事务同时送给 scoreboard、coverage collector 等多个订阅者。这就是 analysis 接口的作用。

analysis_port / analysis_export 只有一个 write() 方法,是"广播"语义:一个端口可以连接到多个订阅者,写一次,所有订阅者都能收到。而且 write() 不阻塞,无论连接了多少组件,都在同一个 delta cycle 内完成。
浙公网安备 33010602011771号