[Verilog]寫一個 Watch Dog Timer程式

看門狗計時器是一種計時裝置,當系統的主程式發生某些錯誤事件時,如假死機或未定時的清除看門狗計時器的內含計時值(多半是向對計時器發送清除信號),這時看門狗計時器就會對系統發出重設、重新開機或關閉的信號,使系統從懸停狀態回復到正常運作狀態。看門狗一旦使用則不能停止。一般情況下計數器在系統休眠時依然計數,但在某些晶片上,處於低功耗模式下的看門狗僅僅保留暫存器資料但不計數。

簡單來說就是防止系統死當,在程式設計時常會發生系統當機,而需要重新開機,那如何用FPGA來寫呢?

Q: 請寫出一個硬體電路,必須在1秒內送一個iLive訊號給WGT程式,否則WGT會送出Timeout訊號。

 1 // --------------------------------------------------------------------
 2 // Copyright (c) 2016 by Shih-An Li.
 3 // --------------------------------------------------------------------
 4 // --------------------------------------------------------------------
 5 //
 6 // Major Functions: Watch Dog Timer,
 7 //
 8 // --------------------------------------------------------------------
 9 // // Revision History :
10 // --------------------------------------------------------------------
11 //   Ver  :| Author            :| Mod. Date :| Changes Made:
12 //   V1.0 :| Shih-An Li        :| 2016/08/29  :|      Initial Revision
13 // --------------------------------------------------------------------
14 module  WatchDogTimer(
15                         iClk_50M,       // 50M
16                         iRst_n,         // rst_n
17                         // input
18                         iWGT_En,        // Enable WGT
19                         iLive,          // reset WGT counter, 0->1 trigger
20                         oTimerOut           // Timeout
21
22             );
23
24 //=======================================================
25 //  PARAMETER declarations
26 //=======================================================
27 parameter   CLK_Freq    =   50000000;   // input clk frequency
28
29 //=======================================================
30 //  PORT declarations
31 //=======================================================
32 input                       iClk_50M;       // 50M
33 input                       iRst_n;         // rst_n
34 input                       iWGT_En;
35 input                       iLive;          // a 0->1 trigger
36                         //  output
37 output                      oTimerOut;      // Timer Out
38
39
40 //=======================================================
41 //  REG/WIRE declarations
42 //=======================================================
43 reg                         rTimerOut;
44 reg                         rWGT_En;
45 reg [31:0]                  rWGT_Cnt;
46 reg                         rLive_Dly;
47 //=======================================================
48 //  Structural coding
49 //=======================================================
50
51 assign oTimerOut = rTimerOut;
52 //watch dog timer
53 always@(posedge iClk_50M or negedge iRst_n) begin
54     if(!iRst_n) begin
55         rWGT_En <= 0;
56         rWGT_Cnt <= 0;
57         rTimerOut <= 0;
58         rLive_Dly <= 0;
59     end
60     else begin
61         rWGT_En <= iWGT_En;
62         rWGT_Cnt <= rWGT_Cnt;
63         rTimerOut <= rTimerOut;
64         rLive_Dly <= iLive;
65
66         if(rWGT_En) begin
67             if({rLive_Dly, iLive}==2‘b01)begin
68                 rWGT_Cnt <= 0;
69                 rTimerOut <= 0;
70             end
71             else if(rWGT_Cnt >= (CLK_Freq*1 -1)) begin // count to one second to send timeout
72                 rWGT_Cnt <= rWGT_Cnt;
73                 rTimerOut <= 1;
74             end
75             else begin
76                 rWGT_Cnt <= rWGT_Cnt+1;
77                 rTimerOut <= 0;
78             end
79         end
80         else begin
81             rWGT_Cnt <= 0;
82             rTimerOut <= 0;
83         end
84     end
85 end
86
87 endmodule

程式說明

67行 偵測iLive的觸發訊號。

71行 當rWGT_Cnt計數值超過 (CLK_Freq*秒數)時送出Timeout訊號。

reference

[1] 看門狗計時器- 维基百科,自由的百科全书

引用請標明出處。

时间: 2024-10-14 18:42:24

[Verilog]寫一個 Watch Dog Timer程式的相关文章

在 Swift 專案中使用 Javascript:編寫一個將 Markdown 轉為 HTML 的編輯器

原文:Using JavaScript in Swift Projects: Building a Markdown to HTML Editor 作者:GABRIEL THEODOROPOULOS 譯者:kmyhy 一直想寫一篇文章,關於如何將 Swift 和 Javascript 結合在一起,以構建強大的支持富文本的 App.這並不是我們第一次聽人說要將 Javacript 代碼嵌入到 iOS 專案中了,但當你讀完本文后,你會感到這個過程會變得前所未有的簡單,仿佛魔術一般,你只需要做很少的工

如何寫一個邏輯引擎?

现试用最简单的方法,介绍如何写一个逻辑引擎. 即使是现时最尖端的人工智能,例如 OpenCog,它的内部仍然是很简单的. 逻辑推理 (deduction) 只需要两个算法: 命题推理 配对法 (unification) 这两个算法只需要数行程式就能表达 ! 逻辑是什么? 逻辑可以分解为两部分: 命题逻辑 (propositional logic) 命题内部的结构 命题逻辑 命题逻辑的意思是:  我们只关心命题的真假,而不看命题内部的结构.  所以「小明爱小娟」和「北京昨天下雨」都是同一类句子,只

[FPGA] DP83848網路晶片開發心得(1)

最近想要用FPGA來存取網路,於是想到之前買的一個DP88848晶片的網路版子,剛好拿出來研究研究. 查了一下規格它是使用RMII的傳輸介面可以達到10M/100M的速度,應該很夠用了吧. 那第一步就是先研究一下這電路要怎麼接?剛好有在網路找到其電路圖? 買了 一個洞洞板,接到DE0-Nano的GPIO_0,腳位如下: pin discrption GPIO_0[10]: MDC    GPIO_0[11]: MDIO GPIO_0[12]: CRS     GPIO_0[13]: OSCIN

Delphi APP 開發入門(二)Android/iOS設定,Hello World

Delphi APP 開發入門(二)Android/iOS設定,Hello World 分享: Share on facebookShare on twitterShare on google_plusone_share 閲讀次數:9047 發表時間:2014/05/12 tags: 行動開發 教學 App Delphi XE6 Android iOS 上一期 讓大家認識Delphi以及安裝後,今天要教大家設定Delphi在Android與iOS的開發環境,並且教大家透過寫出第一個Hello W

[SharePoint 2010] Visual Studio 2010內撰寫視覺化WebPart超簡單

新一代的Visual Studio 2010對於SharePoint 2010的專案撰寫,有非常另人讚賞的改進. 以往寫一個WebPart要搞好多雜七雜八的步驟,也要硬寫HTML輸出,當然有人說可以寫UserControl後再掛在其它的WebPart容器內, 但是也是須要不少工夫去處理它. 現在,這些問題都沒了,簡單的幾個步驟,就可以做出功能強大的WebPart,而且偵錯方法也非常簡單. 新一代的Visual Studio 2010對於SharePoint 2010的專案撰寫,有非常另人讚賞的改

(转载)閱讀他人的程式碼(6)閱讀的樂趣:透過程式碼認識作者

即便每個人的寫作模式多半受到他人的影響,程式人通常還是會融合多種風格,而成為自己獨有的特色,如果你知道作者程式設計的偏好,閱讀他的程式碼就更得心應手. 閱讀程式碼時,多半會採取由上而下.抽絲剝繭的方式.透過記錄層層展開的樹狀結構,程式人可以逐步地建立起對系統的架構觀,而且可以依照需要的粒度(Granularity),決定展開的層次及精緻程度. 建立架構觀點的認識是最重要的事情.雖然這一系列的文章前提為「閱讀他人的程式碼」,但我們真正想做的工作,並不在於徹底地詳讀每一行程式碼的細節,而是想要透過重

用 Swift、Foursquare API 和 Realm 創建一個咖啡屋 App

原文链接 : Building a Coffee Shop App with Swift, Foursquare API and Realm 原文作者 : De Vries Reinder 译文出自 : APPCODA 译者 : kmyhy 人們常說,程序員能將咖啡變成電腦程式.接下來,我們將編寫一個 App,列出距離你最近的咖啡屋! 在本教程中,你將使用到如下技能: Swift.Xcode 和 Interface Builder (自動佈局.約束和故事板) Realm,一個輕量級的 Core

[ZigBee] 12、ZigBee之看门狗定时器——饿了就咬人的GOOD DOG

引言:硬件中的看门狗,不是门卫的意思,而是一只很凶的狗!如果你不按时喂它,它就会让系统重启!这反而是我们想要的功能~ 1.看门狗概述 看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个数字,程序开始运行后看门狗开始倒计数.如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始倒计数.如果看门狗减到0就认为程序没有正常工作,强制整个系统复位.因此可以用看门狗防止程序在跑飞的时候回不到正常模式. 看门狗可用于受到电气噪音.

X86 Booting Sequence

1.BIOS 0xFFFF0電源正常啟動後,x86 CPU 會先執行 0xFFFF0,也就是 BIOS ROM 的進入點.由於 0xFFFF0 ~ 0xFFFFF 只有少的很可憐的 16 bytes,真正的 BIOS code 勢必要擺到其他位置,此時 0xFFFF0 的作用便是 jmp 到該位置執行 BIOS 程式. POST (Power-On Self Test)BIOS 程式的第一個動作就是執行最基本的 POST 檢查,確保系統在開機當中可以正常運作.通常用 beep 聲來表示檢查結果.