0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

UVM环境的看门狗怎么没看住超时了?

冬至配饺子 来源:芯时代青年 作者:尼德兰的喵 2023-12-04 11:42 次阅读

uvm验证环境里一般通过objection机制来控制仿真的结束,不过在机制之外,有时还需要通过看门狗来watchdog避免仿真环境挂死,watchdog配合objection一起来控制仿真的进行与结束。

我一直自诩为对环境watchdog这件事烂熟于心了,不过没想到这天还是被伤害到了。

事故背景

一个中规中矩的watchdog是怎么组织的呢?要明确一下watchdog发挥的作用,就是在objection的基础上进行补充,在环境长时间没有动静的情况下能够使环境报错推出并打印此时阻止仿真结束的罪魁祸首。

基于这个认识,watchdog应该是base_test的run_phase()中进行调用,这样既从时间全程参与又从空间上统揽全局。当然了,因为环境的主要行为集中在main_phase()中,所以把watchdog放在main_phase()中我觉得也是可以的。

task base_test::run_phase(uvm_phase phase):
super.run_phase(phase);
phase.raise_objection(this);

this.watchdog(phase);

phase.drop_objection(this);
endtask: run_phase

watchdog上下的objection还是很有必要的,毕竟你要保证watchdog无论在哪里调用都可以执行起来,别这个phase没有objection就直接略过了。

watchdog内部逻辑就是几个并行的线程,简单来说可以这样写:

task base_test::watchdog(uvm_phase phase):
#1000;
if(this.cfg.watchdog_en == 0) return;
while(1)begin
bit vr_reached;
fork: timeout
begin //normal finish
phase.phase_done.wait_for_total_count(null, 1);
vr_reached = 1;
end
begin //timeout
#this.cfg.watchdog_th;
`uvm_fatal("watchdog", $psprintf("watchdog timeout(%s_phase)::n %s", phase.get_name(), phase.phase_done.convert2string()))
end
#100 @prj_scoreboard::feed_watchdog;
#100 @harness.dut.hand_en;
#100 wait(this.env.num != 0);
join_any
disable timeout;

#10;
if(vr_reached && phase.phase_done.get_objection_tatal == 1)begin
`uvm_info("watchdog", $psprintf("watchdog timeout(%s_phase) normal reached", phase.get_name()), UVM_LOW)
break;
end
end
`uvm_note("watchdog", "watchdog Finished!", UVM_LOW)
endtask

代码的主体就是一个大的while(1)循环,循环内以fork - join_any的形式起多个喂狗线程,根据fork - join_any的机制,只要任何一个线程完成了都会触发喂狗机制。

*线程1:正常结束的线程,因为本身watchdog占着一个raise_objection,所以只要等待wait_for_total_count(null, 1)就可以了,为1说明其他的objection都已经drop了,那么就可以正常结束程序,和uvm本身的objection机制完全一样;

*线程2:超时线程,如果很长的时间里都没有喂狗,那么报fatal推出仿真。注意这里必须是fatal使方正立即结束,报error的话环境还是会挂死状态;

*线程3:所有的scoreboard都可以喂狗,因为scb里比对的一方是可以信任的环境预期,如果比对还在进行那么就说明仿真不应该结束;

*线程N:可以喂狗的其他线程,使用rtl线程需要万分谨慎,很有可能rtl里做错了一致重复出数据导致仿真无法结束;

当喂狗一次后,就可以杀掉timeout这个线程了,然后根据情况看看是否重新回到看门狗循环中。

事故现场

看门狗的核心起始就是,确定仿真在“动”,能动就是还活着不能结束仿真,所以在fork-join_any里除了超时线程以外,其他的都是证明系统还活着的“喂狗”线程。这些线程里如果使用rtl的信号作为系统还活着的参照,一定要万分的小心,万分的小心,万分的小心。

第一点小心是该停止但是停不下来,取材自上个月的bug。场景很简单,#100 @harness.dut.hand_en这个线程里hand_en做错了,进入了无限发包无限握手的死循环,带着环境也一直停不下来看门狗直接失效了。

第二点小心是该仿真但是挺下来了,这个事我以前就没想过能出现。事故现场是这样的还是#100 @harness.dut.hand_en这个线程(就是这么头铁,出过错了还继续用),这次确实是RTL正常的发包握手,但是,性能模式下外部没有反压拍拍握手成功,hand_en起来之后就没见到下降沿!这就导致了什么问题呢,导致@harness.dut.hand_en线程根本就触发不了!这就涉及到@和wait的区别了,@捕捉的是event trigger是信号的跳变,harness.dut.hand_en恒1不跳导致看门狗直接超时了。

简直目瞪口呆,只要每天比别人多碰到3个bug,两年能积累别人五年经验。

事故解决

我把@harness.dut.hand_en改成wait harness.dut.hand_en了

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 看门狗
    +关注

    关注

    10

    文章

    541

    浏览量

    70257
  • RTL
    RTL
    +关注

    关注

    1

    文章

    377

    浏览量

    59076
  • UVM
    UVM
    +关注

    关注

    0

    文章

    181

    浏览量

    18972
  • Watchdog
    +关注

    关注

    0

    文章

    10

    浏览量

    9331
收藏 人收藏

    评论

    相关推荐

    啥叫看门狗?如何合理的使用看门狗

    啥叫看门狗看门狗的工作原理是什么?看门狗看住哪些错误呢?看门狗叫后该咋整?具体咋喂看门狗呢?
    发表于 07-07 07:01

    为什么要看门狗看门狗解决的问题是什么?

    为什么要看门狗看门狗解决的问题是什么?如何去计算独立看门狗超时时间?
    发表于 07-28 08:16

    stm32-看门狗(独立看门狗,窗口看门狗)精选资料分享

    现象。在进入正题之前,我们先了解一下什么是看门狗看门狗用于检测和解决由软件错误引起的故障,当计数器达到给定的超时值时,触发一个中断(仅适用于窗口看门狗)或系统复位。通俗的来讲,就是.
    发表于 08-02 08:07

    窗口看门狗的定义及窗口看门狗和独立看门狗区别是什么

    工作顺序如下:总结一下就是: 窗口看门狗超时时间的计算: 既然已经有独立看门狗,为何还需要窗口看门狗?窗口看门狗可以使时间控制得更精确,可
    发表于 08-02 06:56

    看门狗的概述

    看门狗的概述:STM32内置两个看门狗,提供更高的安全性,时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗/窗口
    发表于 08-02 07:38

    如何去计算窗口看门狗超时时间

    窗口看门狗的框架是怎样构成的?如何去计算窗口看门狗超时时间?窗口看门狗是如何工作的?
    发表于 08-05 07:46

    如何去计算WWDG窗口看门狗超时时间

    STM32看门狗主要分为哪几种?如何去计算WWDG窗口看门狗超时时间?
    发表于 08-10 06:56

    怎样去计算看门狗超时时间

    如何去使用看门狗?怎样去计算看门狗超时时间?
    发表于 08-12 06:45

    如何去计算独立看门狗超时时间

    为什么要看门狗?独立看门狗的框架是由哪些部分组成的?如何去计算独立看门狗超时时间?
    发表于 08-20 07:55

    怎样去计算窗口看门狗超时时间

    窗口看门狗的功能有哪些?怎样去计算窗口看门狗超时时间啊?
    发表于 08-23 07:03

    窗口看门狗与独立看门狗有什么不同?

    窗口看门狗与独立看门狗有什么不同?窗口看门狗超时时间怎么计算?
    发表于 09-18 07:59

    怎样去计算独立看门狗超时时间

    什么是看门狗看门狗解决的问题是什么?独立看门狗的工作原理是什么?怎样去计算独立看门狗超时时间?
    发表于 09-22 08:33

    怎样去计算独立看门狗超时时间

    独立看门狗有哪些功能?怎样去计算独立看门狗超时时间?
    发表于 09-26 07:54

    请问CH573看门狗的的相关资料或者例子?

    周期为 131072/Fsys。当开启看门狗超时 复位功能后,一旦此计数器溢出会复位整个系统。 时钟树没看看门狗的时钟源,只有计数时钟周
    发表于 08-30 06:45

    UVM环境看门狗没看住超时是怎么回事?

    一个中规中矩的watchdog是怎么组织的呢?要明确一下watchdog发挥的作用,就是在objection的基础上进行补充,在环境长时间没有动静的情况下能够使环境报错推出并打印此时阻止仿真结束的罪魁祸首。
    的头像 发表于 12-05 10:15 249次阅读