uvm中寄存器设置值为什么有时用set(),有时用write()

例如下段代码:

task enable interrupt();
	rgm.CTRL.INTREN.set(1);    //用set
	rgm.CTRI.update(status)
endtask

task wait and clear interrupt()
	@(posedge vif.timerint);   
	rgm.INTSTAT.write(status,1'b1);     //用write
endtask

set方法:

  • 通常用于设置寄存器的特定位字段的值。
  • 可以用于单个位多个位的设置。
  • 可能会执行一些位掩码操作,仅更改指定的位而不影响其他位。

示例:

rgm.CTRL.INTREN.set(1);      // 设置 CTRL 寄存器的 INTREN 位为 1

write 方法:

  • 通常用于将整个寄存器的值写入,而不仅仅是设置特定的位。
  • 适用于一次写入整个寄存器的场景。
  • 可能会在底层执行更宽泛的寄存器写入操作。

示例:

rgm.INTSTAT.write(status, 1'b1); // 将整个 INTSTAT 寄存器的值设置为 status,并将最低位设置为 1

在上述两个示例中,set 用于设置控制寄存器 CTRLINTREN 位,而 write 用于写入整个 INTSTAT 寄存器的值,并将最低位设置为 1。

总体而言,这两种方式在实现上可以有一些差异,但没有严格的规定。在具体的项目或团队中,可能会有统一的编码风格或规范,因此最好查看相关文档或规范以了解最佳实践。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值