blob: cc94709b920a5a2b3efefad9fbafdbcde4ec6097 [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 key-triggered interrupt Module
//
module sysrst_ctrl_keyintr import sysrst_ctrl_reg_pkg::*; (
input clk_aon_i,
input rst_slow_ni,
input clk_i,
input rst_ni,
input pwrb_int,
input key0_int,
input key1_int,
input key2_int,
input ac_present_int,
input cio_ec_rst_l_i,
input sysrst_ctrl_reg2hw_key_intr_ctl_reg_t key_intr_ctl_i,
input sysrst_ctrl_reg2hw_key_intr_debounce_ctl_reg_t key_intr_debounce_ctl_i,
output sysrst_ctrl_hw2reg_key_intr_status_reg_t key_intr_status_o,
output sysrst_ctrl_key_intr
);
logic cfg_pwrb_in_h2l;
logic cfg_key0_in_h2l;
logic cfg_key1_in_h2l;
logic cfg_key2_in_h2l;
logic cfg_ac_present_h2l;
logic cfg_ec_rst_l_h2l;
logic cfg_pwrb_in_l2h;
logic cfg_key0_in_l2h;
logic cfg_key1_in_l2h;
logic cfg_key2_in_l2h;
logic cfg_ac_present_l2h;
logic cfg_ec_rst_l_l2h;
logic [15:0] cfg_key_intr_timer;
logic load_key_intr_timer;
logic [15:0] cfg_key_intr_timer_d;
logic pwrb_int_i;
logic key0_int_i, key1_int_i, key2_int_i;
logic ac_present_int_i;
logic ec_rst_l_int_i;
logic pwrb_intr_h2l_det, pwrb_intr_h2l_det_q, pwrb_intr_h2l_pulse;
logic pwrb_intr_l2h_det, pwrb_intr_l2h_det_q, pwrb_intr_l2h_pulse;
logic key0_intr_h2l_det, key0_intr_h2l_det_q, key0_intr_h2l_pulse;
logic key0_intr_l2h_det, key0_intr_l2h_det_q, key0_intr_l2h_pulse;
logic key1_intr_h2l_det, key1_intr_h2l_det_q, key1_intr_h2l_pulse;
logic key1_intr_l2h_det, key1_intr_l2h_det_q, key1_intr_l2h_pulse;
logic key2_intr_h2l_det, key2_intr_h2l_det_q, key2_intr_h2l_pulse;
logic key2_intr_l2h_det, key2_intr_l2h_det_q, key2_intr_l2h_pulse;
logic ac_present_intr_h2l_det, ac_present_intr_h2l_det_q, ac_present_intr_h2l_pulse;
logic ac_present_intr_l2h_det, ac_present_intr_l2h_det_q, ac_present_intr_l2h_pulse;
logic ec_rst_l_intr_h2l_det, ec_rst_l_intr_h2l_det_q, ec_rst_l_intr_h2l_pulse;
logic ec_rst_l_intr_l2h_det, ec_rst_l_intr_l2h_det_q, ec_rst_l_intr_l2h_pulse;
logic pwrb_h2l_intr, pwrb_l2h_intr;
logic key0_in_h2l_intr, key0_in_l2h_intr;
logic key1_in_h2l_intr, key1_in_l2h_intr;
logic key2_in_h2l_intr, key2_in_l2h_intr;
logic ac_present_h2l_intr, ac_present_l2h_intr;
logic ec_rst_l_h2l_intr, ec_rst_l_l2h_intr;
//synchronize between cfg(24MHz) and always-on(200KHz)
prim_flop_2sync # (
.Width(1)
) i_cfg_pwrb_in_h2l (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(key_intr_ctl_i.pwrb_in_h2l.q),
.q_o(cfg_pwrb_in_h2l)
);
prim_flop_2sync # (
.Width(1)
) i_cfg_key0_in_h2l (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(key_intr_ctl_i.key0_in_h2l.q),
.q_o(cfg_key0_in_h2l)
);
prim_flop_2sync # (
.Width(1)
) i_cfg_key1_in_h2l (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(key_intr_ctl_i.key1_in_h2l.q),
.q_o(cfg_key1_in_h2l)
);
prim_flop_2sync # (
.Width(1)
) i_cfg_key2_in_h2l (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(key_intr_ctl_i.key2_in_h2l.q),
.q_o(cfg_key2_in_h2l)
);
prim_flop_2sync # (
.Width(1)
) i_cfg_ac_present_h2l (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(key_intr_ctl_i.ac_present_h2l.q),
.q_o(cfg_ac_present_h2l)
);
prim_flop_2sync # (
.Width(1)
) i_cfg_ec_rst_l_h2l (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(key_intr_ctl_i.ec_rst_l_h2l.q),
.q_o(cfg_ec_rst_l_h2l)
);
prim_flop_2sync # (
.Width(1)
) i_cfg_pwrb_in_l2h (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(key_intr_ctl_i.pwrb_in_l2h.q),
.q_o(cfg_pwrb_in_l2h)
);
prim_flop_2sync # (
.Width(1)
) i_cfg_key0_in_l2h (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(key_intr_ctl_i.key0_in_l2h.q),
.q_o(cfg_key0_in_l2h)
);
prim_flop_2sync # (
.Width(1)
) i_cfg_key1_in_l2h (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(key_intr_ctl_i.key1_in_l2h.q),
.q_o(cfg_key1_in_l2h)
);
prim_flop_2sync # (
.Width(1)
) i_cfg_key2_in_l2h (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(key_intr_ctl_i.key2_in_l2h.q),
.q_o(cfg_key2_in_l2h)
);
prim_flop_2sync # (
.Width(1)
) i_cfg_ac_present_l2h (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(key_intr_ctl_i.ac_present_l2h.q),
.q_o(cfg_ac_present_l2h)
);
prim_flop_2sync # (
.Width(1)
) i_cfg_ec_rst_l_l2h (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(key_intr_ctl_i.ec_rst_l_l2h.q),
.q_o(cfg_ec_rst_l_l2h)
);
prim_fifo_async #(
.Width(16),
.Depth(2)
) i_cfg_key_intr_timer (
.clk_wr_i (clk_i),
.rst_wr_ni (rst_ni),
.wvalid_i (key_intr_debounce_ctl_i.qe),
.wready_o (),
.wdata_i (key_intr_debounce_ctl_i.q),
.wdepth_o (),
.clk_rd_i (clk_aon_i),
.rst_rd_ni (rst_slow_ni),
.rvalid_o (load_key_intr_timer),
.rready_i (1'b1),
.rdata_o (cfg_key_intr_timer_d),
.rdepth_o ()
);
always_ff @(posedge clk_aon_i or negedge rst_slow_ni) begin: i_cfg_key_intr_timer_reg
if (!rst_slow_ni) begin
cfg_key_intr_timer <= '0;
end else if (load_key_intr_timer) begin
cfg_key_intr_timer <= cfg_key_intr_timer_d;
end
end
//synchronize between GPIO and always-on(200KHz)
prim_flop_2sync # (
.Width(1)
) i_pwrb_int_i (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(pwrb_int),
.q_o(pwrb_int_i)
);
prim_flop_2sync # (
.Width(1)
) i_key0_int_i (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(key0_int),
.q_o(key0_int_i)
);
prim_flop_2sync # (
.Width(1)
) i_key1_int_i (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(key1_int),
.q_o(key1_int_i)
);
prim_flop_2sync # (
.Width(1)
) i_key2_int_i (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(key2_int),
.q_o(key2_int_i)
);
prim_flop_2sync # (
.Width(1)
) i_ac_present_int_i (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(ac_present_int),
.q_o(ac_present_int_i)
);
prim_flop_2sync # (
.Width(1)
) i_ec_rst_l_int_i (
.clk_i(clk_aon_i),
.rst_ni(rst_slow_ni),
.d_i(cio_ec_rst_l_i),
.q_o(ec_rst_l_int_i)
);
//Instantiate the key state machine
sysrst_ctrl_keyfsm # (
.TIMERBIT(16)
) i_pwrbintr_fsm (
.clk_aon_i(clk_aon_i),
.rst_slow_ni(rst_slow_ni),
.trigger_i(pwrb_int_i),
.cfg_timer_i(cfg_key_intr_timer),
.cfg_l2h_en_i(cfg_pwrb_in_l2h),
.cfg_h2l_en_i(cfg_pwrb_in_h2l),
.timer_l2h_cond_met(pwrb_intr_l2h_det),
.timer_h2l_cond_met(pwrb_intr_h2l_det)
);
sysrst_ctrl_keyfsm # (
.TIMERBIT(16)
) i_key0intr_fsm (
.clk_aon_i(clk_aon_i),
.rst_slow_ni(rst_slow_ni),
.trigger_i(key0_int_i),
.cfg_timer_i(cfg_key_intr_timer),
.cfg_l2h_en_i(cfg_key0_in_l2h),
.cfg_h2l_en_i(cfg_key0_in_h2l),
.timer_l2h_cond_met(key0_intr_l2h_det),
.timer_h2l_cond_met(key0_intr_h2l_det)
);
sysrst_ctrl_keyfsm # (
.TIMERBIT(16)
) i_key1intr_fsm (
.clk_aon_i(clk_aon_i),
.rst_slow_ni(rst_slow_ni),
.trigger_i(key1_int_i),
.cfg_timer_i(cfg_key_intr_timer),
.cfg_l2h_en_i(cfg_key1_in_l2h),
.cfg_h2l_en_i(cfg_key1_in_h2l),
.timer_l2h_cond_met(key1_intr_l2h_det),
.timer_h2l_cond_met(key1_intr_h2l_det)
);
sysrst_ctrl_keyfsm # (
.TIMERBIT(16)
) i_key2intr_fsm (
.clk_aon_i(clk_aon_i),
.rst_slow_ni(rst_slow_ni),
.trigger_i(key2_int_i),
.cfg_timer_i(cfg_key_intr_timer),
.cfg_l2h_en_i(cfg_key2_in_l2h),
.cfg_h2l_en_i(cfg_key2_in_h2l),
.timer_l2h_cond_met(key2_intr_l2h_det),
.timer_h2l_cond_met(key2_intr_h2l_det)
);
sysrst_ctrl_keyfsm # (
.TIMERBIT(16)
) i_ac_presentintr_fsm (
.clk_aon_i(clk_aon_i),
.rst_slow_ni(rst_slow_ni),
.trigger_i(ac_present_int_i),
.cfg_timer_i(cfg_key_intr_timer),
.cfg_l2h_en_i(cfg_ac_present_l2h),
.cfg_h2l_en_i(cfg_ac_present_h2l),
.timer_l2h_cond_met(ac_present_intr_l2h_det),
.timer_h2l_cond_met(ac_present_intr_h2l_det)
);
sysrst_ctrl_keyfsm # (
.TIMERBIT(16)
) i_ec_rst_lintr_fsm (
.clk_aon_i(clk_aon_i),
.rst_slow_ni(rst_slow_ni),
.trigger_i(ec_rst_l_int_i),
.cfg_timer_i(cfg_key_intr_timer),
.cfg_l2h_en_i(cfg_ec_rst_l_l2h),
.cfg_h2l_en_i(cfg_ec_rst_l_h2l),
.timer_l2h_cond_met(ec_rst_l_intr_l2h_det),
.timer_h2l_cond_met(ec_rst_l_intr_h2l_det)
);
//delay the level signal to generate a pulse
always_ff @(posedge clk_aon_i or negedge rst_slow_ni) begin: i_pwrb_intr_h2l_det
if (!rst_slow_ni) begin
pwrb_intr_h2l_det_q <= 1'b0;
end else begin
pwrb_intr_h2l_det_q <= pwrb_intr_h2l_det;
end
end
always_ff @(posedge clk_aon_i or negedge rst_slow_ni) begin: i_pwrb_intr_l2h_det
if (!rst_slow_ni) begin
pwrb_intr_l2h_det_q <= 1'b0;
end else begin
pwrb_intr_l2h_det_q <= pwrb_intr_l2h_det;
end
end
always_ff @(posedge clk_aon_i or negedge rst_slow_ni) begin: i_key0_intr_h2l_det
if (!rst_slow_ni) begin
key0_intr_h2l_det_q <= 1'b0;
end else begin
key0_intr_h2l_det_q <= key0_intr_h2l_det;
end
end
always_ff @(posedge clk_aon_i or negedge rst_slow_ni) begin: i_key0_intr_l2h_det
if (!rst_slow_ni) begin
key0_intr_l2h_det_q <= 1'b0;
end else begin
key0_intr_l2h_det_q <= key0_intr_l2h_det;
end
end
always_ff @(posedge clk_aon_i or negedge rst_slow_ni) begin: i_key1_intr_h2l_det
if (!rst_slow_ni) begin
key1_intr_h2l_det_q <= 1'b0;
end else begin
key1_intr_h2l_det_q <= key1_intr_h2l_det;
end
end
always_ff @(posedge clk_aon_i or negedge rst_slow_ni) begin: i_key1_intr_l2h_det
if (!rst_slow_ni) begin
key1_intr_l2h_det_q <= 1'b0;
end else begin
key1_intr_l2h_det_q <= key1_intr_l2h_det;
end
end
always_ff @(posedge clk_aon_i or negedge rst_slow_ni) begin: i_key2_intr_h2l_det
if (!rst_slow_ni) begin
key2_intr_h2l_det_q <= 1'b0;
end else begin
key2_intr_h2l_det_q <= key2_intr_h2l_det;
end
end
always_ff @(posedge clk_aon_i or negedge rst_slow_ni) begin: i_key2_intr_l2h_det
if (!rst_slow_ni) begin
key2_intr_l2h_det_q <= 1'b0;
end else begin
key2_intr_l2h_det_q <= key2_intr_l2h_det;
end
end
always_ff @(posedge clk_aon_i or negedge rst_slow_ni) begin: i_ac_present_intr_h2l_det
if (!rst_slow_ni) begin
ac_present_intr_h2l_det_q <= 1'b0;
end else begin
ac_present_intr_h2l_det_q <= ac_present_intr_h2l_det;
end
end
always_ff @(posedge clk_aon_i or negedge rst_slow_ni) begin: i_ac_present_intr_l2h_det
if (!rst_slow_ni) begin
ac_present_intr_l2h_det_q <= 1'b0;
end else begin
ac_present_intr_l2h_det_q <= ac_present_intr_l2h_det;
end
end
always_ff @(posedge clk_aon_i or negedge rst_slow_ni) begin: i_ec_rst_l_intr_h2l_det
if (!rst_slow_ni) begin
ec_rst_l_intr_h2l_det_q <= 1'b0;
end else begin
ec_rst_l_intr_h2l_det_q <= ec_rst_l_intr_h2l_det;
end
end
always_ff @(posedge clk_aon_i or negedge rst_slow_ni) begin: i_ec_rst_l_intr_l2h_det
if (!rst_slow_ni) begin
ec_rst_l_intr_l2h_det_q <= 1'b0;
end else begin
ec_rst_l_intr_l2h_det_q <= ec_rst_l_intr_l2h_det;
end
end
//generate a pulse for interrupt status CSR
assign pwrb_intr_l2h_pulse = (pwrb_intr_l2h_det_q == 1'b0) && (pwrb_intr_l2h_det == 1'b1);
assign pwrb_intr_h2l_pulse = (pwrb_intr_h2l_det_q == 1'b1) && (pwrb_intr_h2l_det == 1'b0);
assign key0_intr_l2h_pulse = (key0_intr_l2h_det_q == 1'b0) && (key0_intr_l2h_det == 1'b1);
assign key0_intr_h2l_pulse = (key0_intr_h2l_det_q == 1'b1) && (key0_intr_h2l_det == 1'b0);
assign key1_intr_l2h_pulse = (key1_intr_l2h_det_q == 1'b0) && (key1_intr_l2h_det == 1'b1);
assign key1_intr_h2l_pulse = (key1_intr_h2l_det_q == 1'b1) && (key1_intr_h2l_det == 1'b0);
assign key2_intr_l2h_pulse = (key2_intr_l2h_det_q == 1'b0) && (key2_intr_l2h_det == 1'b1);
assign key2_intr_h2l_pulse = (key2_intr_h2l_det_q == 1'b1) && (key2_intr_h2l_det == 1'b0);
assign ac_present_intr_l2h_pulse = (ac_present_intr_l2h_det_q == 1'b0) &&
(ac_present_intr_l2h_det == 1'b1);
assign ac_present_intr_h2l_pulse = (ac_present_intr_h2l_det_q == 1'b1) &&
(ac_present_intr_h2l_det == 1'b0);
assign ec_rst_l_intr_l2h_pulse = (ec_rst_l_intr_l2h_det_q == 1'b0) &&
(ec_rst_l_intr_l2h_det == 1'b1);
assign ec_rst_l_intr_h2l_pulse = (ec_rst_l_intr_h2l_det_q == 1'b1) &&
(ec_rst_l_intr_h2l_det == 1'b0);
//Synchronize from 200KHz always-onclock to 24MHz cfg clock
prim_pulse_sync i_pwrb_h2l (
.clk_src_i (clk_aon_i),
.clk_dst_i (clk_i),
.rst_src_ni (rst_slow_ni),
.rst_dst_ni (rst_ni),
.src_pulse_i (pwrb_intr_h2l_pulse),
.dst_pulse_o (pwrb_h2l_intr)
);
assign key_intr_status_o.pwrb_h2l.de = pwrb_h2l_intr;
prim_pulse_sync i_pwrb_l2h (
.clk_src_i (clk_aon_i),
.clk_dst_i (clk_i),
.rst_src_ni (rst_slow_ni),
.rst_dst_ni (rst_ni),
.src_pulse_i (pwrb_intr_l2h_pulse),
.dst_pulse_o (pwrb_l2h_intr)
);
assign key_intr_status_o.pwrb_l2h.de = pwrb_l2h_intr;
prim_pulse_sync i_key0_in_h2l (
.clk_src_i (clk_aon_i),
.clk_dst_i (clk_i),
.rst_src_ni (rst_slow_ni),
.rst_dst_ni (rst_ni),
.src_pulse_i (key0_intr_h2l_pulse),
.dst_pulse_o (key0_in_h2l_intr)
);
assign key_intr_status_o.key0_in_h2l.de = key0_in_h2l_intr;
prim_pulse_sync i_key0_in_l2h (
.clk_src_i (clk_aon_i),
.clk_dst_i (clk_i),
.rst_src_ni (rst_slow_ni),
.rst_dst_ni (rst_ni),
.src_pulse_i (key0_intr_l2h_pulse),
.dst_pulse_o (key0_in_l2h_intr)
);
assign key_intr_status_o.key0_in_l2h.de = key0_in_l2h_intr;
prim_pulse_sync i_key1_in_h2l (
.clk_src_i (clk_aon_i),
.clk_dst_i (clk_i),
.rst_src_ni (rst_slow_ni),
.rst_dst_ni (rst_ni),
.src_pulse_i (key1_intr_h2l_pulse),
.dst_pulse_o (key1_in_h2l_intr)
);
assign key_intr_status_o.key1_in_h2l.de = key1_in_h2l_intr;
prim_pulse_sync i_key1_in_l2h (
.clk_src_i (clk_aon_i),
.clk_dst_i (clk_i),
.rst_src_ni (rst_slow_ni),
.rst_dst_ni (rst_ni),
.src_pulse_i (key1_intr_l2h_pulse),
.dst_pulse_o (key1_in_l2h_intr)
);
assign key_intr_status_o.key1_in_l2h.de = key1_in_l2h_intr;
prim_pulse_sync i_key2_in_h2l (
.clk_src_i (clk_aon_i),
.clk_dst_i (clk_i),
.rst_src_ni (rst_slow_ni),
.rst_dst_ni (rst_ni),
.src_pulse_i (key2_intr_h2l_pulse),
.dst_pulse_o (key2_in_h2l_intr)
);
assign key_intr_status_o.key2_in_h2l.de = key2_in_h2l_intr;
prim_pulse_sync i_key2_in_l2h (
.clk_src_i (clk_aon_i),
.clk_dst_i (clk_i),
.rst_src_ni (rst_slow_ni),
.rst_dst_ni (rst_ni),
.src_pulse_i (key2_intr_l2h_pulse),
.dst_pulse_o (key2_in_l2h_intr)
);
assign key_intr_status_o.key2_in_l2h.de = key2_in_l2h_intr;
prim_pulse_sync i_ac_present_h2l (
.clk_src_i (clk_aon_i),
.clk_dst_i (clk_i),
.rst_src_ni (rst_slow_ni),
.rst_dst_ni (rst_ni),
.src_pulse_i (ac_present_intr_h2l_pulse),
.dst_pulse_o (ac_present_h2l_intr)
);
assign key_intr_status_o.ac_present_h2l.de = ac_present_h2l_intr;
prim_pulse_sync i_ac_present_l2h (
.clk_src_i (clk_aon_i),
.clk_dst_i (clk_i),
.rst_src_ni (rst_slow_ni),
.rst_dst_ni (rst_ni),
.src_pulse_i (ac_present_intr_l2h_pulse),
.dst_pulse_o (ac_present_l2h_intr)
);
assign key_intr_status_o.ac_present_l2h.de = ac_present_l2h_intr;
prim_pulse_sync i_ec_rst_l_h2l (
.clk_src_i (clk_aon_i),
.clk_dst_i (clk_i),
.rst_src_ni (rst_slow_ni),
.rst_dst_ni (rst_ni),
.src_pulse_i (ec_rst_l_intr_h2l_pulse),
.dst_pulse_o (ec_rst_l_h2l_intr)
);
assign key_intr_status_o.ec_rst_l_h2l.de = ec_rst_l_h2l_intr;
prim_pulse_sync i_ec_rst_l_l2h (
.clk_src_i (clk_aon_i),
.clk_dst_i (clk_i),
.rst_src_ni (rst_slow_ni),
.rst_dst_ni (rst_ni),
.src_pulse_i (ec_rst_l_intr_l2h_pulse),
.dst_pulse_o (ec_rst_l_l2h_intr)
);
assign key_intr_status_o.ec_rst_l_l2h.de = ec_rst_l_l2h_intr;
assign sysrst_ctrl_key_intr = pwrb_h2l_intr | pwrb_l2h_intr |
key0_in_h2l_intr | key0_in_l2h_intr |
key1_in_h2l_intr | key1_in_l2h_intr |
key2_in_h2l_intr | key2_in_l2h_intr |
ac_present_h2l_intr | ac_present_l2h_intr |
ec_rst_l_h2l_intr | ec_rst_l_l2h_intr;
//To write into interrupt status register
assign key_intr_status_o.pwrb_h2l.d = 1'b1;
assign key_intr_status_o.pwrb_l2h.d = 1'b1;
assign key_intr_status_o.key0_in_h2l.d = 1'b1;
assign key_intr_status_o.key0_in_l2h.d = 1'b1;
assign key_intr_status_o.key1_in_h2l.d = 1'b1;
assign key_intr_status_o.key1_in_l2h.d = 1'b1;
assign key_intr_status_o.key2_in_h2l.d = 1'b1;
assign key_intr_status_o.key2_in_l2h.d = 1'b1;
assign key_intr_status_o.ac_present_h2l.d = 1'b1;
assign key_intr_status_o.ac_present_l2h.d = 1'b1;
assign key_intr_status_o.ec_rst_l_h2l.d = 1'b1;
assign key_intr_status_o.ec_rst_l_l2h.d = 1'b1;
endmodule