xiaoxiaoyuwts的个人空间 https://blog.eetop.cn/72471 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

UVM TLM1

已有 1276 次阅读| 2019-12-4 09:23

UVM TLM1
所谓TLM就是事物级建模(Transaction Level Modeling),目的是提高仿真模拟的数据传输层次,进而提高提高仿真速度和效率。
TLM1是相对于TLM2而言的。但是他们之间没有明确的generation关系,只是用于不同的领域,TLM2是基于C++的。

TLM1 有以下几种类似:uvm_*_port , uvm_*_export , uvm_*_imp。
对于单向,"*"可以是下面任何一种:
blocking_put
nonblocking_put
put

blocking_get
nonblocking_get
get

blocking_peek
nonblocking_peek
peek

blocking_get_peek
nonblocking_get_peek
get_peek

对于双向,"*"可以是下面任何一种:
blocking_transport
nonblocking_transport
transport

blocking_master
nonblocking_master
master

blocking_slave
nonblocking_slave
slave

另外"*"还可以是analysis,即uvm_analysis_port , uvm_analysis_export , uvm_analysis_imp。analysis port用于调用write()函数广播数据,即一个analysis port可以有n个analysis  imp。


这些object在uvm_component内部实例化,port可以连接任何兼容的port,export和imp,一个port至少要和一个imp连接。
也就是说有以下几种连接方式:
    1:port - port - imp
    2:port - export - imp
    3:port - imp
    4:export -imp
总之在连接的最后一定是imp。为什么呢?
    要明白为什么会有imp这种类型,imp其实是implementation的简称。举例uvm_blocking_put_port - uvm_blocking_put_imp 这种连接,在port端要调用调用put函数用以传递,但是其实这个put函数并不在uvm_blocking_put_port 里面定义,而是需要用户在uvm_blocking_put_imp 端定义。如果末端没有imp,那么就没有用户定义的put或者get等函数,这是编译自然会出问题。
    所以当调用connect连接若干个兼容的port时,调用谁的connect函数来连接谁可以根据imp的位置来确定。如下面的连接:port1 -- port2 -- export1 -- imp1 ,连接如下:
    port1.connect(port2)
    port2.connect(export1)
    export1.connect(imp1)

   

fifo
除了通过兼容的port连接来直接传数据,UVM还提供了两种fifo: uvm_tlm_fifo和 uvm_tlm_analysis_fifo,用来提供一种缓存机制,以免丢包。

uvm_tlm_fifo:
通过以下几种方式可以向fifo放数据:
task put (input T t)
function bit can_put ()
function bit try_put (input T t)

通过以下几种方式可以从fifo取数据:
ask get (output T t)
function bit can_get ()
function bit try_get (output T t)
task peek (output T t)
function bit can_peek ()
function bit try_peek (output T t)

uvm_tlm_analysis_fifo:
uvm_tlm_analysis_fifo和uvm_tlm_fifo不同之处:
    1:uvm_tlm_analysis_fifo是没有大小限制的,是无限大的
    2: uvm_tlm_analysis_fifo增加了一个write函数,用于数据广播。
    3:uvm_tlm_analysis_fifo和uvm_analysis_port配合使用。
UVM TLM1
所谓TLM就是事物级建模(Transaction Level Modeling),目的是提高仿真模拟的数据传输层次,进而提高提高仿真速度和效率。
TLM1是相对于TLM2而言的。但是他们之间没有明确的generation关系,只是用于不同的领域,TLM2是基于C++的。

TLM1 有以下几种类似:uvm_*_port , uvm_*_export , uvm_*_imp。
对于单向,"*"可以是下面任何一种:
blocking_put
nonblocking_put
put

blocking_get
nonblocking_get
get

blocking_peek
nonblocking_peek
peek

blocking_get_peek
nonblocking_get_peek
get_peek

对于双向,"*"可以是下面任何一种:
blocking_transport
nonblocking_transport
transport

blocking_master
nonblocking_master
master

blocking_slave
nonblocking_slave
slave

另外"*"还可以是analysis,即uvm_analysis_port , uvm_analysis_export , uvm_analysis_imp。analysis port用于调用write()函数广播数据,即一个analysis port可以有n个analysis  imp。


这些object在uvm_component内部实例化,port可以连接任何兼容的port,export和imp,一个port至少要和一个imp连接。
也就是说有以下几种连接方式:
    1:port - port - imp
    2:port - export - imp
    3:port - imp
    4:export -imp
总之在连接的最后一定是imp。为什么呢?
    要明白为什么会有imp这种类型,imp其实是implementation的简称。举例uvm_blocking_put_port - uvm_blocking_put_imp 这种连接,在port端要调用调用put函数用以传递,但是其实这个put函数并不在uvm_blocking_put_port 里面定义,而是需要用户在uvm_blocking_put_imp 端定义。如果末端没有imp,那么就没有用户定义的put或者get等函数,这是编译自然会出问题。
    所以当调用connect连接若干个兼容的port时,调用谁的connect函数来连接谁可以根据imp的位置来确定。如下面的连接:port1 -- port2 -- export1 -- imp1 ,连接如下:
    port1.connect(port2)
    port2.connect(export1)
    export1.connect(imp1)

   

FIFO:
除了通过兼容的port连接来直接传数据,UVM还提供了两种fifo: uvm_tlm_fifo和 uvm_tlm_analysis_fifo,用来提供一种缓存机制,以免丢包。

uvm_tlm_fifo:
通过以下几种方式可以向fifo放数据:
task put (input T t)
function bit can_put ()
function bit try_put (input T t)

通过以下几种方式可以从fifo取数据:
ask get (output T t)
function bit can_get ()
function bit try_get (output T t)
task peek (output T t)
function bit can_peek ()
function bit try_peek (output T t)

uvm_tlm_analysis_fifo:
uvm_tlm_analysis_fifo和uvm_tlm_fifo不同之处:
    1:uvm_tlm_analysis_fifo是没有大小限制的,是无限大的
    2: uvm_tlm_analysis_fifo增加了一个write函数,用于数据广播。
    3:uvm_tlm_analysis_fifo和uvm_analysis_port配合使用。

点赞

全部作者的其他最新日志

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 2

    粉丝
  • 0

    好友
  • 0

    获赞
  • 85

    评论
  • 611

    访问数
关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-23 01:18 , Processed in 0.018010 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部