精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

UVM環境的看門狗沒看住超時是怎么回事?

jf_GctfwYN7 ? 來源:IC修真院 ? 2023-12-05 10:15 ? 次閱讀

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_phasewatchdog上下的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):: %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

    文章

    559

    瀏覽量

    70746
  • UVM
    UVM
    +關注

    關注

    0

    文章

    181

    瀏覽量

    19139
  • 線程
    +關注

    關注

    0

    文章

    504

    瀏覽量

    19651

原文標題:犄角旮旯的bug:UVM環境的看門狗怎么沒看住超時了?

文章出處:【微信號:IC修真院,微信公眾號:IC修真院】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    獨立看門狗(IWDG)的基礎知識

      STM32F10xxx系列內置兩個看門狗(獨立看門狗和窗口看門狗),提供了更高的安全性、時間的精確性和使用的靈活性。兩個看門狗設備(獨立看門狗
    發表于 10-19 17:10 ?4188次閱讀
    獨立<b class='flag-5'>看門狗</b>(IWDG)的基礎知識

    STM32中的獨立看門狗和窗口看門狗是什么

    在早期的MCU中是沒有看門狗這種東西的,所以產品就很容易出現死機,跑飛的情況。為了避免這種情況的出現,后期的MCU都集成了看門狗的功能。但是目前看門狗發展到今天基本上分為兩大類:獨立看門狗
    的頭像 發表于 02-20 17:47 ?2676次閱讀
    STM32中的獨立<b class='flag-5'>看門狗</b>和窗口<b class='flag-5'>看門狗</b>是什么

    UVM環境看門狗怎么沒看住超時了?

    uvm驗證環境里一般通過objection機制來控制仿真的結束,不過在機制之外,有時還需要通過看門狗來watchdog避免仿真環境掛死,watchdog配合objection一起來控制
    的頭像 發表于 12-04 11:42 ?1096次閱讀

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

    啥叫看門狗看門狗的工作原理是什么?看門狗看住哪些錯誤呢?看門狗叫后該咋整?具體咋喂看門狗呢?
    發表于 07-07 07:01

    STM32芯片的模擬看門狗怎么回事

    什么是看門狗?STM32芯片的模擬看門狗怎么回事呢?與獨立看門狗有關系嗎?它是怎么工作的?
    發表于 09-18 08:41

    stm32看門狗時間計算 獨立看門狗和窗口看門狗的特性是什么

    本文為您講解STM看門狗時間計算(時限)與頻率計算,獨立看門狗和窗口看門狗的特性、區別與聯系。
    發表于 10-10 10:41 ?8733次閱讀

    看門狗定時器的作用

    看門狗復位,重新開始倒計數。如果看門狗減到0就認為程序沒有正常工作,強制整個系統復位。 看門狗定時器的操作過程 使用時,WDT將遞增,直到溢出,或稱超時。除非處于休眠或空閑模式,WD
    發表于 10-20 14:41 ?6669次閱讀

    什么是stm32看門狗?獨立看門狗和窗口看門狗工作原理解析

    stm32有兩個看門狗,獨立看門狗和窗口看門狗,其實兩者的功能是類似的,只是喂狗的限制時間不同。 獨立看門狗
    的頭像 發表于 11-06 11:48 ?2.7w次閱讀
    什么是stm32<b class='flag-5'>看門狗</b>?獨立<b class='flag-5'>看門狗</b>和窗口<b class='flag-5'>看門狗</b>工作原理解析

    STM32看門狗配置(獨立看門狗IWDG和窗口看門狗WWDG)

    stm32自帶兩個看門狗模塊,獨立看門狗IWDG和窗口看門狗WWDG。看門狗主要作用是可用來檢測和解決由軟件錯誤引起的故障;當計數器達到給定的超時
    發表于 11-09 17:17 ?8422次閱讀
    STM32<b class='flag-5'>看門狗</b>配置(獨立<b class='flag-5'>看門狗</b>IWDG和窗口<b class='flag-5'>看門狗</b>WWDG)

    stm32看門狗復位技巧編輯

    本文主要介紹了stm32看門狗復位技巧,包括三個方面:判斷是否需要使用、保證看門狗工作正常、保證看門狗復位時不會引起系統異常。stm32自帶兩個看門狗模塊:獨立
    發表于 01-14 15:51 ?1.5w次閱讀
    stm32<b class='flag-5'>看門狗</b>復位技巧編輯

    STM32:獨立看門狗、窗口看門狗的配置

    STM32單片機的看門狗有獨立看門狗和窗口看門狗之分,這兩者的工作原理卻完全不同。
    發表于 02-08 16:15 ?18次下載
    STM32:獨立<b class='flag-5'>看門狗</b>、窗口<b class='flag-5'>看門狗</b>的配置

    STM32中的獨立看門狗和窗口看門狗

    一、前言 在早期的MCU中是沒有看門狗這種東西的,所以產品就很容易出現死機,跑飛的情況。為了避免這種情況的出現,后期的MCU都集成了看門狗的功能。但是目前看門狗發展到今天基本上分為兩大類:獨立
    的頭像 發表于 12-22 16:58 ?2059次閱讀

    STM32中的獨立看門狗和窗口看門狗

    在早期的MCU中是沒有看門狗這種東西的,所以產品就很容易出現死機,跑飛的情況。為了避免這種情況的出現,后期的MCU都集成了看門狗的功能。但是目前看門狗發展到今天基本上分為兩大類:獨立看門狗
    的頭像 發表于 01-30 14:38 ?1326次閱讀
    STM32中的獨立<b class='flag-5'>看門狗</b>和窗口<b class='flag-5'>看門狗</b>

    窗口看門狗增強了μP監控器

    看門狗定時器提高了基于微處理器的系統的可靠性。引腳可選的看門狗定時器允許看門狗超時周期可調,從而提供更大的靈活性,以滿足不同的處理器時序要求。窗口
    的頭像 發表于 05-08 11:23 ?1169次閱讀
    窗口<b class='flag-5'>看門狗</b>增強了μP監控器

    STM32的看門狗原理和示例代碼

    ):IWDG是一個定時器,其計數器在啟用后開始遞增。在程序中,你需要定期喂狗(通過向IWDG的寄存器寫入特定的值),以防止看門狗超時。否則,如果超過了預定的時間,系統
    的頭像 發表于 12-01 08:00 ?1883次閱讀
    STM32的<b class='flag-5'>看門狗</b>原理和示例代碼