码迷,mamicode.com
首页 > 其他好文 > 详细

[Verilog]寫一個 Watch Dog Timer程式

时间:2016-08-31 00:46:22      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:

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

簡單來說就是防止系統死當,在程式設計時常會發生系統當機,而需要重新開機,那如何用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}==2b01)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] 看門狗計時器- 维基百科,自由的百科全书

 

引用請標明出處。

 

[Verilog]寫一個 Watch Dog Timer程式

标签:

原文地址:http://www.cnblogs.com/lishyhan/p/5824002.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!