《UVM实战》笔记 UVM中代码的可重用性

第9章 UVM中代码的可重用性

UVM之uvm_callback详解_liuwei848的博客-CSDN博客

9.1 callback机制

如果把两个项目不同的地方使用callback函数来做,而把相同的地方写成一个完整的env,这样重用时,只要改变相关的callback函数env可完全的重用。

my_transaction的最后一个字段是CRC校验信息。假如没有post_randomize(),那么CRC必须在整个transaction的数据都固定之后才能计算出来。

post_randomize函数是SystemVerilog提供的广义的callback函数。UVM也为用户提供了广义的callback函数/任务:pre_body和post_body,除此之外还有pre_do、mid_do和post_do。相信很多用户已经从中受益了。

callback机制如何实现的?

UVM中又引入了一个类,假设这个类称为A_pool,意思就是专门存放A或者A的派生类的一个池子。UVM约定会执行这个池子中所有实例的pre_tran函数/任务

9.1.7 callback机制、sequence机制和factory机制

callback机制、sequence机制和factory机制在某种程度上来说很像:它们都能实现搭建测试用例的目的。只是sequence机制是UVM一直提倡的生成激励的方式,UVM为此做了大量的工作,如构建了许多宏、嵌套的sequence、virtual sequence、可重用性等。

8.3.4节中列出的那四条理由,依然适用于callback机制。虽然callback机制能够实现所有的测试用例,但是某些测试用例用sequence来实现则更加方便。virtual sequence的协调功能在callback机制中就很难实现。

callback机制、sequence机制和factory机制并不是互斥的,三者都能分别实现同一目的。当这三者互相结合时,又会产生许多新的解决问题的方式。如果在建立验证平台和测试用例时,能够择优选择其中最简单的一种实现方式,那么搭建出来的验证平台一定是足够强大、足够简练的。实现同一事情有多种方式,为用户提供了多种选择,高扩展性是UVM取得成功的一个重要原因。

9.3 参数化的类

使用最多的参数化的类莫过于uvm_sequence了,在派生uvm_sequence时指定参数的类型,即transaction的类型,可以方便地产生transaction并建立测试用例。除了uvm_sequence外,还有uvm_analysis_port等,不再一一列举。

virtual class uvm_sequence #(type REQ = uvm_sequence_item,

type RSP = REQ) extends uvm_sequence_base;

9.4 模块级到芯片级的代码重用

现代芯片的验证通常分为两个层次,

一是模块级别(block level,也称为IP级别、unit级别)验证,

二是芯片级别(也称为SOC级别)验证

一个大的芯片在开发时,是分成多个小的模块来开发的。每个模块开发一套独立的验证环境,通常每个模块有一个专门的验证人员负责。当在模块级别验证完成后,需要做整个系统的验证。

图9-4:在验证平台中,每个模块验证环境需要在其env中添加一个analysis_port用于数据输出;添加一个analysis_export用于数据输入;在env中设置in_chip用于辨别不同的数据来源。在chip_env中,实例化env_A、env_B、env_C,将env_B和env_C的in_chip设置为1,并将env_A的ap口与env_B的i_export相连,将env_B的ap与env_C的i_export相连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在哪我是谁啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值