UVM应用笔记

1. get_type_name()是uvm_object类的一个内置函数,其解释如下:

This function returns the type name of the object, whichis typically the type identifier enclosed in quotes.

2. 带parameter的类需要用uvm_component_param_utils注册,注册时需要传递参数,如:

`uvm_component_param_utils(driver #(T));

`uvm_component_param_utils(comp #(T,WIDTH))

带参数的packet类用field_automation机制注册时用如下方式:

`uvm_object_param_utils_begin(packet #(T,WIDTH))

......

`uvm_object_utils_end

3.对于带parameter的packet如:

class packet #(parameter AW = 12, parameter DW = 32) extends uvm_sequence_item;

其在定义fifo指定fifo传递的packet类型时也必须指定该参数:

uvm_tlm_analysis_fifo #(packet #(.AW(12), .DW(16))) irom_ref_fifo;

并且发送端口ap和接收端口port也都必须带上参数。

即该packet带参数,任何使用它的地方也都得带参数。

4.fifo的函数  used ——Returns the number of entries put into the FIFO.

5.config_db的set函数没有返回值。

6.写monitor的思想与driver不一样,monitor的main_phase中一般会有循环一直进行,但是在collect_one_pkt中必须考虑清楚进行采样的条件。

7.写monitor时条件控制不好就特别容易进入死循环,右边的图如果没有第一行的等待时钟,则每次进入collect这个函数,下面两行的while循环条件就是上次sample的条件,仿真会一直停在这个时间点。

还有一种写法是:将前三行代码改为

正在上传…重新上传取消填写图片摘要(选填) 

while(1) begin

     @(posedge spi_bus_if.clk);

      if(!spi_bus_if.mreq) break;

end

8.如果fifo定义在scoreboard内部,则不需要再定义用于get的port。

9. 只有seq设置为sqr的default_sequence,用uvm_do其pre_body和post_body才执行。即vseq设置为vsqr的default_sequence后,其内部的子seq的pre_body和post_body默认不执行,因为一般推荐在pre_body和post_body提起和关闭objection,并且只在最顶层的seq中提起和关闭。

10.packet中定义一个动态数组或队列,需要在约束中约束他们的size,q.size()==5,否则uvm_do不会去随机他们。

11. 当仿真器asserton assertoff的时候用assert就不能检查有没有随机成功,所以用`SV_RAND_CHECK

12.uvm_sequencer的方式写virtual sequencer。

13.agent的get_is_active()函数可以返回is_active的值。

14.在scb中添加report_phase其中检测fifo中是否还有包

15.用一个component来收集覆盖率,func_cov中定义imp用于接收mon的包,一般多个monitor向func_cov发包,这时候在func_cov中的写write函数之前要用`uvm_analysis_imp_decl()处理

16.testcase中用set_seq的方式设置sequence为sequencer的default_sequence

17.在UVM环境中不要使用$display

18.transport操作的函数定义接口一个是input,一个是output。

19.

 a.monitor向scb put,port在monitor,export和imp在scb,scb中实现put方法。

 b.scb从mon get,port在scb,export和imp在monitor,monitor中实现get方法。 

c.scb从monitor transport,port在scb,export和imp在monitor,monitor中实现export方法。

20.讨论验证功力的帖子

https://www.mysmth.net/nForum/#!article/METech/332829

21.uvm_config_db是一个参数化的类,#()中的参数是要寄信的类型,set和get是其两个静态函数
22.uvm_fatal执行完打印之后会调用verilog的$finish
23.对象名称可以和实例化名称不一样
24.冗余度:UVM_DEBUG>UVM_FULL>UVM_HIGH>UVM_MEDIUM>UVM_LOW>UVM_NONE
25.用uvm_hdl_force或reg_model后门访问寄存器报错:you may have not sufficient plight/acc capabilities,原因:uvm_hdl_force这个DPI需要 vpi pli的实现支持,需要一些访问权限,解决方法:编译选项中加-debug_all,这样仿真可以获取设计编译后数据库的全部访问权限。弊端在于会使仿真速度变慢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值