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

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

日志

OVM Cookbook学习记录(8)

已有 2179 次阅读| 2010-6-9 12:45 |个人分类:SystemVerilog

中断了一段时间,终于又开始了,7月学习完OVM Cookbook的计划还是要继续,不能因为工作忙而放弃,找借口。

         研究第7章,7.1/7.2节主要介绍的是example07-01.框架如下:

                图1是OVM Cookbook的实现方法,看完source code分析之后,出现几个问题:
                        1. calc仅仅是产生request用,没有必要使用transport port, 可以使用简单的put port就可以了,calc本身并没有对response进行关注。书中的例子可能是为了扩展性和通用性采用了比较复杂的port. 实际工作中,当然需要尽量简化,去掉一些干扰思维的庞杂信息。当然前提也是需要保证扩展性。如果我设计这个例子,如果用图1的结构,我会使用put port来实现
                       2. 可以考虑图2的实现方式,似乎更简单,用组合的方式将calc放到tap里面去。transport_tap的主要目的是连接stimulus(calc)和DUT, 同时将request和response打包放到analysis port中以备后续分析。为了输出analysis port, 可以考虑用wrapper的方式来完成,也就是图2的架构,似乎更简单。、

                对书中的一句话带有一个疑问,暂时不能回答:
               “transport_tap设计的关键因素是它必须不能消耗时间,甚至是delta时间。“ 有可能这就是不能使用图2作为架构的原因,图2的架构我想也不会消耗delta时间,因为port的连接,仅仅是继承的函数调用而已,不会引入simulation调度。
              对于使用Cadence IUS的人来说,学习OVM Cookbook有时候还真痛苦,太多systemverilog的语法不能支持。为了能够让example07-01可以在IUS下跑起来,去掉了关于IUS不能suport的coverage语句,这回导致fpu_coverage模块不能够done, 也就是stop()函数不能退出,整合simulation无法结束。
              07-01的coverage结束条件是每个运算出现过至少2次即可,可以通过静态变量的方式来完成,于是我改写了fpu_coverage模块,通过static变量的counter机制,对每个运算设置一个静态变量,统计当每个变量都大于等于2的时候,done=1.这样simulation可以正常结束,OK.
              simulation的结束,利用了OVM的stop函数同步机制。example07-01这个例子输出的information太少,最好在fpu_coverage里面增加$display(t.rsp.do_sprint());可以打印已经simulation的transaction, 这样更有感觉。
          


点赞

发表评论 评论 (1 个评论)

回复 ftct 2010-6-9 15:05
顶顶顶顶顶顶

facelist

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

  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 1

    好友
  • 1

    获赞
  • 14

    评论
  • 751

    访问数
关闭

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


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

GMT+8, 2025-10-27 13:12 , Processed in 0.031244 second(s), 15 queries , Gzip On, Redis On.

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