基于verilog设计一个硬件看门狗

这篇具有很好参考价值的文章主要介绍了基于verilog设计一个硬件看门狗。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、 看门狗简介

  看门狗:也称看门狗定时器,是常见于系统的一种外设;
看门狗似乎就是一条看门的狗,如果系统一切正常则看门狗不叫,如果程序不正常,则看门狗则会将程序咬死(即程序强制复位)。
  看门狗的作用:当一段程序跑飞,卡死或不受控制时,能使得系统强制重启;
  喂狗:当看门狗被初始化后,需要在程序中每进行一段时间就重置看门狗模块的定时器计数值,防止程序被咬死;
  程序咬死:当程序出现问题时(跑飞或锁死),导致看门狗定时器的计数值没能及时重置,当计数值达到设置的阈值后,看门狗定时器则输出复位信号,使得CPU强制复位;


二、看门狗分类

  硬件看门狗:看门狗实际上就是一个计数器,硬件看门狗就是以硬件实现的一种计数器,其可以集成在单片机,SOC等系统中,使用硬件看门狗不用消耗额外的软件资源;
  软件看门狗:利用软件实现软件计数器,利用该计数器判断是否计数达到阈值,达到阈值则调用软件复位程序,常与定时器中断一起使用;
  窗口看门狗:独立看门狗在0-重载值之间都可以进行喂狗操作,这样如果程序跑飞反复在喂狗,则程序无法复位;窗口看门狗则对喂狗的时间设置了阈值(上下限),喂狗操作只能在阈值间进行喂狗,其他时间喂狗都无效;


三、看门狗模块设计

3.1 看门狗模块设计框图

verilog 看门狗,基于Vivado的硬件设计,fpga开发,硬件工程,硬件架构,嵌入式硬件,架构

3.2 顶层

module wtd_counter_top#(
    parameter integer   COUNTER_WIDTH = 16,
    parameter integer   RST_SIG_WIDTH = 2
    )(
        input  wire                            ref_clk,//system reference clock
        input  wire                               nrst,//system reset signal, Valid: 1'b0
        input  wire                                 en,//system enable signal, Valid: 1'b1
        input  wire [COUNTER_WIDTH - 1:0] up_threshold,//system upside threshold
        output wire [COUNTER_WIDTH - 1:0]        count,//system clock counter
        output wire                            wtd_rst 
    );

   wire                    rst_req;
   wire [RST_SIG_WIDTH :0] rst_req_dff; 

   assign rst_req  = (count == up_threshold) ? 1'b1:1'b0;
   assign wtd_rst = |rst_req_dff;

   genvar DFF_inist_index;
   generate 
        for(DFF_inist_index = 0;
            DFF_inist_index < RST_SIG_WIDTH;
            DFF_inist_index = DFF_inist_index +1)
         begin: dff_cell_inist//
            dff#(.DFF_LEVEL(1),.DATA_WIDTH(1)
            )dff_inist(
                .clk(ref_clk),
                .din(rst_req_dff[DFF_inist_index]),
                .dout(rst_req_dff[DFF_inist_index+1]),
                .nrst(nrst)
            );
         end
    endgenerate

    edge_check edge_check_inist0(
        .ref_clk(ref_clk),
        .nrst(nrst),
        .din(rst_req),
        .dout(rst_req_dff[0])
    );
     wtd_counter#(
        .COUNTER_WIDTH(COUNTER_WIDTH)
    )wtd_counter_inist0(
        .ref_clk(ref_clk),//system reference clock
        .nrst(nrst),//system reset signal, Valid: 1'b0
        .en(en),//system enable signal, Valid: 1'b1
        .up_threshold(up_threshold),//system upside threshold
        .count(count) //system clock counter 
    );
endmodule

3.3 计数器

module wtd_counter#(
        parameter integer   COUNTER_WIDTH = 16
    )(
        input  wire                            ref_clk,//system reference clock
        input  wire                               nrst,//system reset signal, Valid: 1'b0
        input  wire                                 en,//system enable signal, Valid: 1'b1
        input  wire [COUNTER_WIDTH - 1:0] up_threshold,//system upside threshold
        output wire [COUNTER_WIDTH - 1:0]        count //system clock counter 
    );

    /**************************wtd inner signal design**************************/
    reg  [COUNTER_WIDTH - 1:0]      count_r;

    /**************************wtd inner signal connect**************************/
    assign   count = count_r;

    always @(posedge ref_clk) begin : proc_
        if(~nrst) begin
            count_r <= 'b0;
        end else begin
            if(en)
            begin
                if(count_r != up_threshold)
                    count_r <= count_r + 1'b1;
                else
                    count_r <= count_r;
            end
            else
            begin
                count_r <= count_r;
            end
        end
    end

endmodule

3.4 边沿检测器

module edge_check(
        input  wire    ref_clk,
        input  wire       nrst,
        input  wire        din,
        output wire       dout
    );

    reg  din_dff;

    assign dout = (din) & (~din_dff);

    always @(posedge ref_clk ) begin
        if(~nrst) begin
            din_dff <= 0;
        end 
        else begin
            din_dff <= din;
        end
    end

endmodule

3.5 信号延迟模块

module dff#(
        parameter integer DFF_LEVEL  = 1,
        parameter integer DATA_WIDTH = 8
)(
        input wire                     clk,
        input wire [DATA_WIDTH - 1:0]  din,
        input wire [DATA_WIDTH - 1:0] dout,
        input wire                    nrst
    );

    reg [DATA_WIDTH - 1:0] din_buff [DFF_LEVEL-1:0];
    assign dout = din_buff[DFF_LEVEL-1];
    integer i;

    always @(posedge clk or negedge nrst) begin
        if (~nrst) begin
            // reset
            for(i=0;i<DFF_LEVEL;i=i+1)
            begin
                din_buff[i] <= 'b0;
            end
        end
        else begin
            for(i=1;i<DFF_LEVEL;i=i+1)
            begin
                din_buff[i] <= din_buff[i-1];
            end
                din_buff[0] <= din;
        end
    end
    
endmodule

结束verilog 看门狗,基于Vivado的硬件设计,fpga开发,硬件工程,硬件架构,嵌入式硬件,架构文章来源地址https://www.toymoban.com/news/detail-596447.html

到了这里,关于基于verilog设计一个硬件看门狗的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 电子技术课程设计基于FPGA的音乐硬件演奏电路的设计与实现

    【ChatGPT】前些天发现了一个巨牛的人工智能学习电子书,通俗易懂,风趣幽默,无广告,忍不住分享一下给大家。(点击查看学习资料) wx供重浩:创享日记 对话框发送:乐曲电路 免费获取完整无水印论文报告(包含电路图) 1、课程设计题目 设计一个乐曲演奏电路,能够

    2024年02月05日
    浏览(65)
  • 毕业设计 基于单片机的GSM智能快递柜设计(源码+硬件+论文)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年01月23日
    浏览(76)
  • 基于DSP+FPGA的多轴运动控制平台(一)硬件设计

    2 实验平台总体方案与硬件设计 2.1.1 实验平台的功能需求分析 针对便于多轴运动控制技术的研究,培养此方面技术的人才,实验平台应能 对多轴运动实现高速高精度的控制效果,同时保证系统开放性和兼容多种算法及 参数的运行。 实验过程契合实际工作过程,完成控制系统

    2024年02月06日
    浏览(44)
  • 基于FPGA的音乐播放器硬件电路设计

    基于FPGA的音乐播放器硬件电路设计 随着嵌入式系统技术的不断发展,音乐播放器作为一种便携式设备得到了广泛的应用。本文将介绍一种基于FPGA(Field Programmable Gate Array)的音乐播放器硬件电路设计方案,该方案可以实现高质量的音频播放和文件存储功能。 系统概述 基于

    2024年02月02日
    浏览(67)
  • 基于DSP+FPGA的机载雷达伺服控制系统的硬件设计与开发(一)总体设计

    2.1 功能要求及性能指标 2.1.1 功能要求 ( 1 )具备方位和俯仰两轴运动的能力; (2)方位轴可实现预置、周扫和扇扫功能; (3)俯仰轴可实现预置功能。 2.1.2 性能指标 ( 1 )运动范围:方位转动范围为 ,俯仰转动范围为 ; (2)角速度:方位最大角速度为 100º/s ,俯仰最

    2024年02月16日
    浏览(44)
  • 基于单片机的智能温湿加湿器设计(源码+硬件+论文)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月03日
    浏览(57)
  • 基于LS1028 TSN 交换机硬件系统设计与实现(二)

    3.1 LS1028A 芯片研究 目前市面上支持 TSN 系统的芯片较少,其中两家较大的公司之一博通 ( Broadcom ) 2017 年推出了 StrataConnect BCM53570 系列的以太网交换机,该系 列支持的新技术旨在帮助用户应对物联网、汽车网络和视频等新兴应用在网络方 面带来的影响。而 LS1028A 基于恩智浦

    2023年04月19日
    浏览(41)
  • 基于 RK3399+fpga 的 VME 总线控制器设计(二)硬件和FPGA逻辑设计

    3.2 FPGA 最小系统设计 FPGA 最小系统是指可以使 FPGA 正常工作的最基本的系统,主要包括电源电 路、配置电路、时钟和复位电路。本次设计使用的 FPGA 为紫光同创的 PG2L100H, 接下来具体介绍 FPGA 最小系统各个部分的电路设计。 ( 1 )电源电路设计 FPGA 所需要的电源电压有 3.3V

    2024年02月12日
    浏览(49)
  • 基于STM32 ARM+FPGA的电能质量分析仪方案(一)硬件设计

    本章主要给出了本系统的设计目标和硬件设计方案,后面详细介绍了硬件电路的设计 过程,包括数据采集板、 FPGA+ARM 控制板。 3.1系统设计目标 本系统的主要目的是实现电能质量指标的高精度测量和数据分析,其具体技术指标如 下所示: 1.电能质量指标测量精度: (1) 电压:

    2024年02月10日
    浏览(54)
  • 毕业设计 基于stm32的智能婴儿车系统(源码+硬件+论文)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月08日
    浏览(120)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包