[sysrst_ctrl] Enable autogenerated CDC regs for config CSRs

Signed-off-by: Michael Schaffner <msf@opentitan.org>
diff --git a/hw/ip/sysrst_ctrl/data/sysrst_ctrl.hjson b/hw/ip/sysrst_ctrl/data/sysrst_ctrl.hjson
index 782d8e0..dc668b0 100644
--- a/hw/ip/sysrst_ctrl/data/sysrst_ctrl.hjson
+++ b/hw/ip/sysrst_ctrl/data/sysrst_ctrl.hjson
@@ -38,6 +38,12 @@
       desc:    "Number of keyboard combos",
       local:   "true",
     }
+    { name:    "TimerWidth",
+      type:    "int",
+      default: "16",
+      desc:    "Number of timer bits",
+      local:   "true",
+    }
   ],
   available_input_list: [
     { name: "ac_present", desc: "A/C power is present" }
@@ -93,9 +99,9 @@
       desc: "EC reset control register",
       swaccess: "rw",
       hwaccess: "hro",
-      hwqe: "true",
       regwen: "REGWEN",
       resval: "2000",
+      async: "clk_aon_i",
       fields: [
         { bits: "15:0",
           name: "ec_rst_pulse",
@@ -107,9 +113,9 @@
       desc: "Ultra low power AC debounce control register",
       swaccess: "rw",
       hwaccess: "hro",
-      hwqe: "true",
       regwen: "REGWEN",
       resval: "8000",
+      async: "clk_aon_i",
       fields: [
         { bits: "15:0",
           name: "ulp_ac_debounce_timer",
@@ -121,9 +127,9 @@
       desc: "Ultra low power lid debounce control register",
       swaccess: "rw",
       hwaccess: "hro",
-      hwqe: "true",
       regwen: "REGWEN",
       resval: "8000",
+      async: "clk_aon_i",
       fields: [
         { bits: "15:0",
           name: "ulp_lid_debounce_timer",
@@ -135,9 +141,9 @@
       desc: "Ultra low power pwrb debounce control register",
       swaccess: "rw",
       hwaccess: "hro",
-      hwqe: "true",
       regwen: "REGWEN",
       resval: "8000",
+      async: "clk_aon_i",
       fields: [
         { bits: "15:0",
           name: "ulp_pwrb_debounce_timer",
@@ -150,6 +156,7 @@
       swaccess: "rw",
       hwaccess: "hro",
       resval: "0",
+      async: "clk_aon_i",
       fields: [
         { bits: "0",
           name: "ulp_enable",
@@ -162,6 +169,7 @@
       swaccess: "rw1c",
       hwaccess: "hwo",
       resval: "0",
+      async: "clk_aon_i",
       tags: [ // the value of these regs is determined by the
               // value on the pins, hence it cannot be predicted.
               "excl:CsrNonInitTests:CsrExclCheck"],
@@ -193,6 +201,7 @@
       hwaccess: "hro",
       regwen: "REGWEN",
       resval: "0",
+      async: "clk_aon_i",
       fields: [
         { bits: "0",
           name: "key0_in",
@@ -250,6 +259,7 @@
       hwaccess: "hro",
       regwen: "REGWEN",
       resval: "2",
+      async: "clk_aon_i",
       fields: [
         { bits: "0",
           name: "bat_disable_0",
@@ -314,6 +324,7 @@
       swaccess: "rw",
       hwaccess: "hro",
       resval: "2",
+      async: "clk_aon_i",
       fields: [
         { bits: "0",
           name: "bat_disable",
@@ -350,6 +361,7 @@
       swaccess: "rw",
       hwaccess: "hro",
       resval: "0",
+      async: "clk_aon_i",
       fields: [
         { bits: "0",
           name: "bat_disable",
@@ -426,6 +438,7 @@
       hwaccess: "hro",
       regwen: "REGWEN",
       resval: "0",
+      async: "clk_aon_i",
       fields: [
         { bits: "0",
           name: "pwrb_in_H2L",
@@ -481,11 +494,11 @@
       desc: "Debounce timer control register for key-triggered interrupt",
       swaccess: "rw",
       hwaccess: "hro",
-      hwqe:  "true",
       regwen: "REGWEN",
       resval: "0",
+      async: "clk_aon_i",
       fields: [
-        { bits: "15:0",
+        { bits: "TimerWidth-1:0",
           name: "debounce_timer",
           desc: "Define the timer valure so that the key or input is not oscillating for 0-200ms, each step is 5us(200KHz clock)",
         }
@@ -495,9 +508,9 @@
       desc: "Debounce timer control register for pwrb_in H2L transition",
       swaccess: "rw",
       hwaccess: "hro",
-      hwqe:  "true",
       regwen: "REGWEN",
       resval: "0",
+      async: "clk_aon_i",
       fields: [
         { bits: "15:0",
           name: "debounce_timer",
@@ -515,6 +528,7 @@
       hwaccess: "hro",
       regwen: "REGWEN",
       resval: "0",
+      async: "clk_aon_i",
       fields: [
         { bits: "0",
           name: "key0_out_sel",
@@ -559,6 +573,7 @@
         hwaccess: "hro",
         regwen:   "REGWEN",
         resval:   "0",
+        async: "clk_aon_i",
         fields: [
           { bits: "0",
             name: "key0_in_sel",
@@ -590,11 +605,11 @@
                     ''',
         count: "NumCombo",
         cname: "sysrst_ctrl",
-        hwqe:  "true",
         swaccess: "rw",
         hwaccess: "hro",
         regwen:   "REGWEN",
         resval:   "0",
+        async: "clk_aon_i",
         fields: [
           { bits: "31:0",
             name: "detection_timer",
@@ -618,6 +633,7 @@
         hwaccess: "hro",
         regwen:   "REGWEN",
         resval:   "0",
+        async: "clk_aon_i",
         fields: [
           { bits: "0",
             name: "bat_disable",
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl.sv
index bcaa934..0a8d0b1 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl.sv
@@ -61,7 +61,7 @@
   logic z3_wakeup_hw;
   logic pwrb_out_int, key0_out_int, key1_out_int, key2_out_int, bat_disable_int, z3_wakeup_int;
   logic sysrst_ctrl_combo_intr, sysrst_ctrl_key_intr;
-  logic ulp_wakeup_int;
+  logic ulp_wakeup_pulse_int;
 
   //Always-on pins
   assign cio_ec_rst_out_l_en_o = 1'b1;
@@ -99,6 +99,8 @@
   sysrst_ctrl_reg_top u_reg (
     .clk_i,
     .rst_ni,
+    .clk_aon_i,
+    .rst_aon_ni,
     .tl_i,
     .tl_o,
     .reg2hw,
@@ -109,8 +111,6 @@
 
   //Instantiate the autoblock module
   sysrst_ctrl_autoblock u_autoblock (
-    .clk_i,
-    .rst_ni,
     .clk_aon_i,
     .rst_aon_ni,
     .pwrb_int_i(pwrb_int),
@@ -127,8 +127,6 @@
 
   //Instantiate the ULP module
   sysrst_ctrl_ulp u_ulp (
-    .clk_i,
-    .rst_ni,
     .clk_aon_i,
     .rst_aon_ni,
     .pwrb_int_i(pwrb_int),
@@ -139,14 +137,12 @@
     .ulp_pwrb_debounce_ctl_i(reg2hw.ulp_pwrb_debounce_ctl),
     .ulp_ctl_i(reg2hw.ulp_ctl),
     .ulp_status_o(hw2reg.ulp_status),
-    .ulp_wakeup_o(ulp_wakeup_int),
+    .ulp_wakeup_pulse_o(ulp_wakeup_pulse_int),
     .z3_wakeup_hw_o(z3_wakeup_hw)
   );
 
   //Instantiate the pin inversion module
   sysrst_ctrl_inv u_inversion (
-    .clk_aon_i,
-    .rst_aon_ni,
     .cio_pwrb_in_i,
     .cio_key0_in_i,
     .cio_key1_in_i,
@@ -178,8 +174,6 @@
   sysrst_ctrl_pin u_pin_vis_ovd (
     .clk_i,
     .rst_ni,
-    .clk_aon_i,
-    .rst_aon_ni,
     .cio_pwrb_in_i,
     .cio_key0_in_i,
     .cio_key1_in_i,
@@ -249,10 +243,11 @@
     .ec_rst_l_hw_o(ec_rst_l_hw)
   );
 
+  // TODO: does ulp_wakeup_pulse_int have to be on the AON domain or not?
   // GSC wakeup signal to pwrmgr
   // see #6323
   assign gsc_wk_o = reg2hw.wk_status.q;
-  assign hw2reg.wk_status.de = ulp_wakeup_int ||
+  assign hw2reg.wk_status.de = ulp_wakeup_pulse_int ||
            sysrst_ctrl_combo_intr || sysrst_ctrl_key_intr;
   assign hw2reg.wk_status.d = 1'b1;
 
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_autoblock.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_autoblock.sv
index 6d6a566..e1afb27 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_autoblock.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_autoblock.sv
@@ -7,8 +7,6 @@
 module sysrst_ctrl_autoblock import sysrst_ctrl_reg_pkg::*; (
   input  clk_aon_i,
   input  rst_aon_ni,
-  input  clk_i,
-  input  rst_ni,
 
   input  pwrb_int_i,
   input  key0_int_i,
@@ -24,116 +22,9 @@
   output key2_out_hw_o
 );
 
-  logic         cfg_auto_block_en;
-  logic         load_auto_block_timer;
-  logic [15:0]  cfg_auto_block_timer;
-  logic [15:0]  cfg_auto_block_timer_d;
-  logic         cfg_key0_o_sel;
-  logic         cfg_key1_o_sel;
-  logic         cfg_key2_o_sel;
-  logic         cfg_key0_o_q;
-  logic         cfg_key1_o_q;
-  logic         cfg_key2_o_q;
-
   logic ab_cond_met;
   logic pwrb_int;
 
-  //unused_ means no connect
-  logic unused_auto_block_enable;
-
-  //synchronize between cfg(24MHz) and always-on(200KHz)
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_auto_block_en (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(auto_block_debounce_ctl_i.auto_block_enable.q),
-    .q_o(cfg_auto_block_en)
-  );
-
-  assign unused_auto_block_enable = auto_block_debounce_ctl_i.auto_block_enable.qe;
-
-  prim_fifo_async #(
-    .Width(16),
-    .Depth(2)
-  ) u_cfg_auto_block_timer (
-    .clk_wr_i  (clk_i),
-    .rst_wr_ni (rst_ni),
-    .wvalid_i  (auto_block_debounce_ctl_i.debounce_timer.qe),
-    .wready_o  (),
-    .wdata_i   (auto_block_debounce_ctl_i.debounce_timer.q),
-    .wdepth_o  (),
-
-    .clk_rd_i  (clk_aon_i),
-    .rst_rd_ni (rst_aon_ni),
-    .rvalid_o  (load_auto_block_timer),
-    .rready_i  (1'b1),
-    .rdata_o   (cfg_auto_block_timer_d),
-    .rdepth_o  ()
-  );
-
-  always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: u_cfg_auto_block_timer_reg
-    if (!rst_aon_ni) begin
-      cfg_auto_block_timer    <= '0;
-    end else if (load_auto_block_timer) begin
-      cfg_auto_block_timer    <= cfg_auto_block_timer_d;
-    end
-  end
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key0_o_sel (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(auto_block_out_ctl_i.key0_out_sel.q),
-    .q_o(cfg_key0_o_sel)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key1_o_sel (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(auto_block_out_ctl_i.key1_out_sel.q),
-    .q_o(cfg_key1_o_sel)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key2_o_sel (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(auto_block_out_ctl_i.key2_out_sel.q),
-    .q_o(cfg_key2_o_sel)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key0_o_q (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(auto_block_out_ctl_i.key0_out_value.q),
-    .q_o(cfg_key0_o_q)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key1_o_q (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(auto_block_out_ctl_i.key1_out_value.q),
-    .q_o(cfg_key1_o_q)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key2_o_q (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(auto_block_out_ctl_i.key2_out_value.q),
-    .q_o(cfg_key2_o_q)
-  );
-
   //synchronize between GPIO and always-on(200KHz)
   prim_flop_2sync # (
     .Width(1)
@@ -150,16 +41,19 @@
     .clk_aon_i,
     .rst_aon_ni,
     .trigger_i(pwrb_int),
-    .cfg_timer_i(cfg_auto_block_timer),
+    .cfg_timer_i(auto_block_debounce_ctl_i.debounce_timer.q),
     .cfg_l2h_en_i(1'b0),
-    .cfg_h2l_en_i(cfg_auto_block_en),
+    .cfg_h2l_en_i(auto_block_debounce_ctl_i.auto_block_enable.q),
     .timer_l2h_cond_met(),
     .timer_h2l_cond_met(ab_cond_met)
   );
 
   assign pwrb_out_hw_o = pwrb_int;
-  assign key0_out_hw_o = (ab_cond_met & cfg_key0_o_sel) ? cfg_key0_o_q : key0_int_i;
-  assign key1_out_hw_o = (ab_cond_met & cfg_key1_o_sel) ? cfg_key1_o_q : key1_int_i;
-  assign key2_out_hw_o = (ab_cond_met & cfg_key2_o_sel) ? cfg_key2_o_q : key2_int_i;
+  assign key0_out_hw_o = (ab_cond_met & auto_block_out_ctl_i.key0_out_sel.q) ?
+                         auto_block_out_ctl_i.key0_out_value.q : key0_int_i;
+  assign key1_out_hw_o = (ab_cond_met & auto_block_out_ctl_i.key1_out_sel.q) ?
+                         auto_block_out_ctl_i.key1_out_value.q : key1_int_i;
+  assign key2_out_hw_o = (ab_cond_met & auto_block_out_ctl_i.key2_out_sel.q) ?
+                         auto_block_out_ctl_i.key2_out_value.q : key2_int_i;
 
 endmodule
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_combo.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_combo.sv
index b75a897..1c6000c 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_combo.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_combo.sv
@@ -31,28 +31,8 @@
   output ec_rst_l_hw_o
 );
 
-  //There are four possible combos
-  //Each key combo can select different triggers
-  logic [NumCombo-1:0] cfg_key0_in_sel_com;
-  logic [NumCombo-1:0] cfg_key1_in_sel_com;
-  logic [NumCombo-1:0] cfg_key2_in_sel_com;
-  logic [NumCombo-1:0] cfg_pwrb_in_sel_com;
-  logic [NumCombo-1:0] cfg_ac_present_sel_com;
-
-  logic [31:0] cfg_combo_timer [NumCombo];
-  logic [15:0] cfg_debounce_timer;
-
-  logic [NumCombo-1:0] load_combo_timer;
-  logic load_debounce_timer;
-
-  logic [31:0] cfg_combo_timer_d [NumCombo];
-  logic [15:0] cfg_debounce_timer_d;
-
-  logic [NumCombo-1:0] cfg_bat_disable_com;
-  logic [NumCombo-1:0] cfg_intr_com;
-  logic [NumCombo-1:0] cfg_ec_rst_com;
-  logic [NumCombo-1:0] cfg_gsc_rst_com;
-
+  // There are four possible combos
+  // Each key combo can select different triggers
   logic pwrb_int;
   logic key0_int, key1_int, key2_int;
   logic ac_present_int;
@@ -64,12 +44,12 @@
 
   logic [NumCombo-1:0] combo_bat_disable;
   logic [NumCombo-1:0] combo_intr_pulse;
+  logic [NumCombo-1:0] combo_intr_pulse_synced;
   logic [NumCombo-1:0] combo_ec_rst_l;
   logic [NumCombo-1:0] combo_gsc_rst;
 
   logic ec_rst_l_int;
 
-  logic combo0_h2l_intr, combo1_h2l_intr, combo2_h2l_intr, combo3_h2l_intr;
 
   //synchronize between GPIO and always-on(200KHz)
   prim_flop_2sync # (
@@ -81,148 +61,6 @@
     .q_o(ec_rst_l_int)
   );
 
-  //synchronize between cfg(24MHz) and always-on(200KHz)
-  for (genvar k = 0 ; k < NumCombo ; k++) begin : gen_com_sel
-    prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_com_sel_key0 (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(com_sel_ctl_i[k].key0_in_sel.q),
-    .q_o(cfg_key0_in_sel_com[k])
-  );
-
-    prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_com_sel_key1 (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(com_sel_ctl_i[k].key1_in_sel.q),
-    .q_o(cfg_key1_in_sel_com[k])
-  );
-
-    prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_com_sel_key2 (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(com_sel_ctl_i[k].key2_in_sel.q),
-    .q_o(cfg_key2_in_sel_com[k])
-  );
-
-    prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_com_sel_pwrb (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(com_sel_ctl_i[k].pwrb_in_sel.q),
-    .q_o(cfg_pwrb_in_sel_com[k])
-  );
-
-    prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_com_sel_ac_present (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(com_sel_ctl_i[k].ac_present_sel.q),
-    .q_o(cfg_ac_present_sel_com[k])
-  );
-  end
-
-  for (genvar k = 0 ; k < NumCombo ; k++) begin : gen_com_det
-    prim_fifo_async #(
-    .Width(32),
-    .Depth(2)
-  ) u_cfg_combo_timer (
-    .clk_wr_i  (clk_i),
-    .rst_wr_ni (rst_ni),
-    .wvalid_i  (com_det_ctl_i[k].qe),
-    .wready_o  (),
-    .wdata_i   (com_det_ctl_i[k].q),
-    .wdepth_o  (),
-
-    .clk_rd_i  (clk_aon_i),
-    .rst_rd_ni (rst_aon_ni),
-    .rvalid_o  (load_combo_timer[k]),
-    .rready_i  (1'b1),
-    .rdata_o   (cfg_combo_timer_d[k]),
-    .rdepth_o  ()
-  );
-
-    always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: i_cfg_combo_timer_reg
-      if (!rst_aon_ni) begin
-        cfg_combo_timer[k]    <= '0;
-      end else if (load_combo_timer[k]) begin
-        cfg_combo_timer[k]    <= cfg_combo_timer_d[k];
-      end
-    end
-  end
-
-  prim_fifo_async #(
-    .Width(16),
-    .Depth(2)
-  ) u_cfg_debounce_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_aon_ni),
-    .rvalid_o  (load_debounce_timer),
-    .rready_i  (1'b1),
-    .rdata_o   (cfg_debounce_timer_d),
-    .rdepth_o  ()
-  );
-
-  always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: i_cfg_debounce_timer_reg
-    if (!rst_aon_ni) begin
-      cfg_debounce_timer    <= '0;
-    end else if (load_debounce_timer) begin
-      cfg_debounce_timer    <= cfg_debounce_timer_d;
-    end
-  end
-
-  for (genvar k = 0 ; k < NumCombo ; k++) begin : gen_com_out
-    prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_com_bat_disable (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(com_out_ctl_i[k].bat_disable.q),
-    .q_o(cfg_bat_disable_com[k])
-  );
-
-    prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_com_intr (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(com_out_ctl_i[k].interrupt.q),
-    .q_o(cfg_intr_com[k])
-  );
-
-    prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_com_ec_rst (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(com_out_ctl_i[k].ec_rst.q),
-    .q_o(cfg_ec_rst_com[k])
-  );
-
-    prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_com_gsc_rst (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(com_out_ctl_i[k].gsc_rst.q),
-    .q_o(cfg_gsc_rst_com[k])
-  );
-  end
-
   //synchronize between GPIO and always-on(200KHz)
   prim_flop_2sync # (
     .Width(1)
@@ -269,14 +107,14 @@
     .q_o(ac_present_int)
   );
 
-  //generate the trigger for each combo
   for (genvar k = 0 ; k < NumCombo ; k++) begin : gen_combo_trigger
+    // generate the trigger for each combo
     sysrst_ctrl_combotrg u_combo_trg (
-      .cfg_in0_sel(cfg_pwrb_in_sel_com[k]),
-      .cfg_in1_sel(cfg_key0_in_sel_com[k]),
-      .cfg_in2_sel(cfg_key1_in_sel_com[k]),
-      .cfg_in3_sel(cfg_key2_in_sel_com[k]),
-      .cfg_in4_sel(cfg_ac_present_sel_com[k]),
+      .cfg_in0_sel(com_sel_ctl_i[k].pwrb_in_sel.q),
+      .cfg_in1_sel(com_sel_ctl_i[k].key0_in_sel.q),
+      .cfg_in2_sel(com_sel_ctl_i[k].key1_in_sel.q),
+      .cfg_in3_sel(com_sel_ctl_i[k].key2_in_sel.q),
+      .cfg_in4_sel(com_sel_ctl_i[k].ac_present_sel.q),
       .in0(pwrb_int),
       .in1(key0_int),
       .in2(key1_int),
@@ -285,39 +123,36 @@
       .trigger_h_o(trigger_h[k]),
       .trigger_l_o(trigger_l[k])
     );
-    assign cfg_combo_en[k] = cfg_pwrb_in_sel_com[k] | cfg_key0_in_sel_com[k] |
-      cfg_key1_in_sel_com[k] | cfg_key2_in_sel_com[k] |
-      cfg_ac_present_sel_com[k];
-  end
 
-  //Instantiate the combo detection state machine
-  for (genvar k = 0 ; k < NumCombo ; k++) begin : gen_combofsm
+    assign cfg_combo_en[k] = com_sel_ctl_i[k].pwrb_in_sel.q |
+                             com_sel_ctl_i[k].key0_in_sel.q |
+                             com_sel_ctl_i[k].key1_in_sel.q |
+                             com_sel_ctl_i[k].key2_in_sel.q |
+                             com_sel_ctl_i[k].ac_present_sel.q;
+
+    //Instantiate the combo detection state machine
     sysrst_ctrl_combofsm # (
       .TIMER1BIT(16),
       .TIMER2BIT(32)
     ) u_combo_fsm (
-      .clk_aon_i(clk_aon_i),
-      .rst_aon_ni(rst_aon_ni),
+      .clk_aon_i,
+      .rst_aon_ni,
       .trigger_h_i(trigger_h[k]),
       .trigger_l_i(trigger_l[k]),
-      .cfg_timer1_i(cfg_debounce_timer),
-      .cfg_timer2_i(cfg_combo_timer[k]),
+      .cfg_timer1_i(key_intr_debounce_ctl_i.q),
+      .cfg_timer2_i(com_det_ctl_i[k].q),
       .cfg_h2l_en_i(cfg_combo_en[k]),
       .timer_h2l_cond_met(combo_det[k])
     );
-  end
 
-  //Instantiate the combo action module
-  for (genvar k = 0 ; k < NumCombo ; k++) begin : gen_combo_act
+    //Instantiate the combo action module
     sysrst_ctrl_comboact u_combo_act (
-      .clk_aon_i(clk_aon_i),
-      .rst_aon_ni(rst_aon_ni),
-      .clk_i(clk_i),
-      .rst_ni(rst_ni),
-      .cfg_intr_en(cfg_intr_com[k]),
-      .cfg_bat_disable_en(cfg_bat_disable_com[k]),
-      .cfg_ec_rst_en(cfg_ec_rst_com[k]),
-      .cfg_gsc_rst_en(cfg_gsc_rst_com[k]),
+      .clk_aon_i,
+      .rst_aon_ni,
+      .cfg_intr_en(com_out_ctl_i[k].interrupt.q),
+      .cfg_bat_disable_en(com_out_ctl_i[k].bat_disable.q),
+      .cfg_ec_rst_en(com_out_ctl_i[k].ec_rst.q),
+      .cfg_gsc_rst_en(com_out_ctl_i[k].gsc_rst.q),
       .combo_det(combo_det[k]),
       .ec_rst_l_i(ec_rst_l_int),
       .ec_rst_ctl_i(ec_rst_ctl_i),
@@ -326,67 +161,34 @@
       .gsc_rst_o(combo_gsc_rst[k]),
       .ec_rst_l_o(combo_ec_rst_l[k])
    );
+
+    // Synchronize IRQ pulsefrom 200KHz always-onclock to 24MHz cfg clock
+    prim_pulse_sync u_combo0_intr (
+      .clk_src_i   (clk_aon_i),
+      .clk_dst_i   (clk_i),
+      .rst_src_ni  (rst_aon_ni),
+      .rst_dst_ni  (rst_ni),
+      .src_pulse_i (combo_intr_pulse[k]),
+      .dst_pulse_o (combo_intr_pulse_synced[k])
+    );
   end
 
-  //bat_disable
-  //If any combo triggers bat_disable, assert the signal
+  // bat_disable
+  // If any combo triggers bat_disable, assert the signal
   assign bat_disable_hw_o = |(combo_bat_disable);
 
-  //If any combo triggers GSC or EC RST(active low), assert the signal
+  // If any combo triggers GSC or EC RST(active low), assert the signal
   assign gsc_rst_o = |(combo_gsc_rst);
   assign ec_rst_l_hw_o = &(combo_ec_rst_l);
 
-  //Synchronize from 200KHz always-onclock to 24MHz cfg clock
-  prim_pulse_sync u_combo0_intr (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_ni),
-    .rst_dst_ni  (rst_ni),
-    .src_pulse_i (combo_intr_pulse[0]),
-    .dst_pulse_o (combo0_h2l_intr)
-  );
+  // Write interrupt status registers using the synced IRQ pulses.
+  assign {combo_intr_status_o.combo3_h2l.de,
+          combo_intr_status_o.combo2_h2l.de,
+          combo_intr_status_o.combo1_h2l.de,
+          combo_intr_status_o.combo0_h2l.de} = combo_intr_pulse_synced;
 
-  assign combo_intr_status_o.combo0_h2l.de = combo0_h2l_intr;
+  assign sysrst_ctrl_combo_intr_o = |combo_intr_pulse_synced;
 
-  prim_pulse_sync u_combo1_intr (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_ni),
-    .rst_dst_ni  (rst_ni),
-    .src_pulse_i (combo_intr_pulse[1]),
-    .dst_pulse_o (combo1_h2l_intr)
-  );
-
-  assign combo_intr_status_o.combo1_h2l.de = combo1_h2l_intr;
-
-  prim_pulse_sync u_combo2_intr (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_ni),
-    .rst_dst_ni  (rst_ni),
-    .src_pulse_i (combo_intr_pulse[2]),
-    .dst_pulse_o (combo2_h2l_intr)
-  );
-
-  assign combo_intr_status_o.combo2_h2l.de = combo2_h2l_intr;
-
-  prim_pulse_sync u_combo3_intr (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_ni),
-    .rst_dst_ni  (rst_ni),
-    .src_pulse_i (combo_intr_pulse[3]),
-    .dst_pulse_o (combo3_h2l_intr)
-  );
-
-  assign combo_intr_status_o.combo3_h2l.de = combo3_h2l_intr;
-
-  assign sysrst_ctrl_combo_intr_o = combo0_h2l_intr |
-                                    combo1_h2l_intr |
-                                    combo2_h2l_intr |
-                                    combo3_h2l_intr;
-
-  //To write into interrupt status register
   assign combo_intr_status_o.combo0_h2l.d = 1'b1;
   assign combo_intr_status_o.combo1_h2l.d = 1'b1;
   assign combo_intr_status_o.combo2_h2l.d = 1'b1;
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_comboact.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_comboact.sv
index 4d2810f..44158e1 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_comboact.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_comboact.sv
@@ -7,8 +7,6 @@
 module sysrst_ctrl_comboact import sysrst_ctrl_reg_pkg::*; (
   input  clk_aon_i,
   input  rst_aon_ni,
-  input  clk_i,
-  input  rst_ni,
 
   input  cfg_intr_en,
   input  cfg_bat_disable_en,
@@ -25,10 +23,6 @@
   output ec_rst_l_o
 );
 
-  logic [15:0] cfg_ec_rst_timer;
-  logic        load_ec_rst_timer;
-  logic [15:0] cfg_ec_rst_timer_d;
-
   logic combo_det_q;
   logic combo_gsc_pulse;
   logic combo_bat_disable_pulse;
@@ -71,34 +65,6 @@
   assign combo_intr_pulse = cfg_intr_en && (combo_det_q == 1'b0) && (combo_det == 1'b1);
 
   //ec_rst_logic
-  //synchronize between cfg(24MHz) and always-on(200KHz)
-  prim_fifo_async #(
-    .Width(16),
-    .Depth(2)
-  ) i_cfg_ec_rst_pulse (
-    .clk_wr_i  (clk_i),
-    .rst_wr_ni (rst_ni),
-    .wvalid_i  (ec_rst_ctl_i.qe),
-    .wready_o  (),
-    .wdata_i   (ec_rst_ctl_i.q),
-    .wdepth_o  (),
-
-    .clk_rd_i  (clk_aon_i),
-    .rst_rd_ni (rst_aon_ni),
-    .rvalid_o  (load_ec_rst_timer),
-    .rready_i  (1'b1),
-    .rdata_o   (cfg_ec_rst_timer_d),
-    .rdepth_o  ()
-  );
-
-  always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: u_cfg_ec_rst_timer_reg
-    if (!rst_aon_ni) begin
-      cfg_ec_rst_timer    <= '0;
-    end else if (load_ec_rst_timer) begin
-      cfg_ec_rst_timer    <= cfg_ec_rst_timer_d;
-    end
-  end
-
   always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: u_ec_rst_l_int
     if (!rst_aon_ni) begin
       ec_rst_l_int    <= 1'b1;//active low signal
@@ -127,7 +93,7 @@
 
   assign timer_cnt_en = (ec_rst_l_q == 1'b0);
 
-  assign timer_cnt_clr = (ec_rst_l_q == 1'b0) && (timer_cnt_q == cfg_ec_rst_timer);
+  assign timer_cnt_clr = (ec_rst_l_q == 1'b0) && (timer_cnt_q == ec_rst_ctl_i.q);
 
   assign timer_cnt_d = (timer_cnt_en) ? timer_cnt_q + 1'b1 : timer_cnt_q;
 
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_inv.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_inv.sv
index 6ef73ad..62af05f 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_inv.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_inv.sv
@@ -6,9 +6,6 @@
 //
 
 module sysrst_ctrl_inv import sysrst_ctrl_reg_pkg::*; (
-  input  clk_aon_i,
-  input  rst_aon_ni,
-
   input  cio_pwrb_in_i,
   input  cio_key0_in_i,
   input  cio_key1_in_i,
@@ -41,140 +38,18 @@
 
 );
 
-  logic  cfg_pwrb_i_inv;
-  logic  cfg_key0_i_inv;
-  logic  cfg_key1_i_inv;
-  logic  cfg_key2_i_inv;
-  logic  cfg_ac_present_i_inv;
-  logic  cfg_lid_open_i_inv;
-  logic  cfg_pwrb_o_inv;
-  logic  cfg_key0_o_inv;
-  logic  cfg_key1_o_inv;
-  logic  cfg_key2_o_inv;
-  logic  cfg_bat_disable_o_inv;
-  logic  cfg_z3_wakeup_o_inv;
+  assign cio_pwrb_out_o    = key_invert_ctl_i.pwrb_out.q    ^ pwrb_out_int_i;
+  assign cio_key0_out_o    = key_invert_ctl_i.key0_out.q    ^ key0_out_int_i;
+  assign cio_key1_out_o    = key_invert_ctl_i.key1_out.q    ^ key1_out_int_i;
+  assign cio_key2_out_o    = key_invert_ctl_i.key2_out.q    ^ key2_out_int_i;
+  assign cio_bat_disable_o = key_invert_ctl_i.bat_disable.q ^ bat_disable_int_i;
+  assign cio_z3_wakeup_o   = key_invert_ctl_i.z3_wakeup.q   ^ z3_wakeup_int_i;
 
-  //synchronize between cfg(24MHz) and always-on(200KHz)
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_pwrb_i_inv (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_invert_ctl_i.pwrb_in.q),
-    .q_o(cfg_pwrb_i_inv)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key0_i_inv (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_invert_ctl_i.key0_in.q),
-    .q_o(cfg_key0_i_inv)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key1_i_inv (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_invert_ctl_i.key1_in.q),
-    .q_o(cfg_key1_i_inv)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key2_i_inv (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_invert_ctl_i.key2_in.q),
-    .q_o(cfg_key2_i_inv)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_ac_present_i_inv (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_invert_ctl_i.ac_present.q),
-    .q_o(cfg_ac_present_i_inv)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_lid_open_i_inv (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_invert_ctl_i.lid_open.q),
-    .q_o(cfg_lid_open_i_inv)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_pwrb_o_inv (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_invert_ctl_i.pwrb_out.q),
-    .q_o(cfg_pwrb_o_inv)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key0_o_inv (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_invert_ctl_i.key0_out.q),
-    .q_o(cfg_key0_o_inv)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key1_o_inv (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_invert_ctl_i.key1_out.q),
-    .q_o(cfg_key1_o_inv)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key2_o_inv (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_invert_ctl_i.key2_out.q),
-    .q_o(cfg_key2_o_inv)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_bat_disable_o_inv (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_invert_ctl_i.bat_disable.q),
-    .q_o(cfg_bat_disable_o_inv)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_z3_wakeup_o_inv (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_invert_ctl_i.z3_wakeup.q),
-    .q_o(cfg_z3_wakeup_o_inv)
-  );
-
-  assign cio_pwrb_out_o = cfg_pwrb_o_inv ? ~pwrb_out_int_i : pwrb_out_int_i;
-  assign cio_key0_out_o = cfg_key0_o_inv ? ~key0_out_int_i : key0_out_int_i;
-  assign cio_key1_out_o = cfg_key1_o_inv ? ~key1_out_int_i : key1_out_int_i;
-  assign cio_key2_out_o = cfg_key2_o_inv ? ~key2_out_int_i : key2_out_int_i;
-  assign cio_bat_disable_o = cfg_bat_disable_o_inv ? ~bat_disable_int_i : bat_disable_int_i;
-  assign cio_z3_wakeup_o = cfg_z3_wakeup_o_inv ? ~z3_wakeup_int_i : z3_wakeup_int_i;
-
-  assign pwrb_int_o = cfg_pwrb_i_inv ? ~cio_pwrb_in_i : cio_pwrb_in_i;
-  assign key0_int_o = cfg_key0_i_inv ? ~cio_key0_in_i : cio_key0_in_i;
-  assign key1_int_o = cfg_key1_i_inv ? ~cio_key1_in_i : cio_key1_in_i;
-  assign key2_int_o = cfg_key2_i_inv ? ~cio_key2_in_i : cio_key2_in_i;
-  assign ac_present_int_o = cfg_ac_present_i_inv ? ~cio_ac_present_i : cio_ac_present_i;
-  assign lid_open_int_o = cfg_lid_open_i_inv ? ~cio_lid_open_i : cio_lid_open_i;
+  assign pwrb_int_o        = key_invert_ctl_i.pwrb_in.q     ^ cio_pwrb_in_i;
+  assign key0_int_o        = key_invert_ctl_i.key0_in.q     ^ cio_key0_in_i;
+  assign key1_int_o        = key_invert_ctl_i.key1_in.q     ^ cio_key1_in_i;
+  assign key2_int_o        = key_invert_ctl_i.key2_in.q     ^ cio_key2_in_i;
+  assign ac_present_int_o  = key_invert_ctl_i.ac_present.q  ^ cio_ac_present_i;
+  assign lid_open_int_o    = key_invert_ctl_i.lid_open.q    ^ cio_lid_open_i;
 
 endmodule
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_keyfsm.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_keyfsm.sv
index ffc6a7c..a21c54e 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_keyfsm.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_keyfsm.sv
@@ -5,12 +5,12 @@
 // Description sysrst_ctrl key press and release FSM module
 
 module sysrst_ctrl_keyfsm #(
-  parameter int unsigned TIMERBIT = 16
+  parameter int unsigned TimerWidth = 16
   ) (
   input                clk_aon_i,
   input                rst_aon_ni,
   input                trigger_i,
-  input [TIMERBIT-1:0] cfg_timer_i,
+  input [TimerWidth-1:0] cfg_timer_i,
   input                cfg_l2h_en_i,
   input                cfg_h2l_en_i,
   output logic         timer_l2h_cond_met,
@@ -22,7 +22,7 @@
   logic trigger_h2l, trigger_l2h, trigger_l2l, trigger_h2h;
   //logic trigger_tgl, trigger_sty;
 
-  logic [TIMERBIT-1:0] timer_cnt_d, timer_cnt_q;
+  logic [TimerWidth-1:0] timer_cnt_d, timer_cnt_q;
   logic timer_cnt_clr, timer_cnt_en;
 
   always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_trigger_reg
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_keyintr.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_keyintr.sv
index eb7b227..e2aae36 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_keyintr.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_keyintr.sv
@@ -25,182 +25,10 @@
 
 );
 
-  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;
   logic key0_int, key1_int, key2_int;
   logic ac_present_int;
   logic ec_rst_l_int;
-  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)
-  ) u_cfg_pwrb_in_h2l (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_intr_ctl_i.pwrb_in_h2l.q),
-    .q_o(cfg_pwrb_in_h2l)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key0_in_h2l (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_intr_ctl_i.key0_in_h2l.q),
-    .q_o(cfg_key0_in_h2l)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key1_in_h2l (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_intr_ctl_i.key1_in_h2l.q),
-    .q_o(cfg_key1_in_h2l)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key2_in_h2l (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_intr_ctl_i.key2_in_h2l.q),
-    .q_o(cfg_key2_in_h2l)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_ac_present_h2l (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_intr_ctl_i.ac_present_h2l.q),
-    .q_o(cfg_ac_present_h2l)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_ec_rst_l_h2l (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_intr_ctl_i.ec_rst_l_h2l.q),
-    .q_o(cfg_ec_rst_l_h2l)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_pwrb_in_l2h (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_intr_ctl_i.pwrb_in_l2h.q),
-    .q_o(cfg_pwrb_in_l2h)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key0_in_l2h (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_intr_ctl_i.key0_in_l2h.q),
-    .q_o(cfg_key0_in_l2h)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key1_in_l2h (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_intr_ctl_i.key1_in_l2h.q),
-    .q_o(cfg_key1_in_l2h)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key2_in_l2h (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_intr_ctl_i.key2_in_l2h.q),
-    .q_o(cfg_key2_in_l2h)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_ac_present_l2h (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(key_intr_ctl_i.ac_present_l2h.q),
-    .q_o(cfg_ac_present_l2h)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_ec_rst_l_l2h (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_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)
-  ) u_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_aon_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_aon_ni) begin: p_cfg_key_intr_timer_reg
-    if (!rst_aon_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 # (
@@ -257,342 +85,99 @@
     .q_o(ec_rst_l_int)
   );
 
-  //Instantiate the key state machine
-  sysrst_ctrl_keyfsm # (
-    .TIMERBIT(16)
-  ) u_pwrbintr_fsm (
-    .clk_aon_i(clk_aon_i),
-    .rst_aon_ni(rst_aon_ni),
-    .trigger_i(pwrb_int),
-    .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)
-  );
+  localparam int TimerWidth = 16;
+  localparam int NumKeyIntr = 6;
+  logic [NumKeyIntr-1:0] triggers, l2h_en, h2l_en;
+  assign triggers = {pwrb_int,
+                     key0_int,
+                     key1_int,
+                     key2_int,
+                     ac_present_int,
+                     ec_rst_l_int};
+  assign l2h_en = {key_intr_ctl_i.pwrb_in_l2h.q,
+                   key_intr_ctl_i.key0_in_l2h.q,
+                   key_intr_ctl_i.key1_in_l2h.q,
+                   key_intr_ctl_i.key2_in_l2h.q,
+                   key_intr_ctl_i.ac_present_l2h.q,
+                   key_intr_ctl_i.ec_rst_l_l2h.q};
+  assign h2l_en = {key_intr_ctl_i.pwrb_in_h2l.q,
+                   key_intr_ctl_i.key0_in_h2l.q,
+                   key_intr_ctl_i.key1_in_h2l.q,
+                   key_intr_ctl_i.key2_in_h2l.q,
+                   key_intr_ctl_i.ac_present_h2l.q,
+                   key_intr_ctl_i.ec_rst_l_h2l.q};
 
-  sysrst_ctrl_keyfsm # (
-    .TIMERBIT(16)
-  ) u_key0intr_fsm (
-    .clk_aon_i(clk_aon_i),
-    .rst_aon_ni(rst_aon_ni),
-    .trigger_i(key0_int),
-    .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)
-  );
+  logic [NumKeyIntr-1:0] l2h_met_pulse_synced, h2l_met_pulse_synced;
+  for (genvar k = 0; k < NumKeyIntr; k ++) begin : gen_keyfsm
+    // Instantiate the key state machine
+    logic l2h_met_d, h2l_met_d;
+    sysrst_ctrl_keyfsm # (
+      .TimerWidth(TimerWidth)
+    ) u_pwrbintr_fsm (
+      .clk_aon_i,
+      .rst_aon_ni,
+      .trigger_i(triggers[k]),
+      .cfg_timer_i(key_intr_debounce_ctl_i.q),
+      .cfg_l2h_en_i(l2h_en[k]),
+      .cfg_h2l_en_i(h2l_en[k]),
+      .timer_l2h_cond_met(l2h_met_d),
+      .timer_h2l_cond_met(h2l_met_d)
+    );
 
-  sysrst_ctrl_keyfsm # (
-    .TIMERBIT(16)
-  ) u_key1intr_fsm (
-    .clk_aon_i(clk_aon_i),
-    .rst_aon_ni(rst_aon_ni),
-    .trigger_i(key1_int),
-    .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)
-  ) u_key2intr_fsm (
-    .clk_aon_i(clk_aon_i),
-    .rst_aon_ni(rst_aon_ni),
-    .trigger_i(key2_int),
-    .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)
-  ) u_ac_presentintr_fsm (
-    .clk_aon_i(clk_aon_i),
-    .rst_aon_ni(rst_aon_ni),
-    .trigger_i(ac_present_int),
-    .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)
-  ) u_ec_rst_lintr_fsm (
-    .clk_aon_i(clk_aon_i),
-    .rst_aon_ni(rst_aon_ni),
-    .trigger_i(ec_rst_l_int),
-    .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_aon_ni) begin: p_pwrb_intr_h2l_det
-    if (!rst_aon_ni) begin
-      pwrb_intr_h2l_det_q    <= 1'b0;
-    end else begin
-      pwrb_intr_h2l_det_q    <= pwrb_intr_h2l_det;
+    // generate a pulses for interrupt status CSR
+    logic l2h_met_q, h2l_met_q;
+    always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin : p_pulse_reg
+      if (!rst_aon_ni) begin
+        l2h_met_q <= '0;
+        h2l_met_q <= '0;
+      end else begin
+        l2h_met_q <= l2h_met_d;
+        h2l_met_q <= h2l_met_d;
+      end
     end
+
+    logic l2h_met_pulse, h2l_met_pulse;
+    assign l2h_met_pulse =  l2h_met_d & ~l2h_met_q;
+    assign h2l_met_pulse = ~h2l_met_d &  h2l_met_q;
+
+    prim_pulse_sync u_prim_pulse_sync_l2h (
+      .clk_src_i  (clk_aon_i),
+      .rst_src_ni (rst_aon_ni),
+      .src_pulse_i(l2h_met_pulse),
+      .clk_dst_i  (clk_i),
+      .rst_dst_ni (rst_ni),
+      .dst_pulse_o(l2h_met_pulse_synced[k])
+    );
+    prim_pulse_sync u_prim_pulse_sync_h2l (
+      .clk_src_i  (clk_aon_i),
+      .rst_src_ni (rst_aon_ni),
+      .src_pulse_i(h2l_met_pulse),
+      .clk_dst_i  (clk_i),
+      .rst_dst_ni (rst_ni),
+      .dst_pulse_o(h2l_met_pulse_synced[k])
+    );
   end
 
-  always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_pwrb_intr_l2h_det
-    if (!rst_aon_ni) begin
-      pwrb_intr_l2h_det_q    <= 1'b0;
-    end else begin
-      pwrb_intr_l2h_det_q    <= pwrb_intr_l2h_det;
-    end
-  end
+  // Assign to CSRs
+  assign {key_intr_status_o.pwrb_l2h.de,
+          key_intr_status_o.key0_in_l2h.de,
+          key_intr_status_o.key1_in_l2h.de,
+          key_intr_status_o.key2_in_l2h.de,
+          key_intr_status_o.ac_present_l2h.de,
+          key_intr_status_o.ec_rst_l_l2h.de} = l2h_met_pulse_synced;
 
-  always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_key0_intr_h2l_det
-    if (!rst_aon_ni) begin
-      key0_intr_h2l_det_q    <= 1'b0;
-    end else begin
-      key0_intr_h2l_det_q    <= key0_intr_h2l_det;
-    end
-  end
+  assign {key_intr_status_o.pwrb_h2l.de,
+          key_intr_status_o.key0_in_h2l.de,
+          key_intr_status_o.key1_in_h2l.de,
+          key_intr_status_o.key2_in_h2l.de,
+          key_intr_status_o.ac_present_h2l.de,
+          key_intr_status_o.ec_rst_l_h2l.de} = h2l_met_pulse_synced;
 
-  always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_key0_intr_l2h_det
-    if (!rst_aon_ni) begin
-      key0_intr_l2h_det_q    <= 1'b0;
-    end else begin
-      key0_intr_l2h_det_q    <= key0_intr_l2h_det;
-    end
-  end
+  // Send out aggregated interrupt pulse
+  assign sysrst_ctrl_key_intr_o = |l2h_met_pulse_synced |
+                                  |h2l_met_pulse_synced;
 
-  always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_key1_intr_h2l_det
-    if (!rst_aon_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_aon_ni) begin: p_key1_intr_l2h_det
-    if (!rst_aon_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_aon_ni) begin: p_key2_intr_h2l_det
-    if (!rst_aon_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_aon_ni) begin: p_key2_intr_l2h_det
-    if (!rst_aon_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_aon_ni) begin: p_ac_present_intr_h2l_det
-    if (!rst_aon_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_aon_ni) begin: p_ac_present_intr_l2h_det
-    if (!rst_aon_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_aon_ni) begin: p_ec_rst_l_intr_h2l_det
-    if (!rst_aon_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_aon_ni) begin: p_ec_rst_l_intr_l2h_det
-    if (!rst_aon_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 u_pwrb_h2l (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_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 u_pwrb_l2h (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_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 u_key0_in_h2l (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_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 u_key0_in_l2h (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_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 u_key1_in_h2l (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_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 u_key1_in_l2h (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_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 u_key2_in_h2l (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_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 u_key2_in_l2h (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_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 u_ac_present_h2l (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_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 u_ac_present_l2h (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_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 u_ec_rst_l_h2l (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_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 u_ec_rst_l_l2h (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_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_o = 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
+  // 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;
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_pin.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_pin.sv
index ced3e69..2a893a7 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_pin.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_pin.sv
@@ -6,8 +6,6 @@
 //
 
 module sysrst_ctrl_pin import sysrst_ctrl_reg_pkg::*; (
-  input  clk_aon_i,
-  input  rst_aon_ni,
   input  clk_i,
   input  rst_ni,
 
@@ -43,428 +41,87 @@
 
 );
 
-  logic cfg_ac_present_i_pin;
-  logic cfg_ec_rst_l_i_pin;
-  logic cfg_pwrb_in_i_pin;
-  logic cfg_key0_in_i_pin;
-  logic cfg_key1_in_i_pin;
-  logic cfg_key2_in_i_pin;
-  logic cfg_lid_open_i_pin;
-
-  logic cfg_bat_disable_0_allow;
-  logic cfg_ec_rst_l_0_allow;
-  logic cfg_pwrb_out_0_allow;
-  logic cfg_key0_out_0_allow;
-  logic cfg_key1_out_0_allow;
-  logic cfg_key2_out_0_allow;
-  logic cfg_z3_wakeup_0_allow;
-  logic cfg_bat_disable_1_allow;
-  logic cfg_ec_rst_l_1_allow;
-  logic cfg_pwrb_out_1_allow;
-  logic cfg_key0_out_1_allow;
-  logic cfg_key1_out_1_allow;
-  logic cfg_key2_out_1_allow;
-  logic cfg_z3_wakeup_1_allow;
-
-  logic cfg_bat_disable_ov;
-  logic cfg_ec_rst_l_ov;
-  logic cfg_pwrb_out_ov;
-  logic cfg_key0_out_ov;
-  logic cfg_key1_out_ov;
-  logic cfg_key2_out_ov;
-  logic cfg_z3_wakeup_ov;
-
-  logic cfg_bat_disable_q;
-  logic cfg_ec_rst_l_q;
-  logic cfg_pwrb_out_q;
-  logic cfg_key0_out_q;
-  logic cfg_key1_out_q;
-  logic cfg_key2_out_q;
-  logic cfg_z3_wakeup_q;
-
-  //Synchronize between GPIO and cfg(24MHz)
+  // Synchronize between GPIO and cfg(24MHz)
+  // Use the raw input values here (not the inverted pass through values)
   prim_flop_2sync # (
-    .Width(1)
+    .Width(7)
   ) u_cfg_ac_present_i_pin (
-    .clk_i(clk_i),
-    .rst_ni(rst_ni),
-    .d_i(cio_ac_present_i),
-    .q_o(cfg_ac_present_i_pin)
+    .clk_i,
+    .rst_ni,
+    .d_i({cio_ac_present_i,
+          cio_ec_rst_in_l_i,
+          cio_pwrb_in_i,
+          cio_key0_in_i,
+          cio_key1_in_i,
+          cio_key2_in_i,
+          cio_lid_open_i}),
+    .q_o({pin_in_value_o.ac_present.d,
+          pin_in_value_o.ec_rst_l.d,
+          pin_in_value_o.pwrb_in.d,
+          pin_in_value_o.key0_in.d,
+          pin_in_value_o.key1_in.d,
+          pin_in_value_o.key2_in.d,
+          pin_in_value_o.lid_open.d})
   );
 
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_ec_rst_l_i_pin (
-    .clk_i(clk_i),
-    .rst_ni(rst_ni),
-    .d_i(cio_ec_rst_in_l_i),
-    .q_o(cfg_ec_rst_l_i_pin)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_pwrb_in_i_pin (
-    .clk_i(clk_i),
-    .rst_ni(rst_ni),
-    .d_i(cio_pwrb_in_i),
-    .q_o(cfg_pwrb_in_i_pin)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key0_in_i_pin (
-    .clk_i(clk_i),
-    .rst_ni(rst_ni),
-    .d_i(cio_key0_in_i),
-    .q_o(cfg_key0_in_i_pin)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key1_in_i_pin (
-    .clk_i(clk_i),
-    .rst_ni(rst_ni),
-    .d_i(cio_key1_in_i),
-    .q_o(cfg_key1_in_i_pin)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_key2_in_i_pin (
-    .clk_i(clk_i),
-    .rst_ni(rst_ni),
-    .d_i(cio_key2_in_i),
-    .q_o(cfg_key2_in_i_pin)
-  );
-
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_lid_open_i_pin (
-    .clk_i(clk_i),
-    .rst_ni(rst_ni),
-    .d_i(cio_lid_open_i),
-    .q_o(cfg_lid_open_i_pin)
-  );
-
-  //Use the raw input(not inverted)
-  assign pin_in_value_o.ac_present.d = cfg_ac_present_i_pin;
-  assign pin_in_value_o.ec_rst_l.d = cfg_ec_rst_l_i_pin;
-  assign pin_in_value_o.pwrb_in.d = cfg_pwrb_in_i_pin;
-  assign pin_in_value_o.key0_in.d = cfg_key0_in_i_pin;
-  assign pin_in_value_o.key1_in.d = cfg_key1_in_i_pin;
-  assign pin_in_value_o.key2_in.d = cfg_key2_in_i_pin;
-  assign pin_in_value_o.lid_open.d = cfg_lid_open_i_pin;
-
   assign pin_in_value_o.ac_present.de = 1'b1;
-  assign pin_in_value_o.ec_rst_l.de = 1'b1;
-  assign pin_in_value_o.pwrb_in.de = 1'b1;
-  assign pin_in_value_o.key0_in.de = 1'b1;
-  assign pin_in_value_o.key1_in.de = 1'b1;
-  assign pin_in_value_o.key2_in.de = 1'b1;
-  assign pin_in_value_o.lid_open.de = 1'b1;
+  assign pin_in_value_o.ec_rst_l.de   = 1'b1;
+  assign pin_in_value_o.pwrb_in.de    = 1'b1;
+  assign pin_in_value_o.key0_in.de    = 1'b1;
+  assign pin_in_value_o.key1_in.de    = 1'b1;
+  assign pin_in_value_o.key2_in.de    = 1'b1;
+  assign pin_in_value_o.lid_open.de   = 1'b1;
 
-  //synchronize between cfg(24MHz) and always-on(200KHz)
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_bat_disable_0_allow (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_allowed_ctl_i.bat_disable_0.q),
-    .q_o(cfg_bat_disable_0_allow)
-  );
+  // Pin override logic.
+  localparam int NumSignals = 7;
+  logic [NumSignals-1:0] inputs, outputs, enabled, values, allowed0, allowed1;
+  assign inputs = {pwrb_out_hw_i,
+                   key0_out_hw_i,
+                   key1_out_hw_i,
+                   key2_out_hw_i,
+                   z3_wakeup_hw_i,
+                   bat_disable_hw_i,
+                   ec_rst_l_hw_i};
+  assign enabled = {pin_out_ctl_i.pwrb_out.q,
+                    pin_out_ctl_i.key0_out.q,
+                    pin_out_ctl_i.key1_out.q,
+                    pin_out_ctl_i.key2_out.q,
+                    pin_out_ctl_i.z3_wakeup.q,
+                    pin_out_ctl_i.bat_disable.q,
+                    pin_out_ctl_i.ec_rst_l.q};
+  assign values =  {pin_out_value_i.pwrb_out.q,
+                    pin_out_value_i.key0_out.q,
+                    pin_out_value_i.key1_out.q,
+                    pin_out_value_i.key2_out.q,
+                    pin_out_value_i.z3_wakeup.q,
+                    pin_out_value_i.bat_disable.q,
+                    pin_out_value_i.ec_rst_l.q};
+  assign allowed0 = {pin_allowed_ctl_i.pwrb_out_0.q,
+                     pin_allowed_ctl_i.key0_out_0.q,
+                     pin_allowed_ctl_i.key1_out_0.q,
+                     pin_allowed_ctl_i.key2_out_0.q,
+                     pin_allowed_ctl_i.z3_wakeup_0.q,
+                     pin_allowed_ctl_i.bat_disable_0.q,
+                     pin_allowed_ctl_i.ec_rst_l_0.q};
+  assign allowed1 = {pin_allowed_ctl_i.pwrb_out_1.q,
+                     pin_allowed_ctl_i.key0_out_1.q,
+                     pin_allowed_ctl_i.key1_out_1.q,
+                     pin_allowed_ctl_i.key2_out_1.q,
+                     pin_allowed_ctl_i.z3_wakeup_1.q,
+                     pin_allowed_ctl_i.bat_disable_1.q,
+                     pin_allowed_ctl_i.ec_rst_l_1.q};
 
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue(1'b1)//ec_rst_l_0_allow is enabled by default
-  ) u_cfg_ec_rst_l_0_allow (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_allowed_ctl_i.ec_rst_l_0.q),
-    .q_o(cfg_ec_rst_l_0_allow)
-  );
+  for (genvar k = 0; k < NumSignals; k++) begin : gen_override_logic
+    assign outputs[k] = (enabled[k] && allowed0[k] && !values[k]) ? 1'b0 :
+                        (enabled[k] && allowed1[k] &&  values[k]) ? 1'b1 : inputs[k];
+  end
 
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_pwrb_out_0_allow (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_allowed_ctl_i.pwrb_out_0.q),
-    .q_o(cfg_pwrb_out_0_allow)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_key0_out_0_allow (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_allowed_ctl_i.key0_out_0.q),
-    .q_o(cfg_key0_out_0_allow)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_key1_out_0_allow (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_allowed_ctl_i.key1_out_0.q),
-    .q_o(cfg_key1_out_0_allow)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_key2_out_0_allow (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_allowed_ctl_i.key2_out_0.q),
-    .q_o(cfg_key2_out_0_allow)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_z3_wakeup_0_allow (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_allowed_ctl_i.z3_wakeup_0.q),
-    .q_o(cfg_z3_wakeup_0_allow)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_bat_disable_1_allow (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_allowed_ctl_i.bat_disable_1.q),
-    .q_o(cfg_bat_disable_1_allow)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_ec_rst_l_1_allow (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_allowed_ctl_i.ec_rst_l_1.q),
-    .q_o(cfg_ec_rst_l_1_allow)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_pwrb_out_1_allow (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_allowed_ctl_i.pwrb_out_1.q),
-    .q_o(cfg_pwrb_out_1_allow)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_key0_out_1_allow (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_allowed_ctl_i.key0_out_1.q),
-    .q_o(cfg_key0_out_1_allow)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_key1_out_1_allow (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_allowed_ctl_i.key1_out_1.q),
-    .q_o(cfg_key1_out_1_allow)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_key2_out_1_allow (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_allowed_ctl_i.key2_out_1.q),
-    .q_o(cfg_key2_out_1_allow)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_z3_wakeup_1_allow (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_allowed_ctl_i.z3_wakeup_1.q),
-    .q_o(cfg_z3_wakeup_1_allow)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_bat_disable_ov (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_out_ctl_i.bat_disable.q),
-    .q_o(cfg_bat_disable_ov)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue(1'b1)//ec_rst_l override is enabled by default
-  ) u_cfg_ec_rst_l_ov (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_out_ctl_i.ec_rst_l.q),
-    .q_o(cfg_ec_rst_l_ov)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_pwrb_out_ov (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_out_ctl_i.pwrb_out.q),
-    .q_o(cfg_pwrb_out_ov)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_key0_out_ov (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_out_ctl_i.key0_out.q),
-    .q_o(cfg_key0_out_ov)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_key1_out_ov (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_out_ctl_i.key1_out.q),
-    .q_o(cfg_key1_out_ov)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_key2_out_ov (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_out_ctl_i.key2_out.q),
-    .q_o(cfg_key2_out_ov)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_z3_wakeup_ov (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_out_ctl_i.z3_wakeup.q),
-    .q_o(cfg_z3_wakeup_ov)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_bat_disable_q (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_out_value_i.bat_disable.q),
-    .q_o(cfg_bat_disable_q)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_ec_rst_l_q (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_out_value_i.ec_rst_l.q),
-    .q_o(cfg_ec_rst_l_q)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_pwrb_out_q (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_out_value_i.pwrb_out.q),
-    .q_o(cfg_pwrb_out_q)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_key0_out_q (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_out_value_i.key0_out.q),
-    .q_o(cfg_key0_out_q)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_key1_out_q (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_out_value_i.key1_out.q),
-    .q_o(cfg_key1_out_q)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_key2_out_q (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_out_value_i.key2_out.q),
-    .q_o(cfg_key2_out_q)
-  );
-
-  prim_flop_2sync # (
-    .Width(1),
-    .ResetValue('0)
-  ) u_cfg_z3_wakeup_q (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(pin_out_value_i.z3_wakeup.q),
-    .q_o(cfg_z3_wakeup_q)
-  );
-
-  assign pwrb_out_int_o = (cfg_pwrb_out_ov && cfg_pwrb_out_0_allow && !cfg_pwrb_out_q) ? 1'b0 :
-          ((cfg_pwrb_out_ov && cfg_pwrb_out_1_allow && cfg_pwrb_out_q) ? 1'b1 : pwrb_out_hw_i);
-
-  assign key0_out_int_o = (cfg_key0_out_ov && cfg_key0_out_0_allow && !cfg_key0_out_q) ? 1'b0 :
-          ((cfg_key0_out_ov && cfg_key0_out_1_allow && cfg_key0_out_q) ? 1'b1 : key0_out_hw_i);
-
-  assign key1_out_int_o = (cfg_key1_out_ov && cfg_key1_out_0_allow && !cfg_key1_out_q) ? 1'b0 :
-          ((cfg_key1_out_ov && cfg_key1_out_1_allow && cfg_key1_out_q) ? 1'b1 : key1_out_hw_i);
-
-  assign key2_out_int_o = (cfg_key2_out_ov && cfg_key2_out_0_allow && !cfg_key2_out_q) ? 1'b0 :
-          ((cfg_key2_out_ov && cfg_key2_out_1_allow && cfg_key2_out_q) ? 1'b1 : key2_out_hw_i);
-
-  assign z3_wakeup_int_o = (cfg_z3_wakeup_ov && cfg_z3_wakeup_0_allow && !cfg_z3_wakeup_q) ? 1'b0 :
-          ((cfg_z3_wakeup_ov && cfg_z3_wakeup_1_allow && cfg_z3_wakeup_q) ? 1'b1 : z3_wakeup_hw_i);
-
-  assign bat_disable_int_o =
-          (cfg_bat_disable_ov && cfg_bat_disable_0_allow && !cfg_bat_disable_q) ? 1'b0 :
-          ((cfg_bat_disable_ov && cfg_bat_disable_1_allow && cfg_bat_disable_q) ? 1'b1 :
-          bat_disable_hw_i);
-
-  assign cio_ec_rst_out_l_o = (cfg_ec_rst_l_ov && cfg_ec_rst_l_0_allow && !cfg_ec_rst_l_q) ? 1'b0 :
-          ((cfg_ec_rst_l_ov && cfg_ec_rst_l_1_allow && cfg_ec_rst_l_q) ? 1'b1 : ec_rst_l_hw_i);
+  assign {pwrb_out_int_o,
+          key0_out_int_o,
+          key1_out_int_o,
+          key2_out_int_o,
+          z3_wakeup_int_o,
+          bat_disable_int_o,
+          cio_ec_rst_out_l_o} = outputs;
 
 endmodule
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_reg_pkg.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_reg_pkg.sv
index 2e369d2..7d57efa 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_reg_pkg.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_reg_pkg.sv
@@ -8,6 +8,7 @@
 
   // Param list
   parameter int NumCombo = 4;
+  parameter int TimerWidth = 16;
   parameter int NumAlerts = 1;
 
   // Address widths within the block
@@ -37,22 +38,18 @@
 
   typedef struct packed {
     logic [15:0] q;
-    logic        qe;
   } sysrst_ctrl_reg2hw_ec_rst_ctl_reg_t;
 
   typedef struct packed {
     logic [15:0] q;
-    logic        qe;
   } sysrst_ctrl_reg2hw_ulp_ac_debounce_ctl_reg_t;
 
   typedef struct packed {
     logic [15:0] q;
-    logic        qe;
   } sysrst_ctrl_reg2hw_ulp_lid_debounce_ctl_reg_t;
 
   typedef struct packed {
     logic [15:0] q;
-    logic        qe;
   } sysrst_ctrl_reg2hw_ulp_pwrb_debounce_ctl_reg_t;
 
   typedef struct packed {
@@ -236,17 +233,14 @@
 
   typedef struct packed {
     logic [15:0] q;
-    logic        qe;
   } sysrst_ctrl_reg2hw_key_intr_debounce_ctl_reg_t;
 
   typedef struct packed {
     struct packed {
       logic [15:0] q;
-      logic        qe;
     } debounce_timer;
     struct packed {
       logic        q;
-      logic        qe;
     } auto_block_enable;
   } sysrst_ctrl_reg2hw_auto_block_debounce_ctl_reg_t;
 
@@ -291,7 +285,6 @@
 
   typedef struct packed {
     logic [31:0] q;
-    logic        qe;
   } sysrst_ctrl_reg2hw_com_det_ctl_mreg_t;
 
   typedef struct packed {
@@ -427,26 +420,26 @@
 
   // Register -> HW type
   typedef struct packed {
-    sysrst_ctrl_reg2hw_intr_state_reg_t intr_state; // [337:337]
-    sysrst_ctrl_reg2hw_intr_enable_reg_t intr_enable; // [336:336]
-    sysrst_ctrl_reg2hw_intr_test_reg_t intr_test; // [335:334]
-    sysrst_ctrl_reg2hw_alert_test_reg_t alert_test; // [333:332]
-    sysrst_ctrl_reg2hw_ec_rst_ctl_reg_t ec_rst_ctl; // [331:315]
-    sysrst_ctrl_reg2hw_ulp_ac_debounce_ctl_reg_t ulp_ac_debounce_ctl; // [314:298]
-    sysrst_ctrl_reg2hw_ulp_lid_debounce_ctl_reg_t ulp_lid_debounce_ctl; // [297:281]
-    sysrst_ctrl_reg2hw_ulp_pwrb_debounce_ctl_reg_t ulp_pwrb_debounce_ctl; // [280:264]
-    sysrst_ctrl_reg2hw_ulp_ctl_reg_t ulp_ctl; // [263:263]
-    sysrst_ctrl_reg2hw_wk_status_reg_t wk_status; // [262:262]
-    sysrst_ctrl_reg2hw_key_invert_ctl_reg_t key_invert_ctl; // [261:250]
-    sysrst_ctrl_reg2hw_pin_allowed_ctl_reg_t pin_allowed_ctl; // [249:236]
-    sysrst_ctrl_reg2hw_pin_out_ctl_reg_t pin_out_ctl; // [235:229]
-    sysrst_ctrl_reg2hw_pin_out_value_reg_t pin_out_value; // [228:222]
-    sysrst_ctrl_reg2hw_key_intr_ctl_reg_t key_intr_ctl; // [221:210]
-    sysrst_ctrl_reg2hw_key_intr_debounce_ctl_reg_t key_intr_debounce_ctl; // [209:193]
-    sysrst_ctrl_reg2hw_auto_block_debounce_ctl_reg_t auto_block_debounce_ctl; // [192:174]
-    sysrst_ctrl_reg2hw_auto_block_out_ctl_reg_t auto_block_out_ctl; // [173:168]
-    sysrst_ctrl_reg2hw_com_sel_ctl_mreg_t [3:0] com_sel_ctl; // [167:148]
-    sysrst_ctrl_reg2hw_com_det_ctl_mreg_t [3:0] com_det_ctl; // [147:16]
+    sysrst_ctrl_reg2hw_intr_state_reg_t intr_state; // [326:326]
+    sysrst_ctrl_reg2hw_intr_enable_reg_t intr_enable; // [325:325]
+    sysrst_ctrl_reg2hw_intr_test_reg_t intr_test; // [324:323]
+    sysrst_ctrl_reg2hw_alert_test_reg_t alert_test; // [322:321]
+    sysrst_ctrl_reg2hw_ec_rst_ctl_reg_t ec_rst_ctl; // [320:305]
+    sysrst_ctrl_reg2hw_ulp_ac_debounce_ctl_reg_t ulp_ac_debounce_ctl; // [304:289]
+    sysrst_ctrl_reg2hw_ulp_lid_debounce_ctl_reg_t ulp_lid_debounce_ctl; // [288:273]
+    sysrst_ctrl_reg2hw_ulp_pwrb_debounce_ctl_reg_t ulp_pwrb_debounce_ctl; // [272:257]
+    sysrst_ctrl_reg2hw_ulp_ctl_reg_t ulp_ctl; // [256:256]
+    sysrst_ctrl_reg2hw_wk_status_reg_t wk_status; // [255:255]
+    sysrst_ctrl_reg2hw_key_invert_ctl_reg_t key_invert_ctl; // [254:243]
+    sysrst_ctrl_reg2hw_pin_allowed_ctl_reg_t pin_allowed_ctl; // [242:229]
+    sysrst_ctrl_reg2hw_pin_out_ctl_reg_t pin_out_ctl; // [228:222]
+    sysrst_ctrl_reg2hw_pin_out_value_reg_t pin_out_value; // [221:215]
+    sysrst_ctrl_reg2hw_key_intr_ctl_reg_t key_intr_ctl; // [214:203]
+    sysrst_ctrl_reg2hw_key_intr_debounce_ctl_reg_t key_intr_debounce_ctl; // [202:187]
+    sysrst_ctrl_reg2hw_auto_block_debounce_ctl_reg_t auto_block_debounce_ctl; // [186:170]
+    sysrst_ctrl_reg2hw_auto_block_out_ctl_reg_t auto_block_out_ctl; // [169:164]
+    sysrst_ctrl_reg2hw_com_sel_ctl_mreg_t [3:0] com_sel_ctl; // [163:144]
+    sysrst_ctrl_reg2hw_com_det_ctl_mreg_t [3:0] com_det_ctl; // [143:16]
     sysrst_ctrl_reg2hw_com_out_ctl_mreg_t [3:0] com_out_ctl; // [15:0]
   } sysrst_ctrl_reg2hw_t;
 
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_reg_top.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_reg_top.sv
index 999f324..e6d402f 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_reg_top.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_reg_top.sv
@@ -9,6 +9,8 @@
 module sysrst_ctrl_reg_top (
   input clk_i,
   input rst_ni,
+  input clk_aon_i,
+  input rst_aon_ni,
 
   input  tlul_pkg::tl_h2d_t tl_i,
   output tlul_pkg::tl_d2h_t tl_o,
@@ -102,6 +104,15 @@
   );
 
   // cdc oversampling signals
+    logic sync_aon_update;
+  prim_pulse_sync u_aon_tgl (
+    .clk_src_i(clk_aon_i),
+    .rst_src_ni(rst_aon_ni),
+    .src_pulse_i(1'b1),
+    .clk_dst_i(clk_i),
+    .rst_dst_ni(rst_ni),
+    .dst_pulse_o(sync_aon_update)
+  );
 
   assign reg_rdata = reg_rdata_next ;
   assign reg_error = (devmode_i & addrmiss) | wr_err | intg_err;
@@ -125,108 +136,154 @@
   logic ec_rst_ctl_we;
   logic [15:0] ec_rst_ctl_qs;
   logic [15:0] ec_rst_ctl_wd;
+  logic ec_rst_ctl_busy;
   logic ulp_ac_debounce_ctl_we;
   logic [15:0] ulp_ac_debounce_ctl_qs;
   logic [15:0] ulp_ac_debounce_ctl_wd;
+  logic ulp_ac_debounce_ctl_busy;
   logic ulp_lid_debounce_ctl_we;
   logic [15:0] ulp_lid_debounce_ctl_qs;
   logic [15:0] ulp_lid_debounce_ctl_wd;
+  logic ulp_lid_debounce_ctl_busy;
   logic ulp_pwrb_debounce_ctl_we;
   logic [15:0] ulp_pwrb_debounce_ctl_qs;
   logic [15:0] ulp_pwrb_debounce_ctl_wd;
+  logic ulp_pwrb_debounce_ctl_busy;
   logic ulp_ctl_we;
   logic ulp_ctl_qs;
   logic ulp_ctl_wd;
+  logic ulp_ctl_busy;
   logic ulp_status_we;
   logic ulp_status_qs;
   logic ulp_status_wd;
+  logic ulp_status_busy;
   logic wk_status_we;
   logic wk_status_qs;
   logic wk_status_wd;
   logic key_invert_ctl_we;
   logic key_invert_ctl_key0_in_qs;
   logic key_invert_ctl_key0_in_wd;
+  logic key_invert_ctl_key0_in_busy;
   logic key_invert_ctl_key0_out_qs;
   logic key_invert_ctl_key0_out_wd;
+  logic key_invert_ctl_key0_out_busy;
   logic key_invert_ctl_key1_in_qs;
   logic key_invert_ctl_key1_in_wd;
+  logic key_invert_ctl_key1_in_busy;
   logic key_invert_ctl_key1_out_qs;
   logic key_invert_ctl_key1_out_wd;
+  logic key_invert_ctl_key1_out_busy;
   logic key_invert_ctl_key2_in_qs;
   logic key_invert_ctl_key2_in_wd;
+  logic key_invert_ctl_key2_in_busy;
   logic key_invert_ctl_key2_out_qs;
   logic key_invert_ctl_key2_out_wd;
+  logic key_invert_ctl_key2_out_busy;
   logic key_invert_ctl_pwrb_in_qs;
   logic key_invert_ctl_pwrb_in_wd;
+  logic key_invert_ctl_pwrb_in_busy;
   logic key_invert_ctl_pwrb_out_qs;
   logic key_invert_ctl_pwrb_out_wd;
+  logic key_invert_ctl_pwrb_out_busy;
   logic key_invert_ctl_ac_present_qs;
   logic key_invert_ctl_ac_present_wd;
+  logic key_invert_ctl_ac_present_busy;
   logic key_invert_ctl_bat_disable_qs;
   logic key_invert_ctl_bat_disable_wd;
+  logic key_invert_ctl_bat_disable_busy;
   logic key_invert_ctl_lid_open_qs;
   logic key_invert_ctl_lid_open_wd;
+  logic key_invert_ctl_lid_open_busy;
   logic key_invert_ctl_z3_wakeup_qs;
   logic key_invert_ctl_z3_wakeup_wd;
+  logic key_invert_ctl_z3_wakeup_busy;
   logic pin_allowed_ctl_we;
   logic pin_allowed_ctl_bat_disable_0_qs;
   logic pin_allowed_ctl_bat_disable_0_wd;
+  logic pin_allowed_ctl_bat_disable_0_busy;
   logic pin_allowed_ctl_ec_rst_l_0_qs;
   logic pin_allowed_ctl_ec_rst_l_0_wd;
+  logic pin_allowed_ctl_ec_rst_l_0_busy;
   logic pin_allowed_ctl_pwrb_out_0_qs;
   logic pin_allowed_ctl_pwrb_out_0_wd;
+  logic pin_allowed_ctl_pwrb_out_0_busy;
   logic pin_allowed_ctl_key0_out_0_qs;
   logic pin_allowed_ctl_key0_out_0_wd;
+  logic pin_allowed_ctl_key0_out_0_busy;
   logic pin_allowed_ctl_key1_out_0_qs;
   logic pin_allowed_ctl_key1_out_0_wd;
+  logic pin_allowed_ctl_key1_out_0_busy;
   logic pin_allowed_ctl_key2_out_0_qs;
   logic pin_allowed_ctl_key2_out_0_wd;
+  logic pin_allowed_ctl_key2_out_0_busy;
   logic pin_allowed_ctl_z3_wakeup_0_qs;
   logic pin_allowed_ctl_z3_wakeup_0_wd;
+  logic pin_allowed_ctl_z3_wakeup_0_busy;
   logic pin_allowed_ctl_bat_disable_1_qs;
   logic pin_allowed_ctl_bat_disable_1_wd;
+  logic pin_allowed_ctl_bat_disable_1_busy;
   logic pin_allowed_ctl_ec_rst_l_1_qs;
   logic pin_allowed_ctl_ec_rst_l_1_wd;
+  logic pin_allowed_ctl_ec_rst_l_1_busy;
   logic pin_allowed_ctl_pwrb_out_1_qs;
   logic pin_allowed_ctl_pwrb_out_1_wd;
+  logic pin_allowed_ctl_pwrb_out_1_busy;
   logic pin_allowed_ctl_key0_out_1_qs;
   logic pin_allowed_ctl_key0_out_1_wd;
+  logic pin_allowed_ctl_key0_out_1_busy;
   logic pin_allowed_ctl_key1_out_1_qs;
   logic pin_allowed_ctl_key1_out_1_wd;
+  logic pin_allowed_ctl_key1_out_1_busy;
   logic pin_allowed_ctl_key2_out_1_qs;
   logic pin_allowed_ctl_key2_out_1_wd;
+  logic pin_allowed_ctl_key2_out_1_busy;
   logic pin_allowed_ctl_z3_wakeup_1_qs;
   logic pin_allowed_ctl_z3_wakeup_1_wd;
+  logic pin_allowed_ctl_z3_wakeup_1_busy;
   logic pin_out_ctl_we;
   logic pin_out_ctl_bat_disable_qs;
   logic pin_out_ctl_bat_disable_wd;
+  logic pin_out_ctl_bat_disable_busy;
   logic pin_out_ctl_ec_rst_l_qs;
   logic pin_out_ctl_ec_rst_l_wd;
+  logic pin_out_ctl_ec_rst_l_busy;
   logic pin_out_ctl_pwrb_out_qs;
   logic pin_out_ctl_pwrb_out_wd;
+  logic pin_out_ctl_pwrb_out_busy;
   logic pin_out_ctl_key0_out_qs;
   logic pin_out_ctl_key0_out_wd;
+  logic pin_out_ctl_key0_out_busy;
   logic pin_out_ctl_key1_out_qs;
   logic pin_out_ctl_key1_out_wd;
+  logic pin_out_ctl_key1_out_busy;
   logic pin_out_ctl_key2_out_qs;
   logic pin_out_ctl_key2_out_wd;
+  logic pin_out_ctl_key2_out_busy;
   logic pin_out_ctl_z3_wakeup_qs;
   logic pin_out_ctl_z3_wakeup_wd;
+  logic pin_out_ctl_z3_wakeup_busy;
   logic pin_out_value_we;
   logic pin_out_value_bat_disable_qs;
   logic pin_out_value_bat_disable_wd;
+  logic pin_out_value_bat_disable_busy;
   logic pin_out_value_ec_rst_l_qs;
   logic pin_out_value_ec_rst_l_wd;
+  logic pin_out_value_ec_rst_l_busy;
   logic pin_out_value_pwrb_out_qs;
   logic pin_out_value_pwrb_out_wd;
+  logic pin_out_value_pwrb_out_busy;
   logic pin_out_value_key0_out_qs;
   logic pin_out_value_key0_out_wd;
+  logic pin_out_value_key0_out_busy;
   logic pin_out_value_key1_out_qs;
   logic pin_out_value_key1_out_wd;
+  logic pin_out_value_key1_out_busy;
   logic pin_out_value_key2_out_qs;
   logic pin_out_value_key2_out_wd;
+  logic pin_out_value_key2_out_busy;
   logic pin_out_value_z3_wakeup_qs;
   logic pin_out_value_z3_wakeup_wd;
+  logic pin_out_value_z3_wakeup_busy;
   logic pin_in_value_ac_present_qs;
   logic pin_in_value_ec_rst_l_qs;
   logic pin_in_value_pwrb_in_qs;
@@ -237,141 +294,202 @@
   logic key_intr_ctl_we;
   logic key_intr_ctl_pwrb_in_h2l_qs;
   logic key_intr_ctl_pwrb_in_h2l_wd;
+  logic key_intr_ctl_pwrb_in_h2l_busy;
   logic key_intr_ctl_key0_in_h2l_qs;
   logic key_intr_ctl_key0_in_h2l_wd;
+  logic key_intr_ctl_key0_in_h2l_busy;
   logic key_intr_ctl_key1_in_h2l_qs;
   logic key_intr_ctl_key1_in_h2l_wd;
+  logic key_intr_ctl_key1_in_h2l_busy;
   logic key_intr_ctl_key2_in_h2l_qs;
   logic key_intr_ctl_key2_in_h2l_wd;
+  logic key_intr_ctl_key2_in_h2l_busy;
   logic key_intr_ctl_ac_present_h2l_qs;
   logic key_intr_ctl_ac_present_h2l_wd;
+  logic key_intr_ctl_ac_present_h2l_busy;
   logic key_intr_ctl_ec_rst_l_h2l_qs;
   logic key_intr_ctl_ec_rst_l_h2l_wd;
+  logic key_intr_ctl_ec_rst_l_h2l_busy;
   logic key_intr_ctl_pwrb_in_l2h_qs;
   logic key_intr_ctl_pwrb_in_l2h_wd;
+  logic key_intr_ctl_pwrb_in_l2h_busy;
   logic key_intr_ctl_key0_in_l2h_qs;
   logic key_intr_ctl_key0_in_l2h_wd;
+  logic key_intr_ctl_key0_in_l2h_busy;
   logic key_intr_ctl_key1_in_l2h_qs;
   logic key_intr_ctl_key1_in_l2h_wd;
+  logic key_intr_ctl_key1_in_l2h_busy;
   logic key_intr_ctl_key2_in_l2h_qs;
   logic key_intr_ctl_key2_in_l2h_wd;
+  logic key_intr_ctl_key2_in_l2h_busy;
   logic key_intr_ctl_ac_present_l2h_qs;
   logic key_intr_ctl_ac_present_l2h_wd;
+  logic key_intr_ctl_ac_present_l2h_busy;
   logic key_intr_ctl_ec_rst_l_l2h_qs;
   logic key_intr_ctl_ec_rst_l_l2h_wd;
+  logic key_intr_ctl_ec_rst_l_l2h_busy;
   logic key_intr_debounce_ctl_we;
   logic [15:0] key_intr_debounce_ctl_qs;
   logic [15:0] key_intr_debounce_ctl_wd;
+  logic key_intr_debounce_ctl_busy;
   logic auto_block_debounce_ctl_we;
   logic [15:0] auto_block_debounce_ctl_debounce_timer_qs;
   logic [15:0] auto_block_debounce_ctl_debounce_timer_wd;
+  logic auto_block_debounce_ctl_debounce_timer_busy;
   logic auto_block_debounce_ctl_auto_block_enable_qs;
   logic auto_block_debounce_ctl_auto_block_enable_wd;
+  logic auto_block_debounce_ctl_auto_block_enable_busy;
   logic auto_block_out_ctl_we;
   logic auto_block_out_ctl_key0_out_sel_qs;
   logic auto_block_out_ctl_key0_out_sel_wd;
+  logic auto_block_out_ctl_key0_out_sel_busy;
   logic auto_block_out_ctl_key1_out_sel_qs;
   logic auto_block_out_ctl_key1_out_sel_wd;
+  logic auto_block_out_ctl_key1_out_sel_busy;
   logic auto_block_out_ctl_key2_out_sel_qs;
   logic auto_block_out_ctl_key2_out_sel_wd;
+  logic auto_block_out_ctl_key2_out_sel_busy;
   logic auto_block_out_ctl_key0_out_value_qs;
   logic auto_block_out_ctl_key0_out_value_wd;
+  logic auto_block_out_ctl_key0_out_value_busy;
   logic auto_block_out_ctl_key1_out_value_qs;
   logic auto_block_out_ctl_key1_out_value_wd;
+  logic auto_block_out_ctl_key1_out_value_busy;
   logic auto_block_out_ctl_key2_out_value_qs;
   logic auto_block_out_ctl_key2_out_value_wd;
+  logic auto_block_out_ctl_key2_out_value_busy;
   logic com_sel_ctl_0_we;
   logic com_sel_ctl_0_key0_in_sel_0_qs;
   logic com_sel_ctl_0_key0_in_sel_0_wd;
+  logic com_sel_ctl_0_key0_in_sel_0_busy;
   logic com_sel_ctl_0_key1_in_sel_0_qs;
   logic com_sel_ctl_0_key1_in_sel_0_wd;
+  logic com_sel_ctl_0_key1_in_sel_0_busy;
   logic com_sel_ctl_0_key2_in_sel_0_qs;
   logic com_sel_ctl_0_key2_in_sel_0_wd;
+  logic com_sel_ctl_0_key2_in_sel_0_busy;
   logic com_sel_ctl_0_pwrb_in_sel_0_qs;
   logic com_sel_ctl_0_pwrb_in_sel_0_wd;
+  logic com_sel_ctl_0_pwrb_in_sel_0_busy;
   logic com_sel_ctl_0_ac_present_sel_0_qs;
   logic com_sel_ctl_0_ac_present_sel_0_wd;
+  logic com_sel_ctl_0_ac_present_sel_0_busy;
   logic com_sel_ctl_1_we;
   logic com_sel_ctl_1_key0_in_sel_1_qs;
   logic com_sel_ctl_1_key0_in_sel_1_wd;
+  logic com_sel_ctl_1_key0_in_sel_1_busy;
   logic com_sel_ctl_1_key1_in_sel_1_qs;
   logic com_sel_ctl_1_key1_in_sel_1_wd;
+  logic com_sel_ctl_1_key1_in_sel_1_busy;
   logic com_sel_ctl_1_key2_in_sel_1_qs;
   logic com_sel_ctl_1_key2_in_sel_1_wd;
+  logic com_sel_ctl_1_key2_in_sel_1_busy;
   logic com_sel_ctl_1_pwrb_in_sel_1_qs;
   logic com_sel_ctl_1_pwrb_in_sel_1_wd;
+  logic com_sel_ctl_1_pwrb_in_sel_1_busy;
   logic com_sel_ctl_1_ac_present_sel_1_qs;
   logic com_sel_ctl_1_ac_present_sel_1_wd;
+  logic com_sel_ctl_1_ac_present_sel_1_busy;
   logic com_sel_ctl_2_we;
   logic com_sel_ctl_2_key0_in_sel_2_qs;
   logic com_sel_ctl_2_key0_in_sel_2_wd;
+  logic com_sel_ctl_2_key0_in_sel_2_busy;
   logic com_sel_ctl_2_key1_in_sel_2_qs;
   logic com_sel_ctl_2_key1_in_sel_2_wd;
+  logic com_sel_ctl_2_key1_in_sel_2_busy;
   logic com_sel_ctl_2_key2_in_sel_2_qs;
   logic com_sel_ctl_2_key2_in_sel_2_wd;
+  logic com_sel_ctl_2_key2_in_sel_2_busy;
   logic com_sel_ctl_2_pwrb_in_sel_2_qs;
   logic com_sel_ctl_2_pwrb_in_sel_2_wd;
+  logic com_sel_ctl_2_pwrb_in_sel_2_busy;
   logic com_sel_ctl_2_ac_present_sel_2_qs;
   logic com_sel_ctl_2_ac_present_sel_2_wd;
+  logic com_sel_ctl_2_ac_present_sel_2_busy;
   logic com_sel_ctl_3_we;
   logic com_sel_ctl_3_key0_in_sel_3_qs;
   logic com_sel_ctl_3_key0_in_sel_3_wd;
+  logic com_sel_ctl_3_key0_in_sel_3_busy;
   logic com_sel_ctl_3_key1_in_sel_3_qs;
   logic com_sel_ctl_3_key1_in_sel_3_wd;
+  logic com_sel_ctl_3_key1_in_sel_3_busy;
   logic com_sel_ctl_3_key2_in_sel_3_qs;
   logic com_sel_ctl_3_key2_in_sel_3_wd;
+  logic com_sel_ctl_3_key2_in_sel_3_busy;
   logic com_sel_ctl_3_pwrb_in_sel_3_qs;
   logic com_sel_ctl_3_pwrb_in_sel_3_wd;
+  logic com_sel_ctl_3_pwrb_in_sel_3_busy;
   logic com_sel_ctl_3_ac_present_sel_3_qs;
   logic com_sel_ctl_3_ac_present_sel_3_wd;
+  logic com_sel_ctl_3_ac_present_sel_3_busy;
   logic com_det_ctl_0_we;
   logic [31:0] com_det_ctl_0_qs;
   logic [31:0] com_det_ctl_0_wd;
+  logic com_det_ctl_0_busy;
   logic com_det_ctl_1_we;
   logic [31:0] com_det_ctl_1_qs;
   logic [31:0] com_det_ctl_1_wd;
+  logic com_det_ctl_1_busy;
   logic com_det_ctl_2_we;
   logic [31:0] com_det_ctl_2_qs;
   logic [31:0] com_det_ctl_2_wd;
+  logic com_det_ctl_2_busy;
   logic com_det_ctl_3_we;
   logic [31:0] com_det_ctl_3_qs;
   logic [31:0] com_det_ctl_3_wd;
+  logic com_det_ctl_3_busy;
   logic com_out_ctl_0_we;
   logic com_out_ctl_0_bat_disable_0_qs;
   logic com_out_ctl_0_bat_disable_0_wd;
+  logic com_out_ctl_0_bat_disable_0_busy;
   logic com_out_ctl_0_interrupt_0_qs;
   logic com_out_ctl_0_interrupt_0_wd;
+  logic com_out_ctl_0_interrupt_0_busy;
   logic com_out_ctl_0_ec_rst_0_qs;
   logic com_out_ctl_0_ec_rst_0_wd;
+  logic com_out_ctl_0_ec_rst_0_busy;
   logic com_out_ctl_0_gsc_rst_0_qs;
   logic com_out_ctl_0_gsc_rst_0_wd;
+  logic com_out_ctl_0_gsc_rst_0_busy;
   logic com_out_ctl_1_we;
   logic com_out_ctl_1_bat_disable_1_qs;
   logic com_out_ctl_1_bat_disable_1_wd;
+  logic com_out_ctl_1_bat_disable_1_busy;
   logic com_out_ctl_1_interrupt_1_qs;
   logic com_out_ctl_1_interrupt_1_wd;
+  logic com_out_ctl_1_interrupt_1_busy;
   logic com_out_ctl_1_ec_rst_1_qs;
   logic com_out_ctl_1_ec_rst_1_wd;
+  logic com_out_ctl_1_ec_rst_1_busy;
   logic com_out_ctl_1_gsc_rst_1_qs;
   logic com_out_ctl_1_gsc_rst_1_wd;
+  logic com_out_ctl_1_gsc_rst_1_busy;
   logic com_out_ctl_2_we;
   logic com_out_ctl_2_bat_disable_2_qs;
   logic com_out_ctl_2_bat_disable_2_wd;
+  logic com_out_ctl_2_bat_disable_2_busy;
   logic com_out_ctl_2_interrupt_2_qs;
   logic com_out_ctl_2_interrupt_2_wd;
+  logic com_out_ctl_2_interrupt_2_busy;
   logic com_out_ctl_2_ec_rst_2_qs;
   logic com_out_ctl_2_ec_rst_2_wd;
+  logic com_out_ctl_2_ec_rst_2_busy;
   logic com_out_ctl_2_gsc_rst_2_qs;
   logic com_out_ctl_2_gsc_rst_2_wd;
+  logic com_out_ctl_2_gsc_rst_2_busy;
   logic com_out_ctl_3_we;
   logic com_out_ctl_3_bat_disable_3_qs;
   logic com_out_ctl_3_bat_disable_3_wd;
+  logic com_out_ctl_3_bat_disable_3_busy;
   logic com_out_ctl_3_interrupt_3_qs;
   logic com_out_ctl_3_interrupt_3_wd;
+  logic com_out_ctl_3_interrupt_3_busy;
   logic com_out_ctl_3_ec_rst_3_qs;
   logic com_out_ctl_3_ec_rst_3_wd;
+  logic com_out_ctl_3_ec_rst_3_busy;
   logic com_out_ctl_3_gsc_rst_3_qs;
   logic com_out_ctl_3_gsc_rst_3_wd;
+  logic com_out_ctl_3_gsc_rst_3_busy;
   logic combo_intr_status_we;
   logic combo_intr_status_combo0_h2l_qs;
   logic combo_intr_status_combo0_h2l_wd;
@@ -523,163 +641,139 @@
 
   // R[ec_rst_ctl]: V(False)
 
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (16),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (16'h7d0)
   ) u_ec_rst_ctl (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (ec_rst_ctl_we & regwen_qs),
-    .wd     (ec_rst_ctl_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (reg2hw.ec_rst_ctl.qe),
-    .q      (reg2hw.ec_rst_ctl.q),
-
-    // to register interface (read)
-    .qs     (ec_rst_ctl_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (ec_rst_ctl_we & regwen_qs),
+    .src_wd_i     (ec_rst_ctl_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (ec_rst_ctl_busy),
+    .src_qs_o     (ec_rst_ctl_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.ec_rst_ctl.q)
   );
 
 
   // R[ulp_ac_debounce_ctl]: V(False)
 
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (16),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (16'h1f40)
   ) u_ulp_ac_debounce_ctl (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (ulp_ac_debounce_ctl_we & regwen_qs),
-    .wd     (ulp_ac_debounce_ctl_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (reg2hw.ulp_ac_debounce_ctl.qe),
-    .q      (reg2hw.ulp_ac_debounce_ctl.q),
-
-    // to register interface (read)
-    .qs     (ulp_ac_debounce_ctl_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (ulp_ac_debounce_ctl_we & regwen_qs),
+    .src_wd_i     (ulp_ac_debounce_ctl_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (ulp_ac_debounce_ctl_busy),
+    .src_qs_o     (ulp_ac_debounce_ctl_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.ulp_ac_debounce_ctl.q)
   );
 
 
   // R[ulp_lid_debounce_ctl]: V(False)
 
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (16),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (16'h1f40)
   ) u_ulp_lid_debounce_ctl (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (ulp_lid_debounce_ctl_we & regwen_qs),
-    .wd     (ulp_lid_debounce_ctl_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (reg2hw.ulp_lid_debounce_ctl.qe),
-    .q      (reg2hw.ulp_lid_debounce_ctl.q),
-
-    // to register interface (read)
-    .qs     (ulp_lid_debounce_ctl_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (ulp_lid_debounce_ctl_we & regwen_qs),
+    .src_wd_i     (ulp_lid_debounce_ctl_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (ulp_lid_debounce_ctl_busy),
+    .src_qs_o     (ulp_lid_debounce_ctl_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.ulp_lid_debounce_ctl.q)
   );
 
 
   // R[ulp_pwrb_debounce_ctl]: V(False)
 
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (16),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (16'h1f40)
   ) u_ulp_pwrb_debounce_ctl (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (ulp_pwrb_debounce_ctl_we & regwen_qs),
-    .wd     (ulp_pwrb_debounce_ctl_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (reg2hw.ulp_pwrb_debounce_ctl.qe),
-    .q      (reg2hw.ulp_pwrb_debounce_ctl.q),
-
-    // to register interface (read)
-    .qs     (ulp_pwrb_debounce_ctl_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (ulp_pwrb_debounce_ctl_we & regwen_qs),
+    .src_wd_i     (ulp_pwrb_debounce_ctl_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (ulp_pwrb_debounce_ctl_busy),
+    .src_qs_o     (ulp_pwrb_debounce_ctl_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.ulp_pwrb_debounce_ctl.q)
   );
 
 
   // R[ulp_ctl]: V(False)
 
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_ulp_ctl (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (ulp_ctl_we),
-    .wd     (ulp_ctl_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.ulp_ctl.q),
-
-    // to register interface (read)
-    .qs     (ulp_ctl_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (ulp_ctl_we),
+    .src_wd_i     (ulp_ctl_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (ulp_ctl_busy),
+    .src_qs_o     (ulp_ctl_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.ulp_ctl.q)
   );
 
 
   // R[ulp_status]: V(False)
 
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessW1C),
     .RESVAL  (1'h0)
   ) u_ulp_status (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (ulp_status_we),
-    .wd     (ulp_status_wd),
-
-    // from internal hardware
-    .de     (hw2reg.ulp_status.de),
-    .d      (hw2reg.ulp_status.d),
-
-    // to internal hardware
-    .qe     (),
-    .q      (),
-
-    // to register interface (read)
-    .qs     (ulp_status_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (ulp_status_we),
+    .src_wd_i     (ulp_status_wd),
+    .dst_de_i     (hw2reg.ulp_status.de),
+    .dst_d_i      (hw2reg.ulp_status.d),
+    .src_busy_o   (ulp_status_busy),
+    .src_qs_o     (ulp_status_qs),
+    .dst_qe_o     (),
+    .q            ()
   );
 
 
@@ -713,1048 +807,888 @@
   // R[key_invert_ctl]: V(False)
 
   //   F[key0_in]: 0:0
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_invert_ctl_key0_in (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_invert_ctl_we & regwen_qs),
-    .wd     (key_invert_ctl_key0_in_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_invert_ctl.key0_in.q),
-
-    // to register interface (read)
-    .qs     (key_invert_ctl_key0_in_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_invert_ctl_we & regwen_qs),
+    .src_wd_i     (key_invert_ctl_key0_in_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_invert_ctl_key0_in_busy),
+    .src_qs_o     (key_invert_ctl_key0_in_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_invert_ctl.key0_in.q)
   );
 
 
   //   F[key0_out]: 1:1
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_invert_ctl_key0_out (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_invert_ctl_we & regwen_qs),
-    .wd     (key_invert_ctl_key0_out_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_invert_ctl.key0_out.q),
-
-    // to register interface (read)
-    .qs     (key_invert_ctl_key0_out_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_invert_ctl_we & regwen_qs),
+    .src_wd_i     (key_invert_ctl_key0_out_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_invert_ctl_key0_out_busy),
+    .src_qs_o     (key_invert_ctl_key0_out_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_invert_ctl.key0_out.q)
   );
 
 
   //   F[key1_in]: 2:2
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_invert_ctl_key1_in (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_invert_ctl_we & regwen_qs),
-    .wd     (key_invert_ctl_key1_in_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_invert_ctl.key1_in.q),
-
-    // to register interface (read)
-    .qs     (key_invert_ctl_key1_in_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_invert_ctl_we & regwen_qs),
+    .src_wd_i     (key_invert_ctl_key1_in_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_invert_ctl_key1_in_busy),
+    .src_qs_o     (key_invert_ctl_key1_in_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_invert_ctl.key1_in.q)
   );
 
 
   //   F[key1_out]: 3:3
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_invert_ctl_key1_out (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_invert_ctl_we & regwen_qs),
-    .wd     (key_invert_ctl_key1_out_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_invert_ctl.key1_out.q),
-
-    // to register interface (read)
-    .qs     (key_invert_ctl_key1_out_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_invert_ctl_we & regwen_qs),
+    .src_wd_i     (key_invert_ctl_key1_out_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_invert_ctl_key1_out_busy),
+    .src_qs_o     (key_invert_ctl_key1_out_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_invert_ctl.key1_out.q)
   );
 
 
   //   F[key2_in]: 4:4
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_invert_ctl_key2_in (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_invert_ctl_we & regwen_qs),
-    .wd     (key_invert_ctl_key2_in_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_invert_ctl.key2_in.q),
-
-    // to register interface (read)
-    .qs     (key_invert_ctl_key2_in_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_invert_ctl_we & regwen_qs),
+    .src_wd_i     (key_invert_ctl_key2_in_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_invert_ctl_key2_in_busy),
+    .src_qs_o     (key_invert_ctl_key2_in_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_invert_ctl.key2_in.q)
   );
 
 
   //   F[key2_out]: 5:5
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_invert_ctl_key2_out (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_invert_ctl_we & regwen_qs),
-    .wd     (key_invert_ctl_key2_out_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_invert_ctl.key2_out.q),
-
-    // to register interface (read)
-    .qs     (key_invert_ctl_key2_out_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_invert_ctl_we & regwen_qs),
+    .src_wd_i     (key_invert_ctl_key2_out_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_invert_ctl_key2_out_busy),
+    .src_qs_o     (key_invert_ctl_key2_out_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_invert_ctl.key2_out.q)
   );
 
 
   //   F[pwrb_in]: 6:6
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_invert_ctl_pwrb_in (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_invert_ctl_we & regwen_qs),
-    .wd     (key_invert_ctl_pwrb_in_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_invert_ctl.pwrb_in.q),
-
-    // to register interface (read)
-    .qs     (key_invert_ctl_pwrb_in_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_invert_ctl_we & regwen_qs),
+    .src_wd_i     (key_invert_ctl_pwrb_in_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_invert_ctl_pwrb_in_busy),
+    .src_qs_o     (key_invert_ctl_pwrb_in_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_invert_ctl.pwrb_in.q)
   );
 
 
   //   F[pwrb_out]: 7:7
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_invert_ctl_pwrb_out (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_invert_ctl_we & regwen_qs),
-    .wd     (key_invert_ctl_pwrb_out_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_invert_ctl.pwrb_out.q),
-
-    // to register interface (read)
-    .qs     (key_invert_ctl_pwrb_out_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_invert_ctl_we & regwen_qs),
+    .src_wd_i     (key_invert_ctl_pwrb_out_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_invert_ctl_pwrb_out_busy),
+    .src_qs_o     (key_invert_ctl_pwrb_out_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_invert_ctl.pwrb_out.q)
   );
 
 
   //   F[ac_present]: 8:8
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_invert_ctl_ac_present (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_invert_ctl_we & regwen_qs),
-    .wd     (key_invert_ctl_ac_present_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_invert_ctl.ac_present.q),
-
-    // to register interface (read)
-    .qs     (key_invert_ctl_ac_present_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_invert_ctl_we & regwen_qs),
+    .src_wd_i     (key_invert_ctl_ac_present_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_invert_ctl_ac_present_busy),
+    .src_qs_o     (key_invert_ctl_ac_present_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_invert_ctl.ac_present.q)
   );
 
 
   //   F[bat_disable]: 9:9
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_invert_ctl_bat_disable (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_invert_ctl_we & regwen_qs),
-    .wd     (key_invert_ctl_bat_disable_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_invert_ctl.bat_disable.q),
-
-    // to register interface (read)
-    .qs     (key_invert_ctl_bat_disable_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_invert_ctl_we & regwen_qs),
+    .src_wd_i     (key_invert_ctl_bat_disable_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_invert_ctl_bat_disable_busy),
+    .src_qs_o     (key_invert_ctl_bat_disable_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_invert_ctl.bat_disable.q)
   );
 
 
   //   F[lid_open]: 10:10
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_invert_ctl_lid_open (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_invert_ctl_we & regwen_qs),
-    .wd     (key_invert_ctl_lid_open_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_invert_ctl.lid_open.q),
-
-    // to register interface (read)
-    .qs     (key_invert_ctl_lid_open_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_invert_ctl_we & regwen_qs),
+    .src_wd_i     (key_invert_ctl_lid_open_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_invert_ctl_lid_open_busy),
+    .src_qs_o     (key_invert_ctl_lid_open_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_invert_ctl.lid_open.q)
   );
 
 
   //   F[z3_wakeup]: 11:11
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_invert_ctl_z3_wakeup (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_invert_ctl_we & regwen_qs),
-    .wd     (key_invert_ctl_z3_wakeup_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_invert_ctl.z3_wakeup.q),
-
-    // to register interface (read)
-    .qs     (key_invert_ctl_z3_wakeup_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_invert_ctl_we & regwen_qs),
+    .src_wd_i     (key_invert_ctl_z3_wakeup_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_invert_ctl_z3_wakeup_busy),
+    .src_qs_o     (key_invert_ctl_z3_wakeup_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_invert_ctl.z3_wakeup.q)
   );
 
 
   // R[pin_allowed_ctl]: V(False)
 
   //   F[bat_disable_0]: 0:0
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_allowed_ctl_bat_disable_0 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_allowed_ctl_we & regwen_qs),
-    .wd     (pin_allowed_ctl_bat_disable_0_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_allowed_ctl.bat_disable_0.q),
-
-    // to register interface (read)
-    .qs     (pin_allowed_ctl_bat_disable_0_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_allowed_ctl_we & regwen_qs),
+    .src_wd_i     (pin_allowed_ctl_bat_disable_0_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_allowed_ctl_bat_disable_0_busy),
+    .src_qs_o     (pin_allowed_ctl_bat_disable_0_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_allowed_ctl.bat_disable_0.q)
   );
 
 
   //   F[ec_rst_l_0]: 1:1
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h1)
   ) u_pin_allowed_ctl_ec_rst_l_0 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_allowed_ctl_we & regwen_qs),
-    .wd     (pin_allowed_ctl_ec_rst_l_0_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_allowed_ctl.ec_rst_l_0.q),
-
-    // to register interface (read)
-    .qs     (pin_allowed_ctl_ec_rst_l_0_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_allowed_ctl_we & regwen_qs),
+    .src_wd_i     (pin_allowed_ctl_ec_rst_l_0_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_allowed_ctl_ec_rst_l_0_busy),
+    .src_qs_o     (pin_allowed_ctl_ec_rst_l_0_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_allowed_ctl.ec_rst_l_0.q)
   );
 
 
   //   F[pwrb_out_0]: 2:2
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_allowed_ctl_pwrb_out_0 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_allowed_ctl_we & regwen_qs),
-    .wd     (pin_allowed_ctl_pwrb_out_0_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_allowed_ctl.pwrb_out_0.q),
-
-    // to register interface (read)
-    .qs     (pin_allowed_ctl_pwrb_out_0_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_allowed_ctl_we & regwen_qs),
+    .src_wd_i     (pin_allowed_ctl_pwrb_out_0_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_allowed_ctl_pwrb_out_0_busy),
+    .src_qs_o     (pin_allowed_ctl_pwrb_out_0_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_allowed_ctl.pwrb_out_0.q)
   );
 
 
   //   F[key0_out_0]: 3:3
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_allowed_ctl_key0_out_0 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_allowed_ctl_we & regwen_qs),
-    .wd     (pin_allowed_ctl_key0_out_0_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_allowed_ctl.key0_out_0.q),
-
-    // to register interface (read)
-    .qs     (pin_allowed_ctl_key0_out_0_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_allowed_ctl_we & regwen_qs),
+    .src_wd_i     (pin_allowed_ctl_key0_out_0_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_allowed_ctl_key0_out_0_busy),
+    .src_qs_o     (pin_allowed_ctl_key0_out_0_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_allowed_ctl.key0_out_0.q)
   );
 
 
   //   F[key1_out_0]: 4:4
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_allowed_ctl_key1_out_0 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_allowed_ctl_we & regwen_qs),
-    .wd     (pin_allowed_ctl_key1_out_0_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_allowed_ctl.key1_out_0.q),
-
-    // to register interface (read)
-    .qs     (pin_allowed_ctl_key1_out_0_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_allowed_ctl_we & regwen_qs),
+    .src_wd_i     (pin_allowed_ctl_key1_out_0_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_allowed_ctl_key1_out_0_busy),
+    .src_qs_o     (pin_allowed_ctl_key1_out_0_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_allowed_ctl.key1_out_0.q)
   );
 
 
   //   F[key2_out_0]: 5:5
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_allowed_ctl_key2_out_0 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_allowed_ctl_we & regwen_qs),
-    .wd     (pin_allowed_ctl_key2_out_0_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_allowed_ctl.key2_out_0.q),
-
-    // to register interface (read)
-    .qs     (pin_allowed_ctl_key2_out_0_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_allowed_ctl_we & regwen_qs),
+    .src_wd_i     (pin_allowed_ctl_key2_out_0_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_allowed_ctl_key2_out_0_busy),
+    .src_qs_o     (pin_allowed_ctl_key2_out_0_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_allowed_ctl.key2_out_0.q)
   );
 
 
   //   F[z3_wakeup_0]: 6:6
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_allowed_ctl_z3_wakeup_0 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_allowed_ctl_we & regwen_qs),
-    .wd     (pin_allowed_ctl_z3_wakeup_0_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_allowed_ctl.z3_wakeup_0.q),
-
-    // to register interface (read)
-    .qs     (pin_allowed_ctl_z3_wakeup_0_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_allowed_ctl_we & regwen_qs),
+    .src_wd_i     (pin_allowed_ctl_z3_wakeup_0_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_allowed_ctl_z3_wakeup_0_busy),
+    .src_qs_o     (pin_allowed_ctl_z3_wakeup_0_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_allowed_ctl.z3_wakeup_0.q)
   );
 
 
   //   F[bat_disable_1]: 7:7
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_allowed_ctl_bat_disable_1 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_allowed_ctl_we & regwen_qs),
-    .wd     (pin_allowed_ctl_bat_disable_1_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_allowed_ctl.bat_disable_1.q),
-
-    // to register interface (read)
-    .qs     (pin_allowed_ctl_bat_disable_1_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_allowed_ctl_we & regwen_qs),
+    .src_wd_i     (pin_allowed_ctl_bat_disable_1_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_allowed_ctl_bat_disable_1_busy),
+    .src_qs_o     (pin_allowed_ctl_bat_disable_1_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_allowed_ctl.bat_disable_1.q)
   );
 
 
   //   F[ec_rst_l_1]: 8:8
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_allowed_ctl_ec_rst_l_1 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_allowed_ctl_we & regwen_qs),
-    .wd     (pin_allowed_ctl_ec_rst_l_1_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_allowed_ctl.ec_rst_l_1.q),
-
-    // to register interface (read)
-    .qs     (pin_allowed_ctl_ec_rst_l_1_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_allowed_ctl_we & regwen_qs),
+    .src_wd_i     (pin_allowed_ctl_ec_rst_l_1_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_allowed_ctl_ec_rst_l_1_busy),
+    .src_qs_o     (pin_allowed_ctl_ec_rst_l_1_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_allowed_ctl.ec_rst_l_1.q)
   );
 
 
   //   F[pwrb_out_1]: 9:9
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_allowed_ctl_pwrb_out_1 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_allowed_ctl_we & regwen_qs),
-    .wd     (pin_allowed_ctl_pwrb_out_1_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_allowed_ctl.pwrb_out_1.q),
-
-    // to register interface (read)
-    .qs     (pin_allowed_ctl_pwrb_out_1_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_allowed_ctl_we & regwen_qs),
+    .src_wd_i     (pin_allowed_ctl_pwrb_out_1_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_allowed_ctl_pwrb_out_1_busy),
+    .src_qs_o     (pin_allowed_ctl_pwrb_out_1_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_allowed_ctl.pwrb_out_1.q)
   );
 
 
   //   F[key0_out_1]: 10:10
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_allowed_ctl_key0_out_1 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_allowed_ctl_we & regwen_qs),
-    .wd     (pin_allowed_ctl_key0_out_1_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_allowed_ctl.key0_out_1.q),
-
-    // to register interface (read)
-    .qs     (pin_allowed_ctl_key0_out_1_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_allowed_ctl_we & regwen_qs),
+    .src_wd_i     (pin_allowed_ctl_key0_out_1_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_allowed_ctl_key0_out_1_busy),
+    .src_qs_o     (pin_allowed_ctl_key0_out_1_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_allowed_ctl.key0_out_1.q)
   );
 
 
   //   F[key1_out_1]: 11:11
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_allowed_ctl_key1_out_1 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_allowed_ctl_we & regwen_qs),
-    .wd     (pin_allowed_ctl_key1_out_1_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_allowed_ctl.key1_out_1.q),
-
-    // to register interface (read)
-    .qs     (pin_allowed_ctl_key1_out_1_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_allowed_ctl_we & regwen_qs),
+    .src_wd_i     (pin_allowed_ctl_key1_out_1_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_allowed_ctl_key1_out_1_busy),
+    .src_qs_o     (pin_allowed_ctl_key1_out_1_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_allowed_ctl.key1_out_1.q)
   );
 
 
   //   F[key2_out_1]: 12:12
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_allowed_ctl_key2_out_1 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_allowed_ctl_we & regwen_qs),
-    .wd     (pin_allowed_ctl_key2_out_1_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_allowed_ctl.key2_out_1.q),
-
-    // to register interface (read)
-    .qs     (pin_allowed_ctl_key2_out_1_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_allowed_ctl_we & regwen_qs),
+    .src_wd_i     (pin_allowed_ctl_key2_out_1_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_allowed_ctl_key2_out_1_busy),
+    .src_qs_o     (pin_allowed_ctl_key2_out_1_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_allowed_ctl.key2_out_1.q)
   );
 
 
   //   F[z3_wakeup_1]: 13:13
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_allowed_ctl_z3_wakeup_1 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_allowed_ctl_we & regwen_qs),
-    .wd     (pin_allowed_ctl_z3_wakeup_1_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_allowed_ctl.z3_wakeup_1.q),
-
-    // to register interface (read)
-    .qs     (pin_allowed_ctl_z3_wakeup_1_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_allowed_ctl_we & regwen_qs),
+    .src_wd_i     (pin_allowed_ctl_z3_wakeup_1_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_allowed_ctl_z3_wakeup_1_busy),
+    .src_qs_o     (pin_allowed_ctl_z3_wakeup_1_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_allowed_ctl.z3_wakeup_1.q)
   );
 
 
   // R[pin_out_ctl]: V(False)
 
   //   F[bat_disable]: 0:0
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_out_ctl_bat_disable (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_out_ctl_we),
-    .wd     (pin_out_ctl_bat_disable_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_out_ctl.bat_disable.q),
-
-    // to register interface (read)
-    .qs     (pin_out_ctl_bat_disable_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_out_ctl_we),
+    .src_wd_i     (pin_out_ctl_bat_disable_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_out_ctl_bat_disable_busy),
+    .src_qs_o     (pin_out_ctl_bat_disable_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_out_ctl.bat_disable.q)
   );
 
 
   //   F[ec_rst_l]: 1:1
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h1)
   ) u_pin_out_ctl_ec_rst_l (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_out_ctl_we),
-    .wd     (pin_out_ctl_ec_rst_l_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_out_ctl.ec_rst_l.q),
-
-    // to register interface (read)
-    .qs     (pin_out_ctl_ec_rst_l_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_out_ctl_we),
+    .src_wd_i     (pin_out_ctl_ec_rst_l_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_out_ctl_ec_rst_l_busy),
+    .src_qs_o     (pin_out_ctl_ec_rst_l_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_out_ctl.ec_rst_l.q)
   );
 
 
   //   F[pwrb_out]: 2:2
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_out_ctl_pwrb_out (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_out_ctl_we),
-    .wd     (pin_out_ctl_pwrb_out_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_out_ctl.pwrb_out.q),
-
-    // to register interface (read)
-    .qs     (pin_out_ctl_pwrb_out_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_out_ctl_we),
+    .src_wd_i     (pin_out_ctl_pwrb_out_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_out_ctl_pwrb_out_busy),
+    .src_qs_o     (pin_out_ctl_pwrb_out_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_out_ctl.pwrb_out.q)
   );
 
 
   //   F[key0_out]: 3:3
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_out_ctl_key0_out (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_out_ctl_we),
-    .wd     (pin_out_ctl_key0_out_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_out_ctl.key0_out.q),
-
-    // to register interface (read)
-    .qs     (pin_out_ctl_key0_out_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_out_ctl_we),
+    .src_wd_i     (pin_out_ctl_key0_out_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_out_ctl_key0_out_busy),
+    .src_qs_o     (pin_out_ctl_key0_out_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_out_ctl.key0_out.q)
   );
 
 
   //   F[key1_out]: 4:4
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_out_ctl_key1_out (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_out_ctl_we),
-    .wd     (pin_out_ctl_key1_out_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_out_ctl.key1_out.q),
-
-    // to register interface (read)
-    .qs     (pin_out_ctl_key1_out_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_out_ctl_we),
+    .src_wd_i     (pin_out_ctl_key1_out_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_out_ctl_key1_out_busy),
+    .src_qs_o     (pin_out_ctl_key1_out_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_out_ctl.key1_out.q)
   );
 
 
   //   F[key2_out]: 5:5
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_out_ctl_key2_out (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_out_ctl_we),
-    .wd     (pin_out_ctl_key2_out_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_out_ctl.key2_out.q),
-
-    // to register interface (read)
-    .qs     (pin_out_ctl_key2_out_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_out_ctl_we),
+    .src_wd_i     (pin_out_ctl_key2_out_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_out_ctl_key2_out_busy),
+    .src_qs_o     (pin_out_ctl_key2_out_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_out_ctl.key2_out.q)
   );
 
 
   //   F[z3_wakeup]: 6:6
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_out_ctl_z3_wakeup (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_out_ctl_we),
-    .wd     (pin_out_ctl_z3_wakeup_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_out_ctl.z3_wakeup.q),
-
-    // to register interface (read)
-    .qs     (pin_out_ctl_z3_wakeup_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_out_ctl_we),
+    .src_wd_i     (pin_out_ctl_z3_wakeup_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_out_ctl_z3_wakeup_busy),
+    .src_qs_o     (pin_out_ctl_z3_wakeup_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_out_ctl.z3_wakeup.q)
   );
 
 
   // R[pin_out_value]: V(False)
 
   //   F[bat_disable]: 0:0
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_out_value_bat_disable (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_out_value_we),
-    .wd     (pin_out_value_bat_disable_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_out_value.bat_disable.q),
-
-    // to register interface (read)
-    .qs     (pin_out_value_bat_disable_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_out_value_we),
+    .src_wd_i     (pin_out_value_bat_disable_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_out_value_bat_disable_busy),
+    .src_qs_o     (pin_out_value_bat_disable_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_out_value.bat_disable.q)
   );
 
 
   //   F[ec_rst_l]: 1:1
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_out_value_ec_rst_l (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_out_value_we),
-    .wd     (pin_out_value_ec_rst_l_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_out_value.ec_rst_l.q),
-
-    // to register interface (read)
-    .qs     (pin_out_value_ec_rst_l_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_out_value_we),
+    .src_wd_i     (pin_out_value_ec_rst_l_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_out_value_ec_rst_l_busy),
+    .src_qs_o     (pin_out_value_ec_rst_l_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_out_value.ec_rst_l.q)
   );
 
 
   //   F[pwrb_out]: 2:2
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_out_value_pwrb_out (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_out_value_we),
-    .wd     (pin_out_value_pwrb_out_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_out_value.pwrb_out.q),
-
-    // to register interface (read)
-    .qs     (pin_out_value_pwrb_out_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_out_value_we),
+    .src_wd_i     (pin_out_value_pwrb_out_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_out_value_pwrb_out_busy),
+    .src_qs_o     (pin_out_value_pwrb_out_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_out_value.pwrb_out.q)
   );
 
 
   //   F[key0_out]: 3:3
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_out_value_key0_out (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_out_value_we),
-    .wd     (pin_out_value_key0_out_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_out_value.key0_out.q),
-
-    // to register interface (read)
-    .qs     (pin_out_value_key0_out_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_out_value_we),
+    .src_wd_i     (pin_out_value_key0_out_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_out_value_key0_out_busy),
+    .src_qs_o     (pin_out_value_key0_out_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_out_value.key0_out.q)
   );
 
 
   //   F[key1_out]: 4:4
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_out_value_key1_out (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_out_value_we),
-    .wd     (pin_out_value_key1_out_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_out_value.key1_out.q),
-
-    // to register interface (read)
-    .qs     (pin_out_value_key1_out_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_out_value_we),
+    .src_wd_i     (pin_out_value_key1_out_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_out_value_key1_out_busy),
+    .src_qs_o     (pin_out_value_key1_out_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_out_value.key1_out.q)
   );
 
 
   //   F[key2_out]: 5:5
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_out_value_key2_out (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_out_value_we),
-    .wd     (pin_out_value_key2_out_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_out_value.key2_out.q),
-
-    // to register interface (read)
-    .qs     (pin_out_value_key2_out_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_out_value_we),
+    .src_wd_i     (pin_out_value_key2_out_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_out_value_key2_out_busy),
+    .src_qs_o     (pin_out_value_key2_out_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_out_value.key2_out.q)
   );
 
 
   //   F[z3_wakeup]: 6:6
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_pin_out_value_z3_wakeup (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (pin_out_value_we),
-    .wd     (pin_out_value_z3_wakeup_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.pin_out_value.z3_wakeup.q),
-
-    // to register interface (read)
-    .qs     (pin_out_value_z3_wakeup_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (pin_out_value_we),
+    .src_wd_i     (pin_out_value_z3_wakeup_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (pin_out_value_z3_wakeup_busy),
+    .src_qs_o     (pin_out_value_z3_wakeup_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.pin_out_value.z3_wakeup.q)
   );
 
 
@@ -1945,553 +1879,469 @@
   // R[key_intr_ctl]: V(False)
 
   //   F[pwrb_in_h2l]: 0:0
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_intr_ctl_pwrb_in_h2l (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_intr_ctl_we & regwen_qs),
-    .wd     (key_intr_ctl_pwrb_in_h2l_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_intr_ctl.pwrb_in_h2l.q),
-
-    // to register interface (read)
-    .qs     (key_intr_ctl_pwrb_in_h2l_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_intr_ctl_we & regwen_qs),
+    .src_wd_i     (key_intr_ctl_pwrb_in_h2l_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_intr_ctl_pwrb_in_h2l_busy),
+    .src_qs_o     (key_intr_ctl_pwrb_in_h2l_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_intr_ctl.pwrb_in_h2l.q)
   );
 
 
   //   F[key0_in_h2l]: 1:1
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_intr_ctl_key0_in_h2l (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_intr_ctl_we & regwen_qs),
-    .wd     (key_intr_ctl_key0_in_h2l_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_intr_ctl.key0_in_h2l.q),
-
-    // to register interface (read)
-    .qs     (key_intr_ctl_key0_in_h2l_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_intr_ctl_we & regwen_qs),
+    .src_wd_i     (key_intr_ctl_key0_in_h2l_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_intr_ctl_key0_in_h2l_busy),
+    .src_qs_o     (key_intr_ctl_key0_in_h2l_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_intr_ctl.key0_in_h2l.q)
   );
 
 
   //   F[key1_in_h2l]: 2:2
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_intr_ctl_key1_in_h2l (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_intr_ctl_we & regwen_qs),
-    .wd     (key_intr_ctl_key1_in_h2l_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_intr_ctl.key1_in_h2l.q),
-
-    // to register interface (read)
-    .qs     (key_intr_ctl_key1_in_h2l_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_intr_ctl_we & regwen_qs),
+    .src_wd_i     (key_intr_ctl_key1_in_h2l_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_intr_ctl_key1_in_h2l_busy),
+    .src_qs_o     (key_intr_ctl_key1_in_h2l_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_intr_ctl.key1_in_h2l.q)
   );
 
 
   //   F[key2_in_h2l]: 3:3
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_intr_ctl_key2_in_h2l (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_intr_ctl_we & regwen_qs),
-    .wd     (key_intr_ctl_key2_in_h2l_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_intr_ctl.key2_in_h2l.q),
-
-    // to register interface (read)
-    .qs     (key_intr_ctl_key2_in_h2l_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_intr_ctl_we & regwen_qs),
+    .src_wd_i     (key_intr_ctl_key2_in_h2l_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_intr_ctl_key2_in_h2l_busy),
+    .src_qs_o     (key_intr_ctl_key2_in_h2l_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_intr_ctl.key2_in_h2l.q)
   );
 
 
   //   F[ac_present_h2l]: 4:4
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_intr_ctl_ac_present_h2l (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_intr_ctl_we & regwen_qs),
-    .wd     (key_intr_ctl_ac_present_h2l_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_intr_ctl.ac_present_h2l.q),
-
-    // to register interface (read)
-    .qs     (key_intr_ctl_ac_present_h2l_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_intr_ctl_we & regwen_qs),
+    .src_wd_i     (key_intr_ctl_ac_present_h2l_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_intr_ctl_ac_present_h2l_busy),
+    .src_qs_o     (key_intr_ctl_ac_present_h2l_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_intr_ctl.ac_present_h2l.q)
   );
 
 
   //   F[ec_rst_l_h2l]: 5:5
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_intr_ctl_ec_rst_l_h2l (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_intr_ctl_we & regwen_qs),
-    .wd     (key_intr_ctl_ec_rst_l_h2l_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_intr_ctl.ec_rst_l_h2l.q),
-
-    // to register interface (read)
-    .qs     (key_intr_ctl_ec_rst_l_h2l_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_intr_ctl_we & regwen_qs),
+    .src_wd_i     (key_intr_ctl_ec_rst_l_h2l_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_intr_ctl_ec_rst_l_h2l_busy),
+    .src_qs_o     (key_intr_ctl_ec_rst_l_h2l_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_intr_ctl.ec_rst_l_h2l.q)
   );
 
 
   //   F[pwrb_in_l2h]: 8:8
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_intr_ctl_pwrb_in_l2h (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_intr_ctl_we & regwen_qs),
-    .wd     (key_intr_ctl_pwrb_in_l2h_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_intr_ctl.pwrb_in_l2h.q),
-
-    // to register interface (read)
-    .qs     (key_intr_ctl_pwrb_in_l2h_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_intr_ctl_we & regwen_qs),
+    .src_wd_i     (key_intr_ctl_pwrb_in_l2h_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_intr_ctl_pwrb_in_l2h_busy),
+    .src_qs_o     (key_intr_ctl_pwrb_in_l2h_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_intr_ctl.pwrb_in_l2h.q)
   );
 
 
   //   F[key0_in_l2h]: 9:9
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_intr_ctl_key0_in_l2h (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_intr_ctl_we & regwen_qs),
-    .wd     (key_intr_ctl_key0_in_l2h_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_intr_ctl.key0_in_l2h.q),
-
-    // to register interface (read)
-    .qs     (key_intr_ctl_key0_in_l2h_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_intr_ctl_we & regwen_qs),
+    .src_wd_i     (key_intr_ctl_key0_in_l2h_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_intr_ctl_key0_in_l2h_busy),
+    .src_qs_o     (key_intr_ctl_key0_in_l2h_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_intr_ctl.key0_in_l2h.q)
   );
 
 
   //   F[key1_in_l2h]: 10:10
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_intr_ctl_key1_in_l2h (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_intr_ctl_we & regwen_qs),
-    .wd     (key_intr_ctl_key1_in_l2h_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_intr_ctl.key1_in_l2h.q),
-
-    // to register interface (read)
-    .qs     (key_intr_ctl_key1_in_l2h_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_intr_ctl_we & regwen_qs),
+    .src_wd_i     (key_intr_ctl_key1_in_l2h_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_intr_ctl_key1_in_l2h_busy),
+    .src_qs_o     (key_intr_ctl_key1_in_l2h_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_intr_ctl.key1_in_l2h.q)
   );
 
 
   //   F[key2_in_l2h]: 11:11
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_intr_ctl_key2_in_l2h (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_intr_ctl_we & regwen_qs),
-    .wd     (key_intr_ctl_key2_in_l2h_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_intr_ctl.key2_in_l2h.q),
-
-    // to register interface (read)
-    .qs     (key_intr_ctl_key2_in_l2h_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_intr_ctl_we & regwen_qs),
+    .src_wd_i     (key_intr_ctl_key2_in_l2h_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_intr_ctl_key2_in_l2h_busy),
+    .src_qs_o     (key_intr_ctl_key2_in_l2h_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_intr_ctl.key2_in_l2h.q)
   );
 
 
   //   F[ac_present_l2h]: 12:12
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_intr_ctl_ac_present_l2h (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_intr_ctl_we & regwen_qs),
-    .wd     (key_intr_ctl_ac_present_l2h_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_intr_ctl.ac_present_l2h.q),
-
-    // to register interface (read)
-    .qs     (key_intr_ctl_ac_present_l2h_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_intr_ctl_we & regwen_qs),
+    .src_wd_i     (key_intr_ctl_ac_present_l2h_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_intr_ctl_ac_present_l2h_busy),
+    .src_qs_o     (key_intr_ctl_ac_present_l2h_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_intr_ctl.ac_present_l2h.q)
   );
 
 
   //   F[ec_rst_l_l2h]: 13:13
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_key_intr_ctl_ec_rst_l_l2h (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_intr_ctl_we & regwen_qs),
-    .wd     (key_intr_ctl_ec_rst_l_l2h_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.key_intr_ctl.ec_rst_l_l2h.q),
-
-    // to register interface (read)
-    .qs     (key_intr_ctl_ec_rst_l_l2h_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_intr_ctl_we & regwen_qs),
+    .src_wd_i     (key_intr_ctl_ec_rst_l_l2h_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_intr_ctl_ec_rst_l_l2h_busy),
+    .src_qs_o     (key_intr_ctl_ec_rst_l_l2h_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_intr_ctl.ec_rst_l_l2h.q)
   );
 
 
   // R[key_intr_debounce_ctl]: V(False)
 
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (16),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (16'h0)
   ) u_key_intr_debounce_ctl (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (key_intr_debounce_ctl_we & regwen_qs),
-    .wd     (key_intr_debounce_ctl_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (reg2hw.key_intr_debounce_ctl.qe),
-    .q      (reg2hw.key_intr_debounce_ctl.q),
-
-    // to register interface (read)
-    .qs     (key_intr_debounce_ctl_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (key_intr_debounce_ctl_we & regwen_qs),
+    .src_wd_i     (key_intr_debounce_ctl_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (key_intr_debounce_ctl_busy),
+    .src_qs_o     (key_intr_debounce_ctl_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.key_intr_debounce_ctl.q)
   );
 
 
   // R[auto_block_debounce_ctl]: V(False)
 
   //   F[debounce_timer]: 15:0
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (16),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (16'h0)
   ) u_auto_block_debounce_ctl_debounce_timer (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (auto_block_debounce_ctl_we & regwen_qs),
-    .wd     (auto_block_debounce_ctl_debounce_timer_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (reg2hw.auto_block_debounce_ctl.debounce_timer.qe),
-    .q      (reg2hw.auto_block_debounce_ctl.debounce_timer.q),
-
-    // to register interface (read)
-    .qs     (auto_block_debounce_ctl_debounce_timer_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (auto_block_debounce_ctl_we & regwen_qs),
+    .src_wd_i     (auto_block_debounce_ctl_debounce_timer_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (auto_block_debounce_ctl_debounce_timer_busy),
+    .src_qs_o     (auto_block_debounce_ctl_debounce_timer_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.auto_block_debounce_ctl.debounce_timer.q)
   );
 
 
   //   F[auto_block_enable]: 16:16
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_auto_block_debounce_ctl_auto_block_enable (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (auto_block_debounce_ctl_we & regwen_qs),
-    .wd     (auto_block_debounce_ctl_auto_block_enable_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (reg2hw.auto_block_debounce_ctl.auto_block_enable.qe),
-    .q      (reg2hw.auto_block_debounce_ctl.auto_block_enable.q),
-
-    // to register interface (read)
-    .qs     (auto_block_debounce_ctl_auto_block_enable_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (auto_block_debounce_ctl_we & regwen_qs),
+    .src_wd_i     (auto_block_debounce_ctl_auto_block_enable_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (auto_block_debounce_ctl_auto_block_enable_busy),
+    .src_qs_o     (auto_block_debounce_ctl_auto_block_enable_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.auto_block_debounce_ctl.auto_block_enable.q)
   );
 
 
   // R[auto_block_out_ctl]: V(False)
 
   //   F[key0_out_sel]: 0:0
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_auto_block_out_ctl_key0_out_sel (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (auto_block_out_ctl_we & regwen_qs),
-    .wd     (auto_block_out_ctl_key0_out_sel_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.auto_block_out_ctl.key0_out_sel.q),
-
-    // to register interface (read)
-    .qs     (auto_block_out_ctl_key0_out_sel_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (auto_block_out_ctl_we & regwen_qs),
+    .src_wd_i     (auto_block_out_ctl_key0_out_sel_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (auto_block_out_ctl_key0_out_sel_busy),
+    .src_qs_o     (auto_block_out_ctl_key0_out_sel_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.auto_block_out_ctl.key0_out_sel.q)
   );
 
 
   //   F[key1_out_sel]: 1:1
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_auto_block_out_ctl_key1_out_sel (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (auto_block_out_ctl_we & regwen_qs),
-    .wd     (auto_block_out_ctl_key1_out_sel_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.auto_block_out_ctl.key1_out_sel.q),
-
-    // to register interface (read)
-    .qs     (auto_block_out_ctl_key1_out_sel_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (auto_block_out_ctl_we & regwen_qs),
+    .src_wd_i     (auto_block_out_ctl_key1_out_sel_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (auto_block_out_ctl_key1_out_sel_busy),
+    .src_qs_o     (auto_block_out_ctl_key1_out_sel_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.auto_block_out_ctl.key1_out_sel.q)
   );
 
 
   //   F[key2_out_sel]: 2:2
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_auto_block_out_ctl_key2_out_sel (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (auto_block_out_ctl_we & regwen_qs),
-    .wd     (auto_block_out_ctl_key2_out_sel_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.auto_block_out_ctl.key2_out_sel.q),
-
-    // to register interface (read)
-    .qs     (auto_block_out_ctl_key2_out_sel_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (auto_block_out_ctl_we & regwen_qs),
+    .src_wd_i     (auto_block_out_ctl_key2_out_sel_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (auto_block_out_ctl_key2_out_sel_busy),
+    .src_qs_o     (auto_block_out_ctl_key2_out_sel_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.auto_block_out_ctl.key2_out_sel.q)
   );
 
 
   //   F[key0_out_value]: 4:4
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_auto_block_out_ctl_key0_out_value (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (auto_block_out_ctl_we & regwen_qs),
-    .wd     (auto_block_out_ctl_key0_out_value_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.auto_block_out_ctl.key0_out_value.q),
-
-    // to register interface (read)
-    .qs     (auto_block_out_ctl_key0_out_value_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (auto_block_out_ctl_we & regwen_qs),
+    .src_wd_i     (auto_block_out_ctl_key0_out_value_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (auto_block_out_ctl_key0_out_value_busy),
+    .src_qs_o     (auto_block_out_ctl_key0_out_value_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.auto_block_out_ctl.key0_out_value.q)
   );
 
 
   //   F[key1_out_value]: 5:5
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_auto_block_out_ctl_key1_out_value (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (auto_block_out_ctl_we & regwen_qs),
-    .wd     (auto_block_out_ctl_key1_out_value_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.auto_block_out_ctl.key1_out_value.q),
-
-    // to register interface (read)
-    .qs     (auto_block_out_ctl_key1_out_value_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (auto_block_out_ctl_we & regwen_qs),
+    .src_wd_i     (auto_block_out_ctl_key1_out_value_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (auto_block_out_ctl_key1_out_value_busy),
+    .src_qs_o     (auto_block_out_ctl_key1_out_value_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.auto_block_out_ctl.key1_out_value.q)
   );
 
 
   //   F[key2_out_value]: 6:6
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_auto_block_out_ctl_key2_out_value (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (auto_block_out_ctl_we & regwen_qs),
-    .wd     (auto_block_out_ctl_key2_out_value_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.auto_block_out_ctl.key2_out_value.q),
-
-    // to register interface (read)
-    .qs     (auto_block_out_ctl_key2_out_value_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (auto_block_out_ctl_we & regwen_qs),
+    .src_wd_i     (auto_block_out_ctl_key2_out_value_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (auto_block_out_ctl_key2_out_value_busy),
+    .src_qs_o     (auto_block_out_ctl_key2_out_value_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.auto_block_out_ctl.key2_out_value.q)
   );
 
 
@@ -2500,132 +2350,112 @@
   // R[com_sel_ctl_0]: V(False)
 
   // F[key0_in_sel_0]: 0:0
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_0_key0_in_sel_0 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_0_we & regwen_qs),
-    .wd     (com_sel_ctl_0_key0_in_sel_0_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[0].key0_in_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_0_key0_in_sel_0_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_0_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_0_key0_in_sel_0_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_0_key0_in_sel_0_busy),
+    .src_qs_o     (com_sel_ctl_0_key0_in_sel_0_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[0].key0_in_sel.q)
   );
 
 
   // F[key1_in_sel_0]: 1:1
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_0_key1_in_sel_0 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_0_we & regwen_qs),
-    .wd     (com_sel_ctl_0_key1_in_sel_0_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[0].key1_in_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_0_key1_in_sel_0_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_0_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_0_key1_in_sel_0_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_0_key1_in_sel_0_busy),
+    .src_qs_o     (com_sel_ctl_0_key1_in_sel_0_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[0].key1_in_sel.q)
   );
 
 
   // F[key2_in_sel_0]: 2:2
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_0_key2_in_sel_0 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_0_we & regwen_qs),
-    .wd     (com_sel_ctl_0_key2_in_sel_0_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[0].key2_in_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_0_key2_in_sel_0_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_0_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_0_key2_in_sel_0_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_0_key2_in_sel_0_busy),
+    .src_qs_o     (com_sel_ctl_0_key2_in_sel_0_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[0].key2_in_sel.q)
   );
 
 
   // F[pwrb_in_sel_0]: 3:3
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_0_pwrb_in_sel_0 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_0_we & regwen_qs),
-    .wd     (com_sel_ctl_0_pwrb_in_sel_0_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[0].pwrb_in_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_0_pwrb_in_sel_0_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_0_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_0_pwrb_in_sel_0_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_0_pwrb_in_sel_0_busy),
+    .src_qs_o     (com_sel_ctl_0_pwrb_in_sel_0_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[0].pwrb_in_sel.q)
   );
 
 
   // F[ac_present_sel_0]: 4:4
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_0_ac_present_sel_0 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_0_we & regwen_qs),
-    .wd     (com_sel_ctl_0_ac_present_sel_0_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[0].ac_present_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_0_ac_present_sel_0_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_0_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_0_ac_present_sel_0_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_0_ac_present_sel_0_busy),
+    .src_qs_o     (com_sel_ctl_0_ac_present_sel_0_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[0].ac_present_sel.q)
   );
 
 
@@ -2633,132 +2463,112 @@
   // R[com_sel_ctl_1]: V(False)
 
   // F[key0_in_sel_1]: 0:0
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_1_key0_in_sel_1 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_1_we & regwen_qs),
-    .wd     (com_sel_ctl_1_key0_in_sel_1_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[1].key0_in_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_1_key0_in_sel_1_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_1_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_1_key0_in_sel_1_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_1_key0_in_sel_1_busy),
+    .src_qs_o     (com_sel_ctl_1_key0_in_sel_1_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[1].key0_in_sel.q)
   );
 
 
   // F[key1_in_sel_1]: 1:1
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_1_key1_in_sel_1 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_1_we & regwen_qs),
-    .wd     (com_sel_ctl_1_key1_in_sel_1_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[1].key1_in_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_1_key1_in_sel_1_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_1_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_1_key1_in_sel_1_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_1_key1_in_sel_1_busy),
+    .src_qs_o     (com_sel_ctl_1_key1_in_sel_1_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[1].key1_in_sel.q)
   );
 
 
   // F[key2_in_sel_1]: 2:2
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_1_key2_in_sel_1 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_1_we & regwen_qs),
-    .wd     (com_sel_ctl_1_key2_in_sel_1_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[1].key2_in_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_1_key2_in_sel_1_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_1_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_1_key2_in_sel_1_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_1_key2_in_sel_1_busy),
+    .src_qs_o     (com_sel_ctl_1_key2_in_sel_1_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[1].key2_in_sel.q)
   );
 
 
   // F[pwrb_in_sel_1]: 3:3
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_1_pwrb_in_sel_1 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_1_we & regwen_qs),
-    .wd     (com_sel_ctl_1_pwrb_in_sel_1_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[1].pwrb_in_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_1_pwrb_in_sel_1_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_1_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_1_pwrb_in_sel_1_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_1_pwrb_in_sel_1_busy),
+    .src_qs_o     (com_sel_ctl_1_pwrb_in_sel_1_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[1].pwrb_in_sel.q)
   );
 
 
   // F[ac_present_sel_1]: 4:4
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_1_ac_present_sel_1 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_1_we & regwen_qs),
-    .wd     (com_sel_ctl_1_ac_present_sel_1_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[1].ac_present_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_1_ac_present_sel_1_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_1_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_1_ac_present_sel_1_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_1_ac_present_sel_1_busy),
+    .src_qs_o     (com_sel_ctl_1_ac_present_sel_1_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[1].ac_present_sel.q)
   );
 
 
@@ -2766,132 +2576,112 @@
   // R[com_sel_ctl_2]: V(False)
 
   // F[key0_in_sel_2]: 0:0
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_2_key0_in_sel_2 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_2_we & regwen_qs),
-    .wd     (com_sel_ctl_2_key0_in_sel_2_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[2].key0_in_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_2_key0_in_sel_2_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_2_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_2_key0_in_sel_2_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_2_key0_in_sel_2_busy),
+    .src_qs_o     (com_sel_ctl_2_key0_in_sel_2_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[2].key0_in_sel.q)
   );
 
 
   // F[key1_in_sel_2]: 1:1
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_2_key1_in_sel_2 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_2_we & regwen_qs),
-    .wd     (com_sel_ctl_2_key1_in_sel_2_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[2].key1_in_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_2_key1_in_sel_2_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_2_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_2_key1_in_sel_2_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_2_key1_in_sel_2_busy),
+    .src_qs_o     (com_sel_ctl_2_key1_in_sel_2_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[2].key1_in_sel.q)
   );
 
 
   // F[key2_in_sel_2]: 2:2
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_2_key2_in_sel_2 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_2_we & regwen_qs),
-    .wd     (com_sel_ctl_2_key2_in_sel_2_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[2].key2_in_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_2_key2_in_sel_2_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_2_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_2_key2_in_sel_2_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_2_key2_in_sel_2_busy),
+    .src_qs_o     (com_sel_ctl_2_key2_in_sel_2_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[2].key2_in_sel.q)
   );
 
 
   // F[pwrb_in_sel_2]: 3:3
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_2_pwrb_in_sel_2 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_2_we & regwen_qs),
-    .wd     (com_sel_ctl_2_pwrb_in_sel_2_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[2].pwrb_in_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_2_pwrb_in_sel_2_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_2_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_2_pwrb_in_sel_2_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_2_pwrb_in_sel_2_busy),
+    .src_qs_o     (com_sel_ctl_2_pwrb_in_sel_2_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[2].pwrb_in_sel.q)
   );
 
 
   // F[ac_present_sel_2]: 4:4
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_2_ac_present_sel_2 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_2_we & regwen_qs),
-    .wd     (com_sel_ctl_2_ac_present_sel_2_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[2].ac_present_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_2_ac_present_sel_2_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_2_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_2_ac_present_sel_2_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_2_ac_present_sel_2_busy),
+    .src_qs_o     (com_sel_ctl_2_ac_present_sel_2_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[2].ac_present_sel.q)
   );
 
 
@@ -2899,132 +2689,112 @@
   // R[com_sel_ctl_3]: V(False)
 
   // F[key0_in_sel_3]: 0:0
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_3_key0_in_sel_3 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_3_we & regwen_qs),
-    .wd     (com_sel_ctl_3_key0_in_sel_3_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[3].key0_in_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_3_key0_in_sel_3_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_3_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_3_key0_in_sel_3_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_3_key0_in_sel_3_busy),
+    .src_qs_o     (com_sel_ctl_3_key0_in_sel_3_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[3].key0_in_sel.q)
   );
 
 
   // F[key1_in_sel_3]: 1:1
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_3_key1_in_sel_3 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_3_we & regwen_qs),
-    .wd     (com_sel_ctl_3_key1_in_sel_3_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[3].key1_in_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_3_key1_in_sel_3_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_3_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_3_key1_in_sel_3_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_3_key1_in_sel_3_busy),
+    .src_qs_o     (com_sel_ctl_3_key1_in_sel_3_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[3].key1_in_sel.q)
   );
 
 
   // F[key2_in_sel_3]: 2:2
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_3_key2_in_sel_3 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_3_we & regwen_qs),
-    .wd     (com_sel_ctl_3_key2_in_sel_3_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[3].key2_in_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_3_key2_in_sel_3_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_3_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_3_key2_in_sel_3_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_3_key2_in_sel_3_busy),
+    .src_qs_o     (com_sel_ctl_3_key2_in_sel_3_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[3].key2_in_sel.q)
   );
 
 
   // F[pwrb_in_sel_3]: 3:3
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_3_pwrb_in_sel_3 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_3_we & regwen_qs),
-    .wd     (com_sel_ctl_3_pwrb_in_sel_3_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[3].pwrb_in_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_3_pwrb_in_sel_3_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_3_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_3_pwrb_in_sel_3_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_3_pwrb_in_sel_3_busy),
+    .src_qs_o     (com_sel_ctl_3_pwrb_in_sel_3_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[3].pwrb_in_sel.q)
   );
 
 
   // F[ac_present_sel_3]: 4:4
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_sel_ctl_3_ac_present_sel_3 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_sel_ctl_3_we & regwen_qs),
-    .wd     (com_sel_ctl_3_ac_present_sel_3_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_sel_ctl[3].ac_present_sel.q),
-
-    // to register interface (read)
-    .qs     (com_sel_ctl_3_ac_present_sel_3_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_sel_ctl_3_we & regwen_qs),
+    .src_wd_i     (com_sel_ctl_3_ac_present_sel_3_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_sel_ctl_3_ac_present_sel_3_busy),
+    .src_qs_o     (com_sel_ctl_3_ac_present_sel_3_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_sel_ctl[3].ac_present_sel.q)
   );
 
 
@@ -3033,109 +2803,93 @@
   // Subregister 0 of Multireg com_det_ctl
   // R[com_det_ctl_0]: V(False)
 
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (32),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (32'h0)
   ) u_com_det_ctl_0 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_det_ctl_0_we & regwen_qs),
-    .wd     (com_det_ctl_0_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (reg2hw.com_det_ctl[0].qe),
-    .q      (reg2hw.com_det_ctl[0].q),
-
-    // to register interface (read)
-    .qs     (com_det_ctl_0_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_det_ctl_0_we & regwen_qs),
+    .src_wd_i     (com_det_ctl_0_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_det_ctl_0_busy),
+    .src_qs_o     (com_det_ctl_0_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_det_ctl[0].q)
   );
 
   // Subregister 1 of Multireg com_det_ctl
   // R[com_det_ctl_1]: V(False)
 
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (32),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (32'h0)
   ) u_com_det_ctl_1 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_det_ctl_1_we & regwen_qs),
-    .wd     (com_det_ctl_1_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (reg2hw.com_det_ctl[1].qe),
-    .q      (reg2hw.com_det_ctl[1].q),
-
-    // to register interface (read)
-    .qs     (com_det_ctl_1_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_det_ctl_1_we & regwen_qs),
+    .src_wd_i     (com_det_ctl_1_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_det_ctl_1_busy),
+    .src_qs_o     (com_det_ctl_1_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_det_ctl[1].q)
   );
 
   // Subregister 2 of Multireg com_det_ctl
   // R[com_det_ctl_2]: V(False)
 
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (32),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (32'h0)
   ) u_com_det_ctl_2 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_det_ctl_2_we & regwen_qs),
-    .wd     (com_det_ctl_2_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (reg2hw.com_det_ctl[2].qe),
-    .q      (reg2hw.com_det_ctl[2].q),
-
-    // to register interface (read)
-    .qs     (com_det_ctl_2_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_det_ctl_2_we & regwen_qs),
+    .src_wd_i     (com_det_ctl_2_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_det_ctl_2_busy),
+    .src_qs_o     (com_det_ctl_2_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_det_ctl[2].q)
   );
 
   // Subregister 3 of Multireg com_det_ctl
   // R[com_det_ctl_3]: V(False)
 
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (32),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (32'h0)
   ) u_com_det_ctl_3 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_det_ctl_3_we & regwen_qs),
-    .wd     (com_det_ctl_3_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (reg2hw.com_det_ctl[3].qe),
-    .q      (reg2hw.com_det_ctl[3].q),
-
-    // to register interface (read)
-    .qs     (com_det_ctl_3_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_det_ctl_3_we & regwen_qs),
+    .src_wd_i     (com_det_ctl_3_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_det_ctl_3_busy),
+    .src_qs_o     (com_det_ctl_3_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_det_ctl[3].q)
   );
 
 
@@ -3144,106 +2898,90 @@
   // R[com_out_ctl_0]: V(False)
 
   // F[bat_disable_0]: 0:0
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_out_ctl_0_bat_disable_0 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_out_ctl_0_we & regwen_qs),
-    .wd     (com_out_ctl_0_bat_disable_0_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_out_ctl[0].bat_disable.q),
-
-    // to register interface (read)
-    .qs     (com_out_ctl_0_bat_disable_0_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_out_ctl_0_we & regwen_qs),
+    .src_wd_i     (com_out_ctl_0_bat_disable_0_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_out_ctl_0_bat_disable_0_busy),
+    .src_qs_o     (com_out_ctl_0_bat_disable_0_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_out_ctl[0].bat_disable.q)
   );
 
 
   // F[interrupt_0]: 1:1
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_out_ctl_0_interrupt_0 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_out_ctl_0_we & regwen_qs),
-    .wd     (com_out_ctl_0_interrupt_0_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_out_ctl[0].interrupt.q),
-
-    // to register interface (read)
-    .qs     (com_out_ctl_0_interrupt_0_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_out_ctl_0_we & regwen_qs),
+    .src_wd_i     (com_out_ctl_0_interrupt_0_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_out_ctl_0_interrupt_0_busy),
+    .src_qs_o     (com_out_ctl_0_interrupt_0_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_out_ctl[0].interrupt.q)
   );
 
 
   // F[ec_rst_0]: 2:2
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_out_ctl_0_ec_rst_0 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_out_ctl_0_we & regwen_qs),
-    .wd     (com_out_ctl_0_ec_rst_0_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_out_ctl[0].ec_rst.q),
-
-    // to register interface (read)
-    .qs     (com_out_ctl_0_ec_rst_0_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_out_ctl_0_we & regwen_qs),
+    .src_wd_i     (com_out_ctl_0_ec_rst_0_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_out_ctl_0_ec_rst_0_busy),
+    .src_qs_o     (com_out_ctl_0_ec_rst_0_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_out_ctl[0].ec_rst.q)
   );
 
 
   // F[gsc_rst_0]: 3:3
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_out_ctl_0_gsc_rst_0 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_out_ctl_0_we & regwen_qs),
-    .wd     (com_out_ctl_0_gsc_rst_0_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_out_ctl[0].gsc_rst.q),
-
-    // to register interface (read)
-    .qs     (com_out_ctl_0_gsc_rst_0_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_out_ctl_0_we & regwen_qs),
+    .src_wd_i     (com_out_ctl_0_gsc_rst_0_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_out_ctl_0_gsc_rst_0_busy),
+    .src_qs_o     (com_out_ctl_0_gsc_rst_0_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_out_ctl[0].gsc_rst.q)
   );
 
 
@@ -3251,106 +2989,90 @@
   // R[com_out_ctl_1]: V(False)
 
   // F[bat_disable_1]: 0:0
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_out_ctl_1_bat_disable_1 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_out_ctl_1_we & regwen_qs),
-    .wd     (com_out_ctl_1_bat_disable_1_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_out_ctl[1].bat_disable.q),
-
-    // to register interface (read)
-    .qs     (com_out_ctl_1_bat_disable_1_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_out_ctl_1_we & regwen_qs),
+    .src_wd_i     (com_out_ctl_1_bat_disable_1_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_out_ctl_1_bat_disable_1_busy),
+    .src_qs_o     (com_out_ctl_1_bat_disable_1_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_out_ctl[1].bat_disable.q)
   );
 
 
   // F[interrupt_1]: 1:1
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_out_ctl_1_interrupt_1 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_out_ctl_1_we & regwen_qs),
-    .wd     (com_out_ctl_1_interrupt_1_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_out_ctl[1].interrupt.q),
-
-    // to register interface (read)
-    .qs     (com_out_ctl_1_interrupt_1_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_out_ctl_1_we & regwen_qs),
+    .src_wd_i     (com_out_ctl_1_interrupt_1_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_out_ctl_1_interrupt_1_busy),
+    .src_qs_o     (com_out_ctl_1_interrupt_1_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_out_ctl[1].interrupt.q)
   );
 
 
   // F[ec_rst_1]: 2:2
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_out_ctl_1_ec_rst_1 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_out_ctl_1_we & regwen_qs),
-    .wd     (com_out_ctl_1_ec_rst_1_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_out_ctl[1].ec_rst.q),
-
-    // to register interface (read)
-    .qs     (com_out_ctl_1_ec_rst_1_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_out_ctl_1_we & regwen_qs),
+    .src_wd_i     (com_out_ctl_1_ec_rst_1_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_out_ctl_1_ec_rst_1_busy),
+    .src_qs_o     (com_out_ctl_1_ec_rst_1_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_out_ctl[1].ec_rst.q)
   );
 
 
   // F[gsc_rst_1]: 3:3
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_out_ctl_1_gsc_rst_1 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_out_ctl_1_we & regwen_qs),
-    .wd     (com_out_ctl_1_gsc_rst_1_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_out_ctl[1].gsc_rst.q),
-
-    // to register interface (read)
-    .qs     (com_out_ctl_1_gsc_rst_1_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_out_ctl_1_we & regwen_qs),
+    .src_wd_i     (com_out_ctl_1_gsc_rst_1_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_out_ctl_1_gsc_rst_1_busy),
+    .src_qs_o     (com_out_ctl_1_gsc_rst_1_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_out_ctl[1].gsc_rst.q)
   );
 
 
@@ -3358,106 +3080,90 @@
   // R[com_out_ctl_2]: V(False)
 
   // F[bat_disable_2]: 0:0
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_out_ctl_2_bat_disable_2 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_out_ctl_2_we & regwen_qs),
-    .wd     (com_out_ctl_2_bat_disable_2_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_out_ctl[2].bat_disable.q),
-
-    // to register interface (read)
-    .qs     (com_out_ctl_2_bat_disable_2_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_out_ctl_2_we & regwen_qs),
+    .src_wd_i     (com_out_ctl_2_bat_disable_2_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_out_ctl_2_bat_disable_2_busy),
+    .src_qs_o     (com_out_ctl_2_bat_disable_2_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_out_ctl[2].bat_disable.q)
   );
 
 
   // F[interrupt_2]: 1:1
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_out_ctl_2_interrupt_2 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_out_ctl_2_we & regwen_qs),
-    .wd     (com_out_ctl_2_interrupt_2_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_out_ctl[2].interrupt.q),
-
-    // to register interface (read)
-    .qs     (com_out_ctl_2_interrupt_2_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_out_ctl_2_we & regwen_qs),
+    .src_wd_i     (com_out_ctl_2_interrupt_2_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_out_ctl_2_interrupt_2_busy),
+    .src_qs_o     (com_out_ctl_2_interrupt_2_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_out_ctl[2].interrupt.q)
   );
 
 
   // F[ec_rst_2]: 2:2
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_out_ctl_2_ec_rst_2 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_out_ctl_2_we & regwen_qs),
-    .wd     (com_out_ctl_2_ec_rst_2_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_out_ctl[2].ec_rst.q),
-
-    // to register interface (read)
-    .qs     (com_out_ctl_2_ec_rst_2_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_out_ctl_2_we & regwen_qs),
+    .src_wd_i     (com_out_ctl_2_ec_rst_2_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_out_ctl_2_ec_rst_2_busy),
+    .src_qs_o     (com_out_ctl_2_ec_rst_2_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_out_ctl[2].ec_rst.q)
   );
 
 
   // F[gsc_rst_2]: 3:3
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_out_ctl_2_gsc_rst_2 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_out_ctl_2_we & regwen_qs),
-    .wd     (com_out_ctl_2_gsc_rst_2_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_out_ctl[2].gsc_rst.q),
-
-    // to register interface (read)
-    .qs     (com_out_ctl_2_gsc_rst_2_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_out_ctl_2_we & regwen_qs),
+    .src_wd_i     (com_out_ctl_2_gsc_rst_2_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_out_ctl_2_gsc_rst_2_busy),
+    .src_qs_o     (com_out_ctl_2_gsc_rst_2_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_out_ctl[2].gsc_rst.q)
   );
 
 
@@ -3465,106 +3171,90 @@
   // R[com_out_ctl_3]: V(False)
 
   // F[bat_disable_3]: 0:0
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_out_ctl_3_bat_disable_3 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_out_ctl_3_we & regwen_qs),
-    .wd     (com_out_ctl_3_bat_disable_3_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_out_ctl[3].bat_disable.q),
-
-    // to register interface (read)
-    .qs     (com_out_ctl_3_bat_disable_3_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_out_ctl_3_we & regwen_qs),
+    .src_wd_i     (com_out_ctl_3_bat_disable_3_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_out_ctl_3_bat_disable_3_busy),
+    .src_qs_o     (com_out_ctl_3_bat_disable_3_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_out_ctl[3].bat_disable.q)
   );
 
 
   // F[interrupt_3]: 1:1
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_out_ctl_3_interrupt_3 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_out_ctl_3_we & regwen_qs),
-    .wd     (com_out_ctl_3_interrupt_3_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_out_ctl[3].interrupt.q),
-
-    // to register interface (read)
-    .qs     (com_out_ctl_3_interrupt_3_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_out_ctl_3_we & regwen_qs),
+    .src_wd_i     (com_out_ctl_3_interrupt_3_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_out_ctl_3_interrupt_3_busy),
+    .src_qs_o     (com_out_ctl_3_interrupt_3_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_out_ctl[3].interrupt.q)
   );
 
 
   // F[ec_rst_3]: 2:2
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_out_ctl_3_ec_rst_3 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_out_ctl_3_we & regwen_qs),
-    .wd     (com_out_ctl_3_ec_rst_3_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_out_ctl[3].ec_rst.q),
-
-    // to register interface (read)
-    .qs     (com_out_ctl_3_ec_rst_3_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_out_ctl_3_we & regwen_qs),
+    .src_wd_i     (com_out_ctl_3_ec_rst_3_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_out_ctl_3_ec_rst_3_busy),
+    .src_qs_o     (com_out_ctl_3_ec_rst_3_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_out_ctl[3].ec_rst.q)
   );
 
 
   // F[gsc_rst_3]: 3:3
-  prim_subreg #(
+  prim_subreg_async #(
     .DW      (1),
     .SwAccess(prim_subreg_pkg::SwAccessRW),
     .RESVAL  (1'h0)
   ) u_com_out_ctl_3_gsc_rst_3 (
-    .clk_i   (clk_i),
-    .rst_ni  (rst_ni),
-
-    // from register interface
-    .we     (com_out_ctl_3_we & regwen_qs),
-    .wd     (com_out_ctl_3_gsc_rst_3_wd),
-
-    // from internal hardware
-    .de     (1'b0),
-    .d      ('0),
-
-    // to internal hardware
-    .qe     (),
-    .q      (reg2hw.com_out_ctl[3].gsc_rst.q),
-
-    // to register interface (read)
-    .qs     (com_out_ctl_3_gsc_rst_3_qs)
+    .clk_src_i    (clk_i),
+    .rst_src_ni   (rst_ni),
+    .clk_dst_i    (clk_aon_i),
+    .rst_dst_ni   (rst_aon_ni),
+    .src_update_i (sync_aon_update),
+    .src_we_i     (com_out_ctl_3_we & regwen_qs),
+    .src_wd_i     (com_out_ctl_3_gsc_rst_3_wd),
+    .dst_de_i     (1'b0),
+    .dst_d_i      ('0),
+    .src_busy_o   (com_out_ctl_3_gsc_rst_3_busy),
+    .src_qs_o     (com_out_ctl_3_gsc_rst_3_qs),
+    .dst_qe_o     (),
+    .q            (reg2hw.com_out_ctl[3].gsc_rst.q)
   );
 
 
@@ -4620,6 +4310,180 @@
   always_comb begin
     reg_busy = '0;
     unique case (1'b1)
+      addr_hit[5]: begin
+        reg_busy = ec_rst_ctl_busy;
+      end
+      addr_hit[6]: begin
+        reg_busy = ulp_ac_debounce_ctl_busy;
+      end
+      addr_hit[7]: begin
+        reg_busy = ulp_lid_debounce_ctl_busy;
+      end
+      addr_hit[8]: begin
+        reg_busy = ulp_pwrb_debounce_ctl_busy;
+      end
+      addr_hit[9]: begin
+        reg_busy = ulp_ctl_busy;
+      end
+      addr_hit[10]: begin
+        reg_busy = ulp_status_busy;
+      end
+      addr_hit[12]: begin
+        reg_busy =
+          key_invert_ctl_key0_in_busy |
+          key_invert_ctl_key0_out_busy |
+          key_invert_ctl_key1_in_busy |
+          key_invert_ctl_key1_out_busy |
+          key_invert_ctl_key2_in_busy |
+          key_invert_ctl_key2_out_busy |
+          key_invert_ctl_pwrb_in_busy |
+          key_invert_ctl_pwrb_out_busy |
+          key_invert_ctl_ac_present_busy |
+          key_invert_ctl_bat_disable_busy |
+          key_invert_ctl_lid_open_busy |
+          key_invert_ctl_z3_wakeup_busy;
+      end
+      addr_hit[13]: begin
+        reg_busy =
+          pin_allowed_ctl_bat_disable_0_busy |
+          pin_allowed_ctl_ec_rst_l_0_busy |
+          pin_allowed_ctl_pwrb_out_0_busy |
+          pin_allowed_ctl_key0_out_0_busy |
+          pin_allowed_ctl_key1_out_0_busy |
+          pin_allowed_ctl_key2_out_0_busy |
+          pin_allowed_ctl_z3_wakeup_0_busy |
+          pin_allowed_ctl_bat_disable_1_busy |
+          pin_allowed_ctl_ec_rst_l_1_busy |
+          pin_allowed_ctl_pwrb_out_1_busy |
+          pin_allowed_ctl_key0_out_1_busy |
+          pin_allowed_ctl_key1_out_1_busy |
+          pin_allowed_ctl_key2_out_1_busy |
+          pin_allowed_ctl_z3_wakeup_1_busy;
+      end
+      addr_hit[14]: begin
+        reg_busy =
+          pin_out_ctl_bat_disable_busy |
+          pin_out_ctl_ec_rst_l_busy |
+          pin_out_ctl_pwrb_out_busy |
+          pin_out_ctl_key0_out_busy |
+          pin_out_ctl_key1_out_busy |
+          pin_out_ctl_key2_out_busy |
+          pin_out_ctl_z3_wakeup_busy;
+      end
+      addr_hit[15]: begin
+        reg_busy =
+          pin_out_value_bat_disable_busy |
+          pin_out_value_ec_rst_l_busy |
+          pin_out_value_pwrb_out_busy |
+          pin_out_value_key0_out_busy |
+          pin_out_value_key1_out_busy |
+          pin_out_value_key2_out_busy |
+          pin_out_value_z3_wakeup_busy;
+      end
+      addr_hit[17]: begin
+        reg_busy =
+          key_intr_ctl_pwrb_in_h2l_busy |
+          key_intr_ctl_key0_in_h2l_busy |
+          key_intr_ctl_key1_in_h2l_busy |
+          key_intr_ctl_key2_in_h2l_busy |
+          key_intr_ctl_ac_present_h2l_busy |
+          key_intr_ctl_ec_rst_l_h2l_busy |
+          key_intr_ctl_pwrb_in_l2h_busy |
+          key_intr_ctl_key0_in_l2h_busy |
+          key_intr_ctl_key1_in_l2h_busy |
+          key_intr_ctl_key2_in_l2h_busy |
+          key_intr_ctl_ac_present_l2h_busy |
+          key_intr_ctl_ec_rst_l_l2h_busy;
+      end
+      addr_hit[18]: begin
+        reg_busy = key_intr_debounce_ctl_busy;
+      end
+      addr_hit[19]: begin
+        reg_busy =
+          auto_block_debounce_ctl_debounce_timer_busy |
+          auto_block_debounce_ctl_auto_block_enable_busy;
+      end
+      addr_hit[20]: begin
+        reg_busy =
+          auto_block_out_ctl_key0_out_sel_busy |
+          auto_block_out_ctl_key1_out_sel_busy |
+          auto_block_out_ctl_key2_out_sel_busy |
+          auto_block_out_ctl_key0_out_value_busy |
+          auto_block_out_ctl_key1_out_value_busy |
+          auto_block_out_ctl_key2_out_value_busy;
+      end
+      addr_hit[21]: begin
+        reg_busy =
+          com_sel_ctl_0_key0_in_sel_0_busy |
+          com_sel_ctl_0_key1_in_sel_0_busy |
+          com_sel_ctl_0_key2_in_sel_0_busy |
+          com_sel_ctl_0_pwrb_in_sel_0_busy |
+          com_sel_ctl_0_ac_present_sel_0_busy;
+      end
+      addr_hit[22]: begin
+        reg_busy =
+          com_sel_ctl_1_key0_in_sel_1_busy |
+          com_sel_ctl_1_key1_in_sel_1_busy |
+          com_sel_ctl_1_key2_in_sel_1_busy |
+          com_sel_ctl_1_pwrb_in_sel_1_busy |
+          com_sel_ctl_1_ac_present_sel_1_busy;
+      end
+      addr_hit[23]: begin
+        reg_busy =
+          com_sel_ctl_2_key0_in_sel_2_busy |
+          com_sel_ctl_2_key1_in_sel_2_busy |
+          com_sel_ctl_2_key2_in_sel_2_busy |
+          com_sel_ctl_2_pwrb_in_sel_2_busy |
+          com_sel_ctl_2_ac_present_sel_2_busy;
+      end
+      addr_hit[24]: begin
+        reg_busy =
+          com_sel_ctl_3_key0_in_sel_3_busy |
+          com_sel_ctl_3_key1_in_sel_3_busy |
+          com_sel_ctl_3_key2_in_sel_3_busy |
+          com_sel_ctl_3_pwrb_in_sel_3_busy |
+          com_sel_ctl_3_ac_present_sel_3_busy;
+      end
+      addr_hit[25]: begin
+        reg_busy = com_det_ctl_0_busy;
+      end
+      addr_hit[26]: begin
+        reg_busy = com_det_ctl_1_busy;
+      end
+      addr_hit[27]: begin
+        reg_busy = com_det_ctl_2_busy;
+      end
+      addr_hit[28]: begin
+        reg_busy = com_det_ctl_3_busy;
+      end
+      addr_hit[29]: begin
+        reg_busy =
+          com_out_ctl_0_bat_disable_0_busy |
+          com_out_ctl_0_interrupt_0_busy |
+          com_out_ctl_0_ec_rst_0_busy |
+          com_out_ctl_0_gsc_rst_0_busy;
+      end
+      addr_hit[30]: begin
+        reg_busy =
+          com_out_ctl_1_bat_disable_1_busy |
+          com_out_ctl_1_interrupt_1_busy |
+          com_out_ctl_1_ec_rst_1_busy |
+          com_out_ctl_1_gsc_rst_1_busy;
+      end
+      addr_hit[31]: begin
+        reg_busy =
+          com_out_ctl_2_bat_disable_2_busy |
+          com_out_ctl_2_interrupt_2_busy |
+          com_out_ctl_2_ec_rst_2_busy |
+          com_out_ctl_2_gsc_rst_2_busy;
+      end
+      addr_hit[32]: begin
+        reg_busy =
+          com_out_ctl_3_bat_disable_3_busy |
+          com_out_ctl_3_interrupt_3_busy |
+          com_out_ctl_3_ec_rst_3_busy |
+          com_out_ctl_3_gsc_rst_3_busy;
+      end
       default: begin
         reg_busy  = '0;
       end
diff --git a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_ulp.sv b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_ulp.sv
index 4f5925b..0f3e4d7 100644
--- a/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_ulp.sv
+++ b/hw/ip/sysrst_ctrl/rtl/sysrst_ctrl_ulp.sv
@@ -7,8 +7,6 @@
 module sysrst_ctrl_ulp import sysrst_ctrl_reg_pkg::*; (
   input  clk_aon_i,
   input  rst_aon_ni,
-  input  clk_i,
-  input  rst_ni,
 
   input  lid_open_int_i,
   input  ac_present_int_i,
@@ -20,125 +18,14 @@
   input  sysrst_ctrl_reg2hw_ulp_ctl_reg_t ulp_ctl_i,
 
   output sysrst_ctrl_hw2reg_ulp_status_reg_t ulp_status_o,
-  output ulp_wakeup_o,
+  output ulp_wakeup_pulse_o,
   output z3_wakeup_hw_o
 
 );
 
-  logic         cfg_ulp_en;
-  logic         load_ulp_ac_timer;
-  logic [15:0]  cfg_ulp_ac_timer;
-  logic [15:0]  cfg_ulp_ac_timer_d;
-  logic         load_ulp_lid_timer;
-  logic [15:0]  cfg_ulp_lid_timer;
-  logic [15:0]  cfg_ulp_lid_timer_d;
-  logic         load_ulp_pwrb_timer;
-  logic [15:0]  cfg_ulp_pwrb_timer;
-  logic [15:0]  cfg_ulp_pwrb_timer_d;
-
-  logic pwrb_cond_met, pwrb_cond_met_q;
-  logic lid_open_cond_met, lid_open_cond_met_q;
-  logic ac_present_cond_met, ac_present_cond_met_q;
   logic pwrb_int;
   logic lid_open_int;
   logic ac_present_int;
-  logic pwrb_det_pulse;
-  logic lid_open_det_pulse;
-  logic ac_present_det_pulse;
-  logic cfg_pwrb_det_pulse;
-  logic cfg_lid_open_det_pulse;
-  logic cfg_ac_present_det_pulse;
-
-  //synchronize between cfg(24MHz) and always-on(200KHz)
-  prim_flop_2sync # (
-    .Width(1)
-  ) u_cfg_ulp_en (
-    .clk_i(clk_aon_i),
-    .rst_ni(rst_aon_ni),
-    .d_i(ulp_ctl_i.q),
-    .q_o(cfg_ulp_en)
-  );
-
-  prim_fifo_async #(
-    .Width(16),
-    .Depth(2)
-  ) u_cfg_ulp_ac_timer (
-    .clk_wr_i  (clk_i),
-    .rst_wr_ni (rst_ni),
-    .wvalid_i  (ulp_ac_debounce_ctl_i.qe),
-    .wready_o  (),
-    .wdata_i   (ulp_ac_debounce_ctl_i.q),
-    .wdepth_o  (),
-
-    .clk_rd_i  (clk_aon_i),
-    .rst_rd_ni (rst_aon_ni),
-    .rvalid_o  (load_ulp_ac_timer),
-    .rready_i  (1'b1),
-    .rdata_o   (cfg_ulp_ac_timer_d),
-    .rdepth_o  ()
-  );
-
-  prim_fifo_async #(
-    .Width(16),
-    .Depth(2)
-  ) u_cfg_ulp_lid_timer (
-    .clk_wr_i  (clk_i),
-    .rst_wr_ni (rst_ni),
-    .wvalid_i  (ulp_lid_debounce_ctl_i.qe),
-    .wready_o  (),
-    .wdata_i   (ulp_lid_debounce_ctl_i.q),
-    .wdepth_o  (),
-
-    .clk_rd_i  (clk_aon_i),
-    .rst_rd_ni (rst_aon_ni),
-    .rvalid_o  (load_ulp_lid_timer),
-    .rready_i  (1'b1),
-    .rdata_o   (cfg_ulp_lid_timer_d),
-    .rdepth_o  ()
-  );
-
-  prim_fifo_async #(
-    .Width(16),
-    .Depth(2)
-  ) u_cfg_ulp_pwrb_timer (
-    .clk_wr_i  (clk_i),
-    .rst_wr_ni (rst_ni),
-    .wvalid_i  (ulp_pwrb_debounce_ctl_i.qe),
-    .wready_o  (),
-    .wdata_i   (ulp_pwrb_debounce_ctl_i.q),
-    .wdepth_o  (),
-
-    .clk_rd_i  (clk_aon_i),
-    .rst_rd_ni (rst_aon_ni),
-    .rvalid_o  (load_ulp_pwrb_timer),
-    .rready_i  (1'b1),
-    .rdata_o   (cfg_ulp_pwrb_timer_d),
-    .rdepth_o  ()
-  );
-
-  always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_cfg_ulp_ac_timer_reg
-    if (!rst_aon_ni) begin
-      cfg_ulp_ac_timer    <= '0;
-    end else if (load_ulp_ac_timer) begin
-      cfg_ulp_ac_timer    <= cfg_ulp_ac_timer_d;
-    end
-  end
-
-  always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_cfg_ulp_lid_timer_reg
-    if (!rst_aon_ni) begin
-      cfg_ulp_lid_timer    <= '0;
-    end else if (load_ulp_lid_timer) begin
-      cfg_ulp_lid_timer    <= cfg_ulp_lid_timer_d;
-    end
-  end
-
-  always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_cfg_ulp_pwrb_timer_reg
-    if (!rst_aon_ni) begin
-      cfg_ulp_pwrb_timer    <= '0;
-    end else if (load_ulp_pwrb_timer) begin
-      cfg_ulp_pwrb_timer    <= cfg_ulp_pwrb_timer_d;
-    end
-  end
 
   //synchronize between GPIO and always-on(200KHz)
   prim_flop_2sync # (
@@ -175,9 +62,9 @@
     .clk_aon_i,
     .rst_aon_ni,
     .trigger_i(pwrb_int),
-    .cfg_timer_i(cfg_ulp_pwrb_timer),
-    .cfg_en_i(cfg_ulp_en),
-    .timer_cond_met_o(pwrb_cond_met)
+    .cfg_timer_i(ulp_pwrb_debounce_ctl_i.q),
+    .cfg_en_i(ulp_ctl_i.q),
+    .timer_cond_met_o(pwrb_cond_met_d)
   );
 
   sysrst_ctrl_ulpfsm # (
@@ -187,9 +74,9 @@
     .clk_aon_i,
     .rst_aon_ni,
     .trigger_i(lid_open_int),
-    .cfg_timer_i(cfg_ulp_lid_timer),
-    .cfg_en_i(cfg_ulp_en),
-    .timer_cond_met_o(lid_open_cond_met)
+    .cfg_timer_i(ulp_lid_debounce_ctl_i.q),
+    .cfg_en_i(ulp_ctl_i.q),
+    .timer_cond_met_o(lid_open_cond_met_d)
   );
 
   sysrst_ctrl_ulpfsm # (
@@ -199,67 +86,44 @@
     .clk_aon_i,
     .rst_aon_ni,
     .trigger_i(ac_present_int),
-    .cfg_timer_i(cfg_ulp_ac_timer),
-    .cfg_en_i(cfg_ulp_en),
-    .timer_cond_met_o(ac_present_cond_met)
+    .cfg_timer_i(ulp_ac_debounce_ctl_i.q),
+    .cfg_en_i(ulp_ctl_i.q),
+    .timer_cond_met_o(ac_present_cond_met_d)
   );
 
   //delay the level signal to generate a pulse
+  logic pwrb_cond_met_d, pwrb_cond_met_q;
+  logic lid_open_cond_met_d, lid_open_cond_met_q;
+  logic ac_present_cond_met_d, ac_present_cond_met_q;
   always_ff @(posedge clk_aon_i or negedge rst_aon_ni) begin: p_ulp_cond_met
     if (!rst_aon_ni) begin
-      pwrb_cond_met_q    <= 1'b0;
-      lid_open_cond_met_q    <= 1'b0;
-      ac_present_cond_met_q    <= 1'b0;
+      pwrb_cond_met_q       <= 1'b0;
+      lid_open_cond_met_q   <= 1'b0;
+      ac_present_cond_met_q <= 1'b0;
     end else begin
-      pwrb_cond_met_q    <= pwrb_cond_met;
-      lid_open_cond_met_q    <= lid_open_cond_met;
-      ac_present_cond_met_q    <= ac_present_cond_met;
+      pwrb_cond_met_q       <= pwrb_cond_met_d;
+      lid_open_cond_met_q   <= lid_open_cond_met_d;
+      ac_present_cond_met_q <= ac_present_cond_met_d;
     end
   end
 
-  assign pwrb_det_pulse = cfg_ulp_en &&
-    (pwrb_cond_met_q == 1'b0) && (pwrb_cond_met == 1'b1);
-  assign lid_open_det_pulse = cfg_ulp_en &&
-    (lid_open_cond_met_q == 1'b0) && (lid_open_cond_met == 1'b1);
-  assign ac_present_det_pulse = cfg_ulp_en &&
-    (ac_present_cond_met_q == 1'b0) && (ac_present_cond_met == 1'b1);
+  logic pwrb_det_pulse;
+  logic lid_open_det_pulse;
+  logic ac_present_det_pulse;
+  assign pwrb_det_pulse       = pwrb_cond_met_d       & ~pwrb_cond_met_q;
+  assign lid_open_det_pulse   = lid_open_cond_met_d   & ~lid_open_cond_met_q;
+  assign ac_present_det_pulse = ac_present_cond_met_d & ~ac_present_cond_met_q;
 
-  //Synchronize from 200KHz always-onclock to 24MHz cfg clock
-  prim_pulse_sync u_pwrb_det_pulse (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_ni),
-    .rst_dst_ni  (rst_ni),
-    .src_pulse_i (pwrb_det_pulse),
-    .dst_pulse_o (cfg_pwrb_det_pulse)
-  );
+  // aggregate pulses
+  assign ulp_wakeup_pulse_o = ulp_ctl_i.q & (pwrb_det_pulse |
+                                             lid_open_det_pulse |
+                                             ac_present_det_pulse);
 
-  prim_pulse_sync u_lid_open_det_pulse (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_ni),
-    .rst_dst_ni  (rst_ni),
-    .src_pulse_i (lid_open_det_pulse),
-    .dst_pulse_o (cfg_lid_open_det_pulse)
-  );
-
-  prim_pulse_sync u_ac_present_det_pulse (
-    .clk_src_i   (clk_aon_i),
-    .clk_dst_i   (clk_i),
-    .rst_src_ni  (rst_aon_ni),
-    .rst_dst_ni  (rst_ni),
-    .src_pulse_i (ac_present_det_pulse),
-    .dst_pulse_o (cfg_ac_present_det_pulse)
-  );
-
-  assign ulp_status_o.de =
-           cfg_pwrb_det_pulse || cfg_lid_open_det_pulse || cfg_ac_present_det_pulse;
+  assign z3_wakeup_hw_o = pwrb_cond_met_d |
+                          lid_open_cond_met_d |
+                          ac_present_cond_met_d;
 
   assign ulp_status_o.d = 1'b1;
-
-  assign ulp_wakeup_o =
-           cfg_pwrb_det_pulse || cfg_lid_open_det_pulse || cfg_ac_present_det_pulse;
-
-  assign z3_wakeup_hw_o = pwrb_cond_met || lid_open_cond_met || ac_present_cond_met;
+  assign ulp_status_o.de = ulp_wakeup_pulse_o;
 
 endmodule