1. 前言
在硬件電路中,為了使系統(tǒng)在異常情況下能自動(dòng)復(fù)位,一般都需要引入看門狗(Watchdog)??撮T狗其實(shí)就是一個(gè)定時(shí)器電路。當(dāng)看門狗啟動(dòng)后,計(jì)數(shù)器開始自動(dòng)計(jì)數(shù),經(jīng)過一定時(shí)間,如果沒有被清零,計(jì)數(shù)器溢出就會(huì)對(duì)CPU產(chǎn)生一個(gè)復(fù)位信號(hào)使系統(tǒng)重啟(俗稱“被狗咬”)。系統(tǒng)正常運(yùn)行時(shí),需要在看門狗允許的時(shí)間間隔內(nèi)對(duì)看門狗計(jì)數(shù)器清零(俗稱“喂狗”),不讓復(fù)位信號(hào)產(chǎn)生。如果系統(tǒng)不出問題,程序保證按時(shí)“喂狗”,一旦程序跑飛,沒有“喂狗”,系統(tǒng)“被咬”復(fù)位。
2. Heartbeat作用
UVM heartbeat在UVM中充當(dāng)類似看門狗定時(shí)器的角色,我們可以設(shè)定它的定時(shí)長(zhǎng)度,也就是在這時(shí)間內(nèi)必須要喂狗,還可以設(shè)定heartbeat要監(jiān)控的組件。uvm_heartbeat 監(jiān)視測(cè)試環(huán)境中組件的活動(dòng),如果發(fā)現(xiàn)在指定的時(shí)間間隔內(nèi)沒有活動(dòng),則 uvm_heratbeat 發(fā)出UVM_FATAL消息,導(dǎo)致模擬結(jié)束,可以在早期階段檢測(cè)仿真掛住,而不是在全局仿真超時(shí)到期時(shí)檢測(cè):
- 這將有助于識(shí)別導(dǎo)致死鎖的組件;
- 通過提前終止仿真來節(jié)省仿真時(shí)間并釋放資源;
既然uvm_heartbeat類似于看門狗,那么在使用上,只需要關(guān)注以下三件事:
- 配置它的定時(shí)長(zhǎng)度 (這段時(shí)間內(nèi)沒有喂狗就終止仿真)
- 配置它需要監(jiān)控的對(duì)象 (由哪些對(duì)象去喂狗)
- 設(shè)置多長(zhǎng)時(shí)間喂狗 (正常情況下這個(gè)時(shí)間要小于步驟1的定時(shí)長(zhǎng)度,除非TB或RTL出問題了)
3. Heartbeat內(nèi)置函數(shù)
uvm_heartbeat 類派生自 uvm_object,它提供一組內(nèi)置方法來方便用戶使用。有如下:

注意:uvm_event e 必須定期觸發(fā),它會(huì)設(shè)置一個(gè)監(jiān)視窗口。如果heartbeat監(jiān)視器在該時(shí)間段內(nèi)未發(fā)現(xiàn)任何活動(dòng),則會(huì)生成 HBFAIL UVM_FATAL消息。一般來說,事件e可以在無限循環(huán)中觸發(fā),作為一個(gè)永遠(yuǎn)持續(xù)的過程。
4. Heartbeat例子
根據(jù)heartbeat的作用和內(nèi)置函數(shù),舉個(gè)使用例子。
第一步創(chuàng)建喂狗的uvm_objection實(shí)例(假設(shè)為uvm_objection obj=new(“obj”)),這個(gè)objection需要傳遞給uvm_heartbeat和所有被監(jiān)控組件,被監(jiān)控組件需要定期去raise這個(gè)obj來達(dá)到喂狗的目的。
第二步創(chuàng)建觸發(fā)監(jiān)控窗口的uvm_event實(shí)例(假設(shè)為uvm_event hb_e=new(“hb_e”)),這個(gè)event決定了多長(zhǎng)時(shí)間去檢查下是否有組件喂狗了,也就是raise objection。
第三步就是創(chuàng)建uvm_heartbeat實(shí)例(假設(shè)為uvm_heartbeat hb=new("hb", this, obj)),在這里把obj傳遞進(jìn)去了。
第四步設(shè)置uvm_heartbeat的工作模式,比如hb.set_mode(UVM_ANY_ACTIVE)。
第五步設(shè)置uvm_heartbeat觸發(fā)檢查的event和檢查對(duì)象,比如hb.set_heartbeat(hb_e,hb_comp)。這里面把event hb_e和監(jiān)控組件列表comp傳遞給uvm_heartbeat了。
此時(shí)uvm_heartbeat就正式開始工作了,在hb_e每次被trigger()的時(shí)候,根據(jù)當(dāng)前工作模式去檢查各個(gè)被監(jiān)控組件是否有調(diào)用過obj.raise_objection(this)。如果沒有,就會(huì)停止仿真,表明驗(yàn)證環(huán)境有異常情況。另外一點(diǎn)大家主要注意的是,被監(jiān)控的多個(gè)組件raise的objection是同一個(gè),也就是obj這個(gè)實(shí)例,因此需要在上層創(chuàng)建好obj之后,把句柄傳遞給各個(gè)被監(jiān)控組件去raise。
以下為uvm_heartbeat監(jiān)控兩個(gè)組件(compA和compB)的示意圖,uvm_heartbeat模式為UVM_ALL_ACTIVE。第一張圖,在檢查窗口內(nèi),compA和compB都有喂狗,檢查通過。第二張圖,在檢查窗口內(nèi),只有compB喂狗,compA沒有喂狗,因此檢查失敗,會(huì)報(bào)出UVM_FATAL。

-
看門狗
+關(guān)注
關(guān)注
10文章
607瀏覽量
72548 -
仿真器
+關(guān)注
關(guān)注
14文章
1048瀏覽量
86717 -
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2306瀏覽量
97528 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3358瀏覽量
121631 -
UVM
+關(guān)注
關(guān)注
0文章
183瀏覽量
19933
發(fā)布評(píng)論請(qǐng)先 登錄
UVM中的field automation機(jī)制有哪些用途
IC驗(yàn)證"為什么要學(xué)習(xí)UVM呢"
IC驗(yàn)證"UVM驗(yàn)證平臺(tái)加入factory機(jī)制"(六)
IC驗(yàn)證“UVM驗(yàn)證平臺(tái)加入objection機(jī)制和virtual interface機(jī)制“(七)
數(shù)字IC驗(yàn)證之“什么是UVM”“UVM的特點(diǎn)”“UVM提供哪些資源”(2)連載中...
什么是uvm?uvm的特點(diǎn)有哪些呢
請(qǐng)問有人用過ESP_BLE_MESH的heartbeat的功能嗎?
談?wù)?b class='flag-5'>UVM中的uvm_info打印
UVM中seq.start()和default_sequence執(zhí)行順序
UVM實(shí)戰(zhàn)卷1 PDF電子書免費(fèi)下載
淺析UVM不同機(jī)制的調(diào)試功能
UVM中uvm_config_db機(jī)制背后的大功臣
UVM中uvm_config_db機(jī)制背后的大功臣
UVM設(shè)計(jì)中的sequence啟動(dòng)方式有哪幾種呢?

UVM Heartbeat的作用有哪些呢?淺析UVM Heartbeat機(jī)制
評(píng)論