UVM中的sequence 的使用与SV中的用法对比

目录

对于chnl_generator 中

UVM是uvm_sequence,不变的部分有

改变的部分有以下的部分

再来看 顶层 test 中的sequence不同点


对于chnl_generator 中

UVM是uvm_sequence,不变的部分有

1. 数据以及数据的约束没有变

2. 发送几次数据包的函数没有变化,只不过UVM中固定写在了 body() 函数 

改变的部分有

1. SV 中需要声明与driver通信的mailbox,并创建它

2. SV中,发送数据给driver的函数中,需要自己创建 req = new() ,  并使用 req.randomize with{}

1. UVM中, sequencer 与 driver 通信使用的是TLM的端口(实际通信是 sequence 和 driver),已经被封装好了,叫 seq_item_port 和 seq_item_export 。故直接使用即可。

2. UVM中, sequence 已经被封装好了一系列的宏,用于产生 transaction, 其中 `uvm_do 和 `uvm_do_with 做的事情包括,创建transaction,向sequencer 请求发送 transaction,随机化transaction,获得授权并发送transaction给driver

可以看到   `uvm_do_with(req,{})  放的是transaction 的句柄,以及约束。

3. UVM中还多了两个 ,一个是域的自动化,它的作用是无需自己编写对数据进行操作的函数,声明域的自动化,并在其中填入的是 UVM_ALL_ON ,就可以直接使用函数。

4. `uvm_declare_p_sequencer(chnl_sequencer) ,  简化理解为 为sequence声明需要挂载的sequencer。

另外,由于uvm中把发送transaction 的事情做了,故不需要再发送req从下面的图中可以看到,也可以看到域的使用 req.sprint()

其中打印中用到的 get_type_name(), 它的含义是返回 类名  在这也就是chnl_data_sequence

具体可参考这个博客:UVM中的get_type_name(),get_name(),get_full_name()方法

 

 

 

再来看 顶层 test 中的sequence不同点

1.SV中对各个 generator 的操作还是放在了 test中,

分为两步, 首先对 generator 中的数据进行随机化,然后再启动 fmt_gen.start()

2. UVM 中,只需要 使用 uvm_do_on_with() 完成了 把调用sequence.start(), 启动sequence,并完成了挂载到对应的sequencer上,最后完成了随机化。

uvm_do() 中的第一个参数可以是 transaction的句柄,实现对transaction的创建以及发送

uvm_do() 中的第一个参数也可以是sequence 的句柄,如下图,实现对 sequence的

sequence.start() 的调用,也就是启动。

 本人能力有限,如有错误,望指正

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值