The advance of SystemVerilog

上一篇 / 下一篇  2018-05-26 21:53:32 / 个人分类:Verification

1. 回调(P237)
(1)为测试平台提供一个“钩子”,以便测试程序在不修改原始类的情况下注入新的代码;
(2)注入错误,放弃事务,延迟事务,将事务跟其他事务同步,将事务放进记分板,收集覆盖率数据等;
(3)使用方法:
1)建立Driver_cbs类,其中有virtual task pre_task; post_task;其中的task的参数使用引用调用或者传入Driver的句柄。
2)在Driver中例化Driver_cbs cbs[$], 在Driver中定义task run(), 在run中,定义foreach(cbs[I]) cbs.pre_tx(tr,drop), 定义transmit(tr); 定义foreach(cbs[I]) cbs.post_tx(tr,drop);
3)  建立Driver_cbs的继承类,修改其中的pre_tx或者post_tx;
4)  在program automatic test 的initial 中调用env.drv.cbs.push_back(dcd),然后调用run;

2.blueprint(P220)
先构建一个对象的蓝图,然后修改其约束,甚至使用一个扩展对象替换它。然后随机化这个蓝图,接着复制这个对象,并将拷贝值发送给下游的事务处理器。
使用方法:
1)在Generator中定义Transaction blueprint,然后在new函数中blueprint=new()例化。在run函数中assert(blueprint.randmoze()); tr=blueprint.copy();然后gen2drv.put(tr);
2)  在Environment类中例化Generator,并执行三个阶段:创建(Build),运行(run)和收尾(wrap_up)等,在run 中gen.run()  drv.run()
3)  创建Transaction 类的继承BaseTr,并修改其约束等,建立新的类型;
4)在program automatic test中的initial 中 例化BaseTr bad=new();并替换blueprint: env.gen.blueprint=bad.

3.虚接口
使用XMR(跨模块引用)连接接口和测试程序
在program automatic test中virtual bus_ifc bus=top.bus
为什么要使用虚拟接口?
1)虚拟接口是唯一可以桥接动态对象和静态模块、接口的一种机制。
2)虚拟接口可以program automatic test中把接口合并称数组引用。

4.信箱的使用

5.覆盖率的使用

6.交叉覆盖率

7.覆盖率的种类
代码覆盖率,功能覆盖率,漏洞率,断言覆盖率

8.覆盖组的触发
(1)在driver中使用覆盖组的回调函数;
(2)使用事件进行触法;
covergroup name@(trans_ready)
(3)使用断言进行触发;
covergroup name @($root.top.m1.write_event) 

9●注入错误的方法
         (1)在driver中使用回调函数,在Pre_tx中注入错误激励…
         (2)在generator中使用blueprint,在test中重新赋值blueprint
         (3)在test中使用randomized with 注入错误激励


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2018-06-21  
     12
3456789
10111213141516
17181920212223
24252627282930

数据统计

  • 访问量: 4927
  • 日志数: 35
  • 建立时间: 2018-01-19
  • 更新时间: 2018-06-19

RSS订阅

Open Toolbar