欢迎来到天天文库
浏览记录
ID:41152330
大小:201.12 KB
页数:10页
时间:2019-08-17
《【CPLD Verilog】CPLD实现Watchdog功能》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、CPLD实现Watchdog功能1实现原理CPLD实现Watchdog功能,通过对寄存器的操作,实现Watchdog各项功能。CPLD内部Watchdog模块逻辑框图如下所示。reset_nclkCLK_DIVEOdgcvwdt_wdieDouerfntleclk_refewcwdt_offwdt_rstwdt_rst_forceRSTLogicwdt_off_1min_pulsewdt_off_1min_on1minCountWdt_wdi为喂狗信号,电平跳变则清除看门狗溢出计数器计时。Wdt_off为强制关狗信号,屏蔽看门狗溢出输出。Wdt_rst_force
2、用于强制输出复位信号。Wdt_off_1min_pulse用于强制关闭看门狗1分钟。Wdt_rst用于输出复位脉冲信号。Wdt_off_1min_on用于输出1分钟关狗的状态,表示是否处于1min关闭看门狗状态中。2CPLD代码moduleWDT(clk,reset_n,wdt_wdi,//看门狗喂狗信号输入Author:Lanre版权所有,请勿用于商业用途,第1页,共10页违者必究wdt_rst,//看门狗溢出复位输出wdt_off,//强制关闭看门狗输入wdt_rst_force,//强制看门狗输出复位信号wdt_off_1min_pulse,//强制关闭看门
3、狗1min,脉冲输入,1个clk周期宽度wdt_off_1min_on//强制关闭看门狗1min状态输出,高电平表示处于1min关//狗中,低电平表示处于正常状态);inputclk;inputreset_n;inputwdt_wdi;outputwdt_rst;inputwdt_off;inputwdt_rst_force;inputwdt_off_1min_pulse;outputwdt_off_1min_on;//////////////////////////internalclock//////////////////////////////产生一个周期
4、100ms左右的时钟,分两级完成,先输出一个381Hz的时钟,再通过381Hz时//钟分出一个12Hz时钟reg[15:0]count_div1;wirecondition_381;Author:Lanre版权所有,请勿用于商业用途,第2页,共10页违者必究//Divide25Malways@(posedgeclkornegedgereset_n)beginif(reset_n==1'b0)begincount_div1<=16'h0000;endelsebegincount_div1<=count_div1+16'h0001;endendassigncondit
5、ion_381=&count_div1[15:0];//25M/2^15=381Hz//assigncondition_381=&count_div1[3:0];//25M/2^4=97656Hz//用于仿真reg[4:0]count_div2;wirecondition_12;//Divide25Malways@(posedgeclkornegedgereset_n)beginif(reset_n==1'b0)begincount_div2<=5'h00;endelseif(condition_381==1'b1)begincount_div2<=count_d
6、iv2+5'h01;endAuthor:Lanre版权所有,请勿用于商业用途,第3页,共10页违者必究else;end//产生12Hz时钟,每个周期高电平宽度为1个clk时钟周期assigncondition_12=(&count_div2[4:0])&condition_381;//381/2^5=12Hz//////////////////////////WDTedgefeedwatchdog//////////////////////////////喂狗信号输入处理,检测到喂狗信号的边沿跳变(上升或下降),看门狗溢出计时计数器//清零reg[1:0]wdt_
7、wdi_dly;always@(posedgeclkornegedgereset_n)beginif(reset_n==1'b0)beginwdt_wdi_dly<=2'b11;endelsebeginwdt_wdi_dly<={wdt_wdi_dly[0],wdt_wdi};endend//喂狗信号有边沿跳变时,产生一个clk周期的高电平脉冲wirewdt_wdi_dly_edge;assignwdt_wdi_dly_edge=((wdt_wdi_dly==2'b10)
8、
9、(wdt_wdi_dly==2'b01))?1'b1:1'b0;/////////////
10、/////
此文档下载收益归作者所有