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

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

AMD Versal SoC全新升級(jí)邊緣AI性能,單芯片方案驅(qū)動(dòng)嵌入式系統(tǒng)

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

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

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概覽(下)

第二代AMD Versal Premium系列SoC滿足各種CXL應(yīng)用需求

評(píng)論