blob: 1ab434736ae0b2df6df019608b9c4713225d83d2 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
//
// Description sysrst_ctrl PWRB autoblock module
module sysrst_ctrl_autoblock
import sysrst_ctrl_pkg::*;
import sysrst_ctrl_reg_pkg::*;
(
input clk_i,
input rst_ni,
// (Optionally) inverted input signals on AON clock
input aon_pwrb_int_i,
// (Optionally) inverted input signals (not synced to AON clock)
input pwrb_int_i,
input key0_int_i,
input key1_int_i,
input key2_int_i,
// CSRs synced to AON clock
input sysrst_ctrl_reg2hw_auto_block_debounce_ctl_reg_t aon_auto_block_debounce_ctl_i,
input sysrst_ctrl_reg2hw_auto_block_out_ctl_reg_t aon_auto_block_out_ctl_i,
// Output signals to pin override logic (not synced to AON clock)
output pwrb_out_hw_o,
output key0_out_hw_o,
output key1_out_hw_o,
output key2_out_hw_o
);
logic aon_ab_cond_met;
sysrst_ctrl_detect #(
.DebounceTimerWidth(TimerWidth),
.DetectTimerWidth(1),
// This detects a positive edge
.EventType(EdgeToLow),
.Sticky(0)
) u_sysrst_ctrl_detect (
.clk_i,
.rst_ni,
.trigger_i (aon_pwrb_int_i),
.cfg_debounce_timer_i (aon_auto_block_debounce_ctl_i.debounce_timer.q),
// We're only using the debounce timer.
// The detection timer is set to 0 which corresponds to a 1 cycle detection window.
.cfg_detect_timer_i ('0),
.cfg_enable_i (aon_auto_block_debounce_ctl_i.auto_block_enable.q),
.event_detected_o (aon_ab_cond_met),
.event_detected_pulse_o()
);
assign pwrb_out_hw_o = pwrb_int_i;
assign key0_out_hw_o = (aon_ab_cond_met & aon_auto_block_out_ctl_i.key0_out_sel.q) ?
aon_auto_block_out_ctl_i.key0_out_value.q : key0_int_i;
assign key1_out_hw_o = (aon_ab_cond_met & aon_auto_block_out_ctl_i.key1_out_sel.q) ?
aon_auto_block_out_ctl_i.key1_out_value.q : key1_int_i;
assign key2_out_hw_o = (aon_ab_cond_met & aon_auto_block_out_ctl_i.key2_out_sel.q) ?
aon_auto_block_out_ctl_i.key2_out_value.q : key2_int_i;
endmodule