1
概述
系統(tǒng)看門狗定時器(System WatchDog Timer)通常用于嵌入式系統(tǒng),可以有效的防止軟件錯誤、系統(tǒng)死鎖、篡改以及意外行為,幫助維護(hù)健康和安全的系統(tǒng)。
在 AMD Versal 自適應(yīng) SoC中,分別在 FPD(Full power domain)和 LPD(Low power domain)中各自集成了一個 SWDT 用來幫助客戶開發(fā)穩(wěn)定的系統(tǒng)。其整體結(jié)構(gòu)框圖如下:
從框圖中可以看到 SWDT 中包含有 2 種不同的定時器,分別是窗口模式的定時器(Windowed WatchDog Timer)和通用模式的定時器(Generic WatchDog Timer)。
注意在使用 SWDT 之前,需要確認(rèn) LPD 和 FPD 的系統(tǒng)級別的復(fù)位是否已經(jīng)釋放,例如CRL.RST_LPD_SWDT 寄存器和CRF.RST_FPD_SWDT 寄存器。
2
通用模式定時器
通用模式定時器一共包含三個相關(guān)寄存器,分別是 G_Refresh,G_Offset 和 G_CSR 寄存器。
G_CSR 寄存器用來使能通用定時器模式,以及反饋狀態(tài)。
G_Offset 寄存器用來配置定時的周期時間。
G_Refresh 寄存器用來刷新定時器,即喂狗。
工作模式如下圖所示:
通用模式工作時最多會有兩個定時周期,當(dāng)計數(shù)器計時達(dá)到第一個定時周期后,定時器會產(chǎn)生一個定時中斷。然后計數(shù)器會繼續(xù)計時,當(dāng)計數(shù)器計時到達(dá)第二個定時周期后,定時器會產(chǎn)生一個超時中斷。在定時器的計數(shù)器到達(dá)第二個定時周期之前,軟件程序都可以通過 G_Refresh 寄存器刷新計數(shù)器計數(shù)值,從頭開始計時。
可以看到通用模式使用起來非常簡單。但是有一點(diǎn)需要注意,通用模式的定時器在超時發(fā)生之后,并不會輸出系統(tǒng)級錯誤到 PSM 的錯誤堆棧中,即不會產(chǎn)生系統(tǒng)錯誤,從而使得 PSM 或者 PLM 程序固件執(zhí)行相應(yīng)的系統(tǒng)層面的操作。
3
窗口模式定時器
窗口模式定時器功能較為全面,功能充分考慮了系統(tǒng)安全的各種應(yīng)用場景。
窗口模式基本流程如上圖所示,一共可以分成三個部分,分別是第一窗口(First Window),第二窗口(Second Window)和二次序列時間(Second Sequence Timer)。一共涉及到5個寄存器,分別是使能與狀態(tài)寄存器(Enable_and_Status),功能控制寄存器(Funct_Ctrl),第一窗口時間寄存器(First_Wind),第二窗口時間寄存器(Second_Wind)和二次序列時間寄存器(SST_COUNT)。
第一窗口時間是一個封閉的時間段,在這個時間段內(nèi)應(yīng)用程序是不能對看門狗進(jìn)行刷新和復(fù)位操作。如果這個時間段內(nèi)對看門狗進(jìn)行了刷新喂狗或是復(fù)位看門狗操作,那么就會產(chǎn)生一個錯誤事件,從而輸出一個系統(tǒng)錯誤到 PSM 和 PMC。這樣設(shè)計是考慮到用戶既然配置看門狗,那么就一定是要讓看門狗起到作用,所以設(shè)置了一個保護(hù)看門狗的時間,用來防范系統(tǒng)的異常操作。
當(dāng)?shù)谝淮翱诒Wo(hù)期到了之后,看門狗會產(chǎn)生一個中斷通知系統(tǒng)。這個中斷的產(chǎn)生時間可以通過配置功能控制寄存器(Funct_Ctrl)中的 BSS 和 SBC 位設(shè)定。應(yīng)用程序可以在接收到中斷后刷新看門狗,或者復(fù)位/停止/重新配置看門狗。
如果應(yīng)用程序在第二窗口沒有對看門狗有任何處理,計時器超過了用戶設(shè)定的第二窗口時間,這個時候會產(chǎn)生超時中斷。如果在看門狗運(yùn)行之前使能了二次序列時間,那么看門狗此時不會立刻產(chǎn)生系統(tǒng)錯誤,而是等到二次序列時間計時結(jié)束之后再產(chǎn)生。這樣應(yīng)用程序就可以有時間去記錄一些狀態(tài),日志或是處理某些外設(shè)等操作,便于后續(xù)排查問題或是增加系統(tǒng)的安全性。但是要是沒有配置這個二次序列時間,那么看門狗在第二窗口時間超時之后會立刻產(chǎn)生錯誤事件,并發(fā)送系統(tǒng)錯誤到 PSM 和 PMC。
以上就是看門狗窗口模式下最基礎(chǔ)的功能。總的來說,應(yīng)用程序只有在看門狗處于第二窗口時間段內(nèi),才能對看門狗進(jìn)行刷新喂狗,復(fù)位/停止/重新配置操作,否則就會產(chǎn)生錯誤事件,并發(fā)送系統(tǒng)錯誤到 PSM 和 PMC。另外,需要注意以下兩點(diǎn):
第一個窗口的時間可以設(shè)置為 0,從而跳過保護(hù)周期。
在看門狗運(yùn)行的任意窗口期間,如果通過 LPD 和 FPD 的系統(tǒng)級別的復(fù)位對整個看門狗進(jìn)行復(fù)位,不會產(chǎn)生額外中斷以及系統(tǒng)錯誤。
為了進(jìn)一步提高看門狗的安全性,窗口模式下還提供了兩種防止系統(tǒng)異常操作的進(jìn)階功能。它們是簽名方式(PSM)和問答方式(Q&A),如下圖紅框標(biāo)注的功能。
1. 簽名方式(PSM)
在啟動看門狗計時之前,用戶需要先在 Task_Sig0 寄存器中保存一個簽名。然后應(yīng)用程序在第二窗口刷新看門狗之前,先要對 Task_Sig1 寄存器寫入和 Task_Sig0 一樣的簽名。當(dāng)看門狗被正常刷新之后,會先去比較這兩個簽名是否一致,如果不一致就會立刻產(chǎn)生一個錯誤事件,并產(chǎn)生系統(tǒng)錯誤輸出 PSM 和 PMC。
2. 問答方式(Q&A)
在運(yùn)行看門狗之前,用戶需要先在 Token_fb 寄存器中設(shè)定種子(seed)和反饋(FeedBack)值,這兩個值和使能與狀態(tài)寄存器(Enable_and_Status)中 ACNT 位會被用來計算寫入 Token_Resp 寄存器的值。算法如下表所示。Token 對應(yīng)種子值,Count 對應(yīng) ACNT 值,F(xiàn)eedback Value 對應(yīng)反饋值。
舉個例子,如果反饋(Feedback)的值是 3,那么應(yīng)答(response)的每一位的計算方法就需要參考上面列表中的最后一列"11"來進(jìn)行。那么 bit0 的值就是將 ACNT 的 bit1 值,異或種子(seed) bit 2 的值,再異或種子(seed)的 bit 3 的值。當(dāng)應(yīng)答 8 個位的值都計算好之后,寫入 Token_resp 寄存器中即完成了一次問答。
當(dāng)用戶配置好看門狗功能設(shè)置,各個窗口時間以及問答種子和反饋值后,需要通過執(zhí)行第一次應(yīng)答(response)以后,看門狗才會開始啟動計時。并且在第一窗口時間內(nèi),用戶需要完成第二次和第三次應(yīng)答,間隔的時間可以由用戶自行來控制。當(dāng)這兩次應(yīng)答完成后,即使第一窗口時間沒有計完,也會立即進(jìn)入第二窗口進(jìn)行計時。接著,用戶需要在第二窗口時間內(nèi)完成第四次應(yīng)答。一旦第四次應(yīng)答在第二窗口完成,即使第二窗口時間沒有計完,也會立即返回到第一窗口,重新開始計時。但是,如果在第二窗口內(nèi)沒有完成第四次應(yīng)答,那么同樣會回到第一窗口重新計時,不過接下來的應(yīng)答還是需要按照第四次應(yīng)答去完成。
在這個復(fù)雜的過程中,可以允許有限次數(shù)的應(yīng)答失敗,失敗次數(shù)保存在使能與狀態(tài)寄存器(Enable_and_Status)的失敗計數(shù)位中(Fail count)。也就是說每當(dāng)失敗一次,失敗計數(shù)就會增加 1,每應(yīng)答成功一次失敗計數(shù)就會減 1。當(dāng)失敗次數(shù)累計到 7 次以后,那么再出現(xiàn)失敗,就會產(chǎn)生一個錯誤事件,并發(fā)送系統(tǒng)錯誤輸出到 PSM 和 PMC。
4
總結(jié)
Vesal 器件中的看門狗模塊提供了豐富的功能,從應(yīng)用簡易程度和安全性方面層層遞進(jìn),讓用戶根據(jù)不同的應(yīng)用場景來實(shí)現(xiàn)對自己系統(tǒng)的保護(hù)。
審核編輯:劉清
-
amd
+關(guān)注
關(guān)注
25文章
5516瀏覽量
135018 -
寄存器
+關(guān)注
關(guān)注
31文章
5390瀏覽量
121896 -
嵌入式系統(tǒng)
+關(guān)注
關(guān)注
41文章
3645瀏覽量
130092 -
soc
+關(guān)注
關(guān)注
38文章
4243瀏覽量
219898 -
SoC芯片
+關(guān)注
關(guān)注
1文章
620瀏覽量
35201 -
PSM
+關(guān)注
關(guān)注
1文章
43瀏覽量
13552 -
看門狗定時器
+關(guān)注
關(guān)注
0文章
41瀏覽量
16309
原文標(biāo)題:開發(fā)者分享|SWDT 在 AMD Versal? Adaptive SoC 中的應(yīng)用
文章出處:【微信號:gh_2d1c7e2d540e,微信公眾號:XILINX開發(fā)者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
AMD Versal SoC刷新邊緣AI性能,單芯片方案驅(qū)動嵌入式系統(tǒng)

CSU SWDT、LPD SWDT和FPD SWDT的關(guān)系與使用
使用QEMU啟動Versal VCK190
Versal 自適應(yīng)SoC設(shè)計指南

AMD率先推出符合DisplayPort? 2.1 8K視頻標(biāo)準(zhǔn)的FPGA和自適應(yīng)SoC
AMD Versal SoC全新升級邊緣AI性能,單芯片方案驅(qū)動嵌入式系統(tǒng)

AMD發(fā)布第二代Versal自適應(yīng)SoC,AI嵌入式領(lǐng)域再提速
AMD Versal? Adaptive SoC CPM PCIE PIO EP設(shè)計CED示例

ALINX VERSAL SOM產(chǎn)品介紹
AMD Versal自適應(yīng)SoC CPM5 QDMA的Tandem PCIe啟動流程介紹

AMD推出第二代Versal Premium系列
AMD Vivado Design Suite 2024.2全新推出
如何通過PMC_GPIO喚醒AMD Versal? Adaptive SoC Linux系統(tǒng)

AMD Versal自適應(yīng)SoC器件Advanced Flow概覽(上)

AMD Versal自適應(yīng)SoC器件Advanced Flow概覽(下)

評論