⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wdt.v

📁 对与单片机常用的功能看门狗
💻 V
字号:




`define SECOND_2  2'b10		// 2秒定时清狗
`define SECOND_30 5'b10010	// 30秒定时清狗
module wdt(Wdi,Wdo,reset,clk,Mr,softrst,wdt_flag,time_flag,Clr_WDT_Reg,cycle);

	input Wdo;
	output Wdi;
	input reset;
	output Mr;
	input clk;
	input softrst;
	input time_flag;
	input wdt_flag;
	input Clr_WDT_Reg;
	output cycle;

reg		Mr_Out_Reg;	// AMD706_MR输出寄存器
reg		Wdo_Dly_Reg;	// Wdo延时一拍
reg	[4:0]	Wdo_Cnt_Reg;	// Wdo输入计数寄存器

reg		Wdi;		// 输出清狗信号
wire	[4:0]	Timer;		   // 清狗时间间隔变量
//wire		Clr_WDT_Flag;	   // CPU清狗标志 


/* *************************** 看门狗控制******************************** */
// 清狗时间间隔选择
assign	Timer = time_flag? `SECOND_30:`SECOND_2;    // watchdog[0]为1时,选择30S清狗间隔;
							// watchdog[0]为0时,选择2S清狗间隔;
// 当看门狗打开后,在Wdo的下降沿计数器增1
always @(negedge reset or posedge clk)		//将WDO信号用内部时钟同步,保证CPLD对
begin							//信号的可靠采集
    if(!reset)
	Wdo_Dly_Reg <= 1'b0;
    else
	Wdo_Dly_Reg <= Wdo;
end

always @(negedge reset or posedge clk)		//同步后的信号直接输出对ADM706的定时器清零
begin
    if(!reset)
	Wdi <= 1'b0;
    else
	Wdi <= Wdo_Dly_Reg;
end

always @(negedge reset or posedge clk or negedge softrst)
begin
    if(!reset| (!softrst))
	Wdo_Cnt_Reg <= 5'b00000;
    else if(Clr_WDT_Reg)
	Wdo_Cnt_Reg <= 5'b00000;
    else if(!Wdo_Dly_Reg && Wdi&& (wdt_flag==1'b1))
	Wdo_Cnt_Reg <= Wdo_Cnt_Reg + 5'b00001;
end



// 当CPU执行全局复位或看门狗计数器计数值超过设定值时,输出706_MR低电平
always @(negedge reset or posedge clk)
begin
    if(!reset)
	Mr_Out_Reg <= 1'b1;
    else if((Wdo_Cnt_Reg == Timer)&& (wdt_flag==1'b1))
	Mr_Out_Reg <= 1'b0;
end

// 看门狗MR输出
assign	Mr = Mr_Out_Reg;
assign  cycle=!Wdo_Dly_Reg & Wdi;

endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -