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

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

日志

OVM Cookbook学习记录(10)

已有 2377 次阅读| 2010-6-21 19:39 |个人分类:SystemVerilog

        学习sequence需要有耐心,也需要有技巧,到目前为止其背后的原理性的东西我并没有掌握,先学会用它,等到之后实践中,再慢慢弄清楚其背后的实现机制,感谢开源,至少可以trace源代码来挖掘其实现机制。目前我需要吃快餐,快点掌握它。
       sequence真的有点像VMM中的scenario. VMM中也提供了这种方式,不过没有OVM中的sequence更加平易近人,我还是更喜欢OVM的机制。sequence_item作为最简单的原子单元, sequence可以看作sequence_item的人为排列组合控制。sequencer作为 sequence_item/sequence和driver之间的中介桥梁。 sequence的核心在于body()函数, 当执行seq.start(sqr)的时候,相当于sequence"seq"给sequencer"sqr"提出一个请求,请求sequencer通过seqence_pull_port将seqence"seq"中的sequence_item发送到driver端。
       对比之前的ovm_transaction, 通过简单的tlm_fifo或者tlm_transport就可以搞定,现在多了一个中介,那就是sequencer. sequencer用来对不同的sequence请求进行仲裁,排序。再交给driver.
       08-01的例子介绍了一种最简单的request机制:
           wait_for_grant()  -> create seq_item -> randomize -> send_request

       08-02的例子介绍了新的request机制,同时response的简单产生机制:
         seq.body(): create_item() -> start_item(seq) -> randomize -> finish_item() -> get_reponse()
         driver.run(): seq_item_pull_port.get(req) -> gen response item "rsp" -> rsp.set_id_info()-> put_response(rsp)
       (1)  create_item()函数的第一个参数是一个type handle, 用意在于可以override原始的request type,加一些特殊处理,用来re-use,很容易改变request的个性。
        (2) start_item()包含第一种方案的wait_for_grant()功能。
        (3) finish_item()包含了第一种方案的send_request()功能,同时还包含wait_for_item_done()功能。
        (4) rsp.set_id_info()的目的是为了response routing用
        
        08-03的例子介绍了并行sequence.多个sequence同时发送给sequencer,只需要fork..join即可,当然sequence也提供了一些arbitration的机制,很实用。
        待续。。。

点赞

评论 (0 个评论)

facelist

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

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

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 1

    好友
  • 1

    获赞
  • 14

    评论
  • 747

    访问数
关闭

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

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

GMT+8, 2024-3-28 18:03 , Processed in 0.023024 second(s), 14 queries , Gzip On, Redis On.

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