事务级建模 (TLM) 用于模块之间的通信。 TLM 是实现基于事务的方法的概念,这些方法可用于模块之间的通信。
UVM TLM
UVM 为 TLM 库提供事务级接口,ports,exports,imp ports,and analysis ports。所有这些 TLM 元素都需要发送事务、接收事务以及从一个组件传输到另一个组件。
TLM 接口由发送和接收事务的方法组成。
所有不同类型的 TLM 端口都像 管道 一样用于在组件之间进行连接。
UVM TLM 库提供:
TLM1 – TLM1 端口提供阻塞和非阻塞按值传递事务级接口。
TLM2 – TLM2 套接字提供具有明确完成语义的阻塞和非阻塞事务级接口。
Sequencer port——一个 推 (put) 或拉(pull)端口,具有明确定义的完成语义。
Analysis——Analysis 接口用于对连接的组件执行非阻塞的事物级广播。
TLM1
UVM TLM 提供单向和双向端口
- TLM interfaces
- ports
- exports
- imp ports
- analysis portss
- FIFOs
每个 TLM 接口可以是阻塞的,也可以是非阻塞的,或者是这两者的组合。
Blocking — Blocking TLM 方法调用在事务成功发送或取回之前不会返回
non-Blocking — 非阻塞 TLM 方法调用尝试在不消耗仿真时间的情况下传达事务
组合 – 组合接口包含阻塞和非阻塞变体。
UVM TLM Methods
TLM 接口类声明了完成通信所需的所有方法:
put
- put 方法用于将事务发送到另一个组件
- 调用 <port>.put(trans) 将事务发送到其他组件
- put() 方法调用是阻塞调用。在事物成功发送之前不会返回
get
- get 方法用于从另一个组件取回事务
- 调用 <port>.get(trans) 从其他组件取回事务
- get() 方法调用是阻塞调用。在成功取回事务之前不会返回
- get() 方法调用消耗事务。即像FIFO get方法从FIFO中取出事物
- 对 get 的后续调用必须返回不同的事务实例。意味着之前的get会取出trans,期望得到新的trans
peek
- peek 方法获取事务而不消耗事物
- 它调用 <port>.peek(trans) 从其他组件复制一个事务
- peek() 方法调用是阻塞调用。
- 返回的事务没有被消耗。随后的 peek 或 get 将返回相同的事务
try_put
try_put 方法用于在不阻塞执行的情况下将事务发送到另一个组件
如果可能,调用 <port>.try_put(trans) 将事务发送到另一个组件
try_put 方法返回 1 如果成功发送事务,否则返回 0
can_put
- 如果组件准备好接受事务,can_put() 方法调用返回 1,否则返回 0
- can_put 不能传入任何参数,该方法用于查看其他组件是否准备好接受 trans
try_get
try_get 方法用于在不阻塞执行的情况下从另一个组件取回事务
如果可能,调用 <port>.try_get(trans) 从另一个组件取回事务
如果事务可用,try_get 方法返回 1,否则返回 0
can_get
- can_get() 方法调用,如果组件可以立即获取事务则返回 1,否则返回 0
- 无需向 can_get 传递任何参数,该方法用于查看是否有任何事务可以获取
transport
- 调用 <port>.transport(req,resp) 方法执行给定的请求,并在给定的输出参数中返回响应
- 传输方法 transport 调用是阻塞的,它可能阻塞直到操作完成
nb_transport
如果可能,调用 <port>.nb_transport(req,resp) 方法执行给定的请求,并在给定的输出参数中返回响应
如果由于某种原因无法立即执行操作,则必须返回 0,否则返回 1
Analysis:
Write
调用 <port>.write(trans) 方法将向任意数量的listener广播事务。
写方法 write 调用是非阻塞调用
总结:
标签:总结,事务,调用,get,通信,阻塞,组件,TLM From: https://www.cnblogs.com/fuqiangblog/p/16644737.html