基于CPLD的系統(tǒng)硬件看門狗設(shè)計(jì)
摘要:基于以DSP芯片TMS320F2812為核心的數(shù)字伺服控制器,以國微電子公司的SM1032國產(chǎn)CPLD(兼容Lattice公司的ispLSI 1032)為載體,設(shè)計(jì)了專用的系統(tǒng)硬件看門狗模塊,具備識(shí)別DSP軟件初始化時(shí)序、自由定制看門狗時(shí)序等功能。通過對(duì)伺服控制器上電及工作運(yùn)行時(shí)序的分析、仿真和實(shí)驗(yàn)驗(yàn)證,確定了硬件看門狗功能模塊的設(shè)計(jì)方案,并給出了實(shí)驗(yàn)結(jié)果。
關(guān)鍵詞:看門狗;CPLD;狀態(tài)機(jī);仿真
引言
在以單片機(jī)、DSP等處理器為核心的數(shù)字系統(tǒng)中,看門狗是不可缺少的一部分,特別是在對(duì)可靠性要求極高的系統(tǒng)中,如箭上伺服控制器,由于箭體內(nèi)強(qiáng)弱電交叉使用,或者地面測(cè)試環(huán)境復(fù)雜多變,會(huì)產(chǎn)生諸多干擾和輻射。它們的沖擊會(huì)使CPU在執(zhí)行指令時(shí)的地址碼或操作碼發(fā)生變化,甚至將操作數(shù)作為操作碼執(zhí)行,導(dǎo)致程序跑飛。為使系統(tǒng)在規(guī)定時(shí)間內(nèi)重新正常工作,一種有效的措施是采用硬件看門狗技術(shù)。
本設(shè)計(jì)的最初思路來源:實(shí)現(xiàn)高可靠性數(shù)字伺服控制器軟、硬件看門狗的雙冗余設(shè)計(jì)要求,目前缺少軍品級(jí)國產(chǎn)化硬件看門狗器件,在滿足系統(tǒng)要求的情況下減少元器件的種類。
1 看門狗技術(shù)的實(shí)現(xiàn)方式
看門狗實(shí)現(xiàn)方式可分為以下兩種:
硬件看門狗——采用一個(gè)獨(dú)立于CPU的定時(shí)器電路或芯片,如MAX706或TPS3823等,周期性地產(chǎn)生復(fù)位脈沖,而CPU必須及時(shí)“喂狗”(在復(fù)位脈沖發(fā)出前對(duì)此定時(shí)器進(jìn)行清零處理),否則看門狗發(fā)揮作用,復(fù)位脈沖會(huì)使CPU重啟。
軟件看門狗——利用CPU內(nèi)部的定時(shí)器中斷替代看門狗定時(shí)器電路,存中斷程序中復(fù)位CPU,這同樣發(fā)揮了看門狗的作用。但由于CPU中斷存在優(yōu)先級(jí)、屏蔽以及中斷自身故障等原因,郁可能導(dǎo)致軟件看門狗工作異常。軟件看門狗往往采用一些其他軟件設(shè)計(jì)措施提高其可靠性。
2 基于CPLD的硬件看門狗設(shè)計(jì)
2.1 硬件平臺(tái)
此設(shè)計(jì)基丁箭上數(shù)字伺服控制器,以TI公司的TMS320F2812(下面簡稱為DSP)為控制核心,SM1032則用來實(shí)現(xiàn)對(duì)A/D、D/A和1553B總線的片選信號(hào)和邏輯控制信號(hào)譯碼,并在此基礎(chǔ)上增加了硬件看門狗功能。與其相關(guān)的電路連接如圖1所示,其中看門狗使能信號(hào)EN與DSP_JTAG電路相連,在DSP下載程序或在線仿真時(shí)可通過專用的JTAG 工裝電纜禁止看門狗功能,防止看門狗的誤操作。
本設(shè)計(jì)適用于以微控制器與FPGA或CPLD聯(lián)合使用的數(shù)字控制系統(tǒng)中。利用FPGA或CPLD的剩余資源沒計(jì)看門狗模塊,相當(dāng)于硬件看門狗的一種,其基本功能和特點(diǎn)有:當(dāng)軟件跑飛且主控芯片內(nèi)部看門狗工作異常時(shí),可為系統(tǒng)進(jìn)行復(fù)位操作;可關(guān)閉主控芯片內(nèi)部的軟件看門狗,優(yōu)化軟件代碼;可節(jié)省專用的看門狗芯片,且在不同時(shí)序要求上靈活修改;可根據(jù)系統(tǒng)要求增加與主控芯片的握手信號(hào)。[!--empirenews.page--]
2.2 DSP上電過程及復(fù)位時(shí)序分析
DSP上電初始化時(shí)序如圖2所示。WDT是喂狗信號(hào)輸出,在定時(shí)器中斷或主循環(huán)中使其電平周期性取反;RST是上電復(fù)位信號(hào)。Trst是上電復(fù)位信號(hào)的脈寬,約為100 ms;Twork是從上電時(shí)到首次進(jìn)入定時(shí)器中斷程序的時(shí)間,約為130 ms。在主程序中首先使WDT輸出低電平,則從上電復(fù)位完成到WDT變?yōu)榈碗娖降臅r(shí)間A為DSP復(fù)位后自身的各項(xiàng)配置所占用的時(shí)間。在定時(shí)器中每次取反WDT信號(hào),則到WDT第一次變?yōu)楦唠娖降臅r(shí)間B為各軟件模塊及中斷初始化所占用的時(shí)間。A+B為系統(tǒng)初始化所用的時(shí)間,約為30ms。
由此可見,如果系統(tǒng)程序跑飛,則每次復(fù)位都要經(jīng)過A、B兩個(gè)過程,約30 ms的時(shí)間;那么在CPLD軟件的看門狗模塊中,每次在給出復(fù)位信號(hào)后都要等待DSP的初始化完成(約30 ms)后再開始對(duì)喂狗信號(hào)監(jiān)測(cè)并計(jì)時(shí)。
選擇看門狗定時(shí)器溢出上限以5ms為例,從程序跑飛到重新正常運(yùn)行大約35 ms。設(shè)定控制系統(tǒng)給伺服發(fā)送控制指令信號(hào)的周期是20 ms,伺服機(jī)構(gòu)常態(tài)速度10°/s,最大速度是20°/s,20 ms的時(shí)間擺動(dòng)的角度是0.2°和0.4°,該角度是其控制姿態(tài)的最小步長,因此35 ms以內(nèi)的熱復(fù)位時(shí)間最多丟失兩條指令,伺服機(jī)構(gòu)在可控范同之內(nèi)。此外,軟件代碼還有一定的優(yōu)化余量,初始化時(shí)間和看門狗定時(shí)器溢出上限還可進(jìn)一步減少。
2.3 看門狗設(shè)計(jì)要考慮的幾點(diǎn)問題
①喂狗方式:可分為電平喂狗和邊沿喂狗,本設(shè)計(jì)采用后者。與電平喂狗相比較,邊沿喂狗在狀態(tài)機(jī)的設(shè)計(jì)中可以減少狀態(tài)數(shù)量,從而節(jié)省CPLD資源,且DSP的喂狗也很容易,只要取反WDT電平,就可被認(rèn)為已喂狗,簡化軟件代碼。
②定時(shí)器溢出上限:根據(jù)具體需要靈活設(shè)定,這里暫定5 ms。
③輸出系統(tǒng)復(fù)位信號(hào)脈寬:這里只要超過DSP所需的512個(gè)時(shí)鐘周期即可,以30 MHz品振為例,時(shí)長約為171μs。
④系統(tǒng)上電初始化時(shí)間:系統(tǒng)上電復(fù)位后DSP需要一斷時(shí)間初始化,而這段時(shí)間內(nèi)不能喂狗,所以CPLD不能檢測(cè)是否有喂狗信號(hào),否則會(huì)造成連續(xù)的錯(cuò)誤復(fù)位,使DSP無法正常工作,因此在CPLD代碼設(shè)計(jì)時(shí)需要越過初始化階段再去檢測(cè)喂狗信號(hào)。
⑤與主控芯片的摒手信號(hào):根據(jù)系統(tǒng)任務(wù)需求,可增加與主控芯片的握手信號(hào)。例如,當(dāng)主控芯片需要實(shí)現(xiàn)總線寫程序功能時(shí),對(duì)DSP片內(nèi)的Flash進(jìn)行寫操作,此時(shí)不能對(duì)DSP進(jìn)行復(fù)位,DSP也無法輸出喂狗信號(hào),這就需要在總線寫程序之前通過總線與CPLD實(shí)現(xiàn)握手與應(yīng)答,關(guān)閉看門狗功能,程序?qū)懭胪瓿珊笙到y(tǒng)重新加電即可正常工作。為了簡化功能描述,本設(shè)計(jì)術(shù)加入握手設(shè)計(jì)。
2.4 看門狗狀態(tài)機(jī)的設(shè)計(jì)
此設(shè)計(jì)采用Mealy型狀態(tài)機(jī),使用Verilog HDL語言編寫代碼,信號(hào)、寄存器說明如下所示:Count,時(shí)間計(jì)數(shù)器;NUM1,定時(shí)器溢出上限(5 ms);NUM2,輸出復(fù)位脈沖寬度(大丁171μs);NUM3,上電復(fù)位后等待DSP初始化的時(shí)間(30 ms);WDT_fiag,3位寬移位寄存器,接收喂狗信號(hào),比較首未位是否相等來判斷是否有喂狗信號(hào);SYS_RST,看門狗輸出的系統(tǒng)復(fù)位信號(hào);WAIT、IDLE、ADDING、ERROR、KEEPING,狀態(tài)機(jī)的5個(gè)狀態(tài);EN,看門狗功能使能信號(hào),高電平禁止,低電平使能。[!--empirenews.page--]
圖3為狀態(tài)轉(zhuǎn)移圖。在任意狀態(tài)時(shí)如果EN使能信號(hào)被禁止,則狀態(tài)機(jī)進(jìn)入IDLE狀態(tài)。在圖上不一一標(biāo)出EN的條件轉(zhuǎn)移曲線。系統(tǒng)上電復(fù)位后進(jìn)入WAIT狀態(tài),等待NUM3時(shí)間使DSP完成初始化;進(jìn)入IDLE狀態(tài),如使能看門狗功能;進(jìn)入ADDING狀態(tài)累加計(jì)時(shí),如果在限定時(shí)間NUM1內(nèi)監(jiān)測(cè)到喂狗信號(hào),表明程序運(yùn)行正常,返回IDLE狀態(tài)等待下一次喂狗信號(hào),如果超過NUM1未收到喂狗信號(hào),認(rèn)為程序已經(jīng)跑飛,進(jìn)入EEROR狀態(tài);EEROR狀態(tài)中輸出復(fù)位信號(hào)并清零計(jì)數(shù)器;進(jìn)入KEEPING狀態(tài),使低電平保持一段時(shí)間NUM2,這段時(shí)間超過DSP所需的復(fù)位時(shí)間即可;進(jìn)入WAIT狀態(tài),復(fù)位后重新等待DSP完成初始化,循環(huán)往復(fù)。
3 基于CPLD的硬件看門狗的仿真與驗(yàn)證
3.1 功能仿真
使用Modelsim軟件進(jìn)行功能仿真,可以看出EN信號(hào)和WDT(喂狗信號(hào))的變化對(duì)SYS_RST輸出的影響。編寫測(cè)試文件對(duì)EN使能、禁止,WDT信號(hào)喂狗間隔小于、大于定時(shí)器溢出上限,以及不喂狗等情況進(jìn)行仿真。
仿真波形1如圖4所示。EN處于使能狀態(tài),WDT在限定時(shí)間內(nèi)有邊沿變化時(shí),對(duì)應(yīng)的移位寄存器也發(fā)生變化,使WDT_flag[2]!=WDT_flag[0],喂狗成功,不會(huì)輸出復(fù)位信號(hào);存SYS_RST第二個(gè)低電平處,對(duì)應(yīng)的WDT超過了限定時(shí)間沒有變化,故輸出復(fù)位信號(hào)。[!--empirenews.page--]
仿真波形2如圖5所示。由仿真波形可看出,在EN高電平時(shí),不會(huì)輸出喂狗信號(hào),使能信號(hào)測(cè)試通過,喂狗信號(hào)存EN使能時(shí)如不能存限定時(shí)間內(nèi)喂狗,則輸出系統(tǒng)復(fù)位信號(hào)。由仿真波形看出功能得到實(shí)現(xiàn)。
3.2 硬件平臺(tái)驗(yàn)證
在伺服控制器上對(duì)基丁CPLD的硬件看門狗功能進(jìn)行驗(yàn)證。DSP上電初始化完成后,先止常輸出喂狗信號(hào)一段時(shí)間,然后停止輸出喂狗信號(hào),通過示波器捕獲CPLD輸出的系統(tǒng)復(fù)位信號(hào),波形如圖6所示,光標(biāo)1是系統(tǒng)復(fù)位信號(hào)SYS_RST波形,光標(biāo)2是DSP輸出的喂狗信號(hào)WDT波形。從波形圖前半段可以看出,WDT正常喂狗時(shí),SYS_RST保持高電平,當(dāng)WDT保持高電平一段時(shí)間后SYS_RST輸出低電平,實(shí)現(xiàn)系統(tǒng)復(fù)位。復(fù)位后經(jīng)過一段時(shí)間的初始化過程后,WDT開始正常喂狗。
通過以上軟件的功能仿真和硬件平臺(tái)上的驗(yàn)證,可以看出,基于FPGA/CPLD的系統(tǒng)外部硬件看門狗的功能得到實(shí)現(xiàn),與預(yù)期目標(biāo)吻合。
結(jié)語
在數(shù)字伺服控制系統(tǒng)中,利用其中已包含的CPLD或FPGA電路設(shè)計(jì)硬件看門狗模塊,既可以滿足系統(tǒng)對(duì)硬件看門狗功能的需求,又可以節(jié)省專用的看門狗芯片,節(jié)省電路板的空間,提高了系統(tǒng)的可靠性,提高了可編程邏輯器件的資源利用率,并且可以針對(duì)不同的系統(tǒng)上電、復(fù)位等時(shí)序要求靈活配置時(shí)間參數(shù)。經(jīng)驗(yàn)證,沒計(jì)達(dá)到了看門狗電路的功能要求,能夠有效保證軟件的可靠性,亦可應(yīng)用于其他數(shù)字控制系統(tǒng)平臺(tái)。