verilog 看门狗 实现

 

// SPI 发送 0xC0 看门狗禁用
// SPI 发送 0xC1 看门狗使能
// SPI 发送 0xC2 看门狗清除
always @(posedge clk_40mhz or negedge rst_n) begin
    if (!rst_n) begin
        watch_dog_en <= 1'b1;  // 禁用看门狗
        watch_dog_clr <= 1'b0; // 清除看门狗计数器标志
        tick_cnt <= 32'd0;     // 清除计数器
        led_reg <= 1'b0;       // LED打开
    end else begin
        if (rx_dv) begin
            case (rx_byte)
                8'hC0:watch_dog_en <= 1'b0; // 禁用看门狗
                8'hC1:watch_dog_en <= 1'b1; // 启用看门狗
                8'hC2:watch_dog_clr <= 1'b1; // 清除看门狗计数器
            endcase
        end else begin

            if ((watch_dog_en)&&(~watch_dog_clr)) begin

                tick_cnt <= tick_cnt + 1; // 每个时钟周期计数一次

                if (tick_cnt >= 32'd40000000) begin // 10秒钟的计数值
                    watch_dog_clr <= 1'b1; // 清除看门狗计数器标志 使能
                    led_reg <= ~led_reg; // 超时,反转LED
                end

            end else begin
                tick_cnt <= 32'd0; // 清除计数器
                watch_dog_clr <= 1'b0; // 清除看门狗计数器标志
            end

        end
    end
end

 

posted on 2025-08-04 20:22  所长  阅读(25)  评论(0)    收藏  举报

导航