[top] Auto generate files

Signed-off-by: Timothy Chen <timothytim@google.com>
diff --git a/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson b/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
index df11ded..7aab762 100644
--- a/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
+++ b/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
@@ -813,6 +813,19 @@
           index: -1
         }
         {
+          struct: keymgr_flash
+          type: uni
+          name: keymgr
+          act: req
+          package: flash_ctrl_pkg
+          inst_name: flash_ctrl
+          width: 1
+          default: ""
+          top_type: broadcast
+          top_signame: flash_ctrl_keymgr
+          index: -1
+        }
+        {
           struct: tl
           package: tlul_pkg
           type: req_rsp
@@ -2287,6 +2300,151 @@
       ]
     }
     {
+      name: keymgr
+      type: keymgr
+      clock_srcs:
+      {
+        clk_i: main
+      }
+      clock_group: secure
+      reset_connections:
+      {
+        rst_ni: sys
+      }
+      base_addr: 0x401a0000
+      clock_reset_export: []
+      clock_connections:
+      {
+        clk_i: clkmgr_clocks.clk_main_secure
+      }
+      size: 0x1000
+      bus_device: tlul
+      bus_host: none
+      available_input_list: []
+      available_output_list: []
+      available_inout_list: []
+      interrupt_list:
+      [
+        {
+          name: op_done
+          width: 1
+          bits: "0"
+          bitinfo:
+          [
+            1
+            1
+            0
+          ]
+          type: interrupt
+        }
+        {
+          name: err
+          width: 1
+          bits: "1"
+          bitinfo:
+          [
+            2
+            1
+            1
+          ]
+          type: interrupt
+        }
+      ]
+      alert_list:
+      [
+        {
+          name: err
+          width: 1
+          type: alert
+          async: 0
+        }
+      ]
+      wakeup_list: []
+      scan: "false"
+      scan_reset: "false"
+      inter_signal_list:
+      [
+        {
+          struct: hw_key
+          type: uni
+          name: aes_key
+          act: req
+          package: keymgr_pkg
+          inst_name: keymgr
+          index: -1
+        }
+        {
+          struct: hw_key
+          type: uni
+          name: hmac_key
+          act: req
+          package: keymgr_pkg
+          inst_name: keymgr
+          index: -1
+        }
+        {
+          struct: hw_key
+          type: uni
+          name: kmac_key
+          act: req
+          package: keymgr_pkg
+          inst_name: keymgr
+          index: -1
+        }
+        {
+          struct: kmac_data
+          type: req_rsp
+          name: kmac_data
+          act: req
+          package: keymgr_pkg
+          inst_name: keymgr
+          index: -1
+        }
+        {
+          struct: lc_data
+          type: uni
+          name: lc
+          act: rcv
+          package: keymgr_pkg
+          inst_name: keymgr
+          index: -1
+        }
+        {
+          struct: otp_data
+          type: uni
+          name: otp
+          act: rcv
+          package: keymgr_pkg
+          inst_name: keymgr
+          index: -1
+        }
+        {
+          struct: keymgr_flash
+          type: uni
+          name: flash
+          act: rcv
+          package: flash_ctrl_pkg
+          inst_name: keymgr
+          width: 1
+          default: ""
+          top_signame: flash_ctrl_keymgr
+          index: -1
+        }
+        {
+          struct: tl
+          package: tlul_pkg
+          type: req_rsp
+          act: rsp
+          name: tl
+          inst_name: keymgr
+          width: 1
+          default: ""
+          top_signame: keymgr_tl
+          index: -1
+        }
+      ]
+    }
+    {
       name: otbn
       type: otbn
       clock_srcs:
@@ -2564,6 +2722,10 @@
       [
         clkmgr.pwr
       ]
+      flash_ctrl.keymgr:
+      [
+        keymgr.flash
+      ]
       pwrmgr.wakeups:
       [
         pinmux.aon_wkup_req
@@ -2620,6 +2782,10 @@
       [
         main.tl_otbn
       ]
+      keymgr.tl:
+      [
+        main.tl_keymgr
+      ]
       uart.tl:
       [
         peri.tl_uart
@@ -2738,6 +2904,7 @@
           alert_handler
           nmi_gen
           otbn
+          keymgr
         ]
         dm_sba:
         [
@@ -3060,6 +3227,24 @@
           stub: false
           pipeline: "true"
         }
+        {
+          name: keymgr
+          type: device
+          clock: clk_main_i
+          reset: rst_main_ni
+          pipeline_byp: "false"
+          inst_type: keymgr
+          addr_range:
+          [
+            {
+              base_addr: 0x401a0000
+              size_byte: 0x1000
+            }
+          ]
+          xbar: false
+          stub: false
+          pipeline: "true"
+        }
       ]
       clock: clk_main_i
       type: xbar
@@ -3269,6 +3454,18 @@
           top_signame: otbn_tl
           index: -1
         }
+        {
+          struct: tl
+          type: req_rsp
+          name: tl_keymgr
+          act: req
+          package: tlul_pkg
+          inst_name: main
+          width: 1
+          default: ""
+          top_signame: keymgr_tl
+          index: -1
+        }
       ]
     }
     {
@@ -3680,6 +3877,7 @@
     usbdev
     pwrmgr
     otbn
+    keymgr
   ]
   interrupt:
   [
@@ -4333,6 +4531,32 @@
       type: interrupt
       module_name: otbn
     }
+    {
+      name: keymgr_op_done
+      width: 1
+      bits: "0"
+      bitinfo:
+      [
+        1
+        1
+        0
+      ]
+      type: interrupt
+      module_name: keymgr
+    }
+    {
+      name: keymgr_err
+      width: 1
+      bits: "1"
+      bitinfo:
+      [
+        2
+        1
+        1
+      ]
+      type: interrupt
+      module_name: keymgr
+    }
   ]
   alert_module:
   [
@@ -4340,6 +4564,7 @@
     hmac
     otbn
     sensor_ctrl
+    keymgr
   ]
   alert:
   [
@@ -4392,6 +4617,13 @@
       async: 1
       module_name: sensor_ctrl
     }
+    {
+      name: keymgr_err
+      width: 1
+      type: alert
+      async: 0
+      module_name: keymgr
+    }
   ]
   pinmux:
   {
@@ -4825,6 +5057,19 @@
         index: -1
       }
       {
+        struct: keymgr_flash
+        type: uni
+        name: keymgr
+        act: req
+        package: flash_ctrl_pkg
+        inst_name: flash_ctrl
+        width: 1
+        default: ""
+        top_type: broadcast
+        top_signame: flash_ctrl_keymgr
+        index: -1
+      }
+      {
         struct: tl
         package: tlul_pkg
         type: req_rsp
@@ -5392,6 +5637,84 @@
         index: -1
       }
       {
+        struct: hw_key
+        type: uni
+        name: aes_key
+        act: req
+        package: keymgr_pkg
+        inst_name: keymgr
+        index: -1
+      }
+      {
+        struct: hw_key
+        type: uni
+        name: hmac_key
+        act: req
+        package: keymgr_pkg
+        inst_name: keymgr
+        index: -1
+      }
+      {
+        struct: hw_key
+        type: uni
+        name: kmac_key
+        act: req
+        package: keymgr_pkg
+        inst_name: keymgr
+        index: -1
+      }
+      {
+        struct: kmac_data
+        type: req_rsp
+        name: kmac_data
+        act: req
+        package: keymgr_pkg
+        inst_name: keymgr
+        index: -1
+      }
+      {
+        struct: lc_data
+        type: uni
+        name: lc
+        act: rcv
+        package: keymgr_pkg
+        inst_name: keymgr
+        index: -1
+      }
+      {
+        struct: otp_data
+        type: uni
+        name: otp
+        act: rcv
+        package: keymgr_pkg
+        inst_name: keymgr
+        index: -1
+      }
+      {
+        struct: keymgr_flash
+        type: uni
+        name: flash
+        act: rcv
+        package: flash_ctrl_pkg
+        inst_name: keymgr
+        width: 1
+        default: ""
+        top_signame: flash_ctrl_keymgr
+        index: -1
+      }
+      {
+        struct: tl
+        package: tlul_pkg
+        type: req_rsp
+        act: rsp
+        name: tl
+        inst_name: keymgr
+        width: 1
+        default: ""
+        top_signame: keymgr_tl
+        index: -1
+      }
+      {
         name: idle
         type: uni
         struct: logic
@@ -5679,6 +6002,18 @@
       {
         struct: tl
         type: req_rsp
+        name: tl_keymgr
+        act: req
+        package: tlul_pkg
+        inst_name: main
+        width: 1
+        default: ""
+        top_signame: keymgr_tl
+        index: -1
+      }
+      {
+        struct: tl
+        type: req_rsp
         name: tl_main
         act: rsp
         package: tlul_pkg
@@ -6036,6 +6371,14 @@
         default: ""
       }
       {
+        package: flash_ctrl_pkg
+        struct: keymgr_flash
+        signame: flash_ctrl_keymgr
+        width: 1
+        type: uni
+        default: ""
+      }
+      {
         package: ""
         struct: logic
         signame: pwrmgr_wakeups
@@ -6254,6 +6597,22 @@
       {
         package: tlul_pkg
         struct: tl_h2d
+        signame: keymgr_tl_req
+        width: 1
+        type: req_rsp
+        default: ""
+      }
+      {
+        package: tlul_pkg
+        struct: tl_d2h
+        signame: keymgr_tl_rsp
+        width: 1
+        type: req_rsp
+        default: ""
+      }
+      {
+        package: tlul_pkg
+        struct: tl_h2d
         signame: uart_tl_req
         width: 1
         type: req_rsp
diff --git a/hw/top_earlgrey/dv/autogen/tb__xbar_connect.sv b/hw/top_earlgrey/dv/autogen/tb__xbar_connect.sv
index 1fa8670..0127aef 100644
--- a/hw/top_earlgrey/dv/autogen/tb__xbar_connect.sv
+++ b/hw/top_earlgrey/dv/autogen/tb__xbar_connect.sv
@@ -44,6 +44,7 @@
 tl_if alert_handler_tl_if(clk_main, rst_n);
 tl_if nmi_gen_tl_if(clk_main, rst_n);
 tl_if otbn_tl_if(clk_main, rst_n);
+tl_if keymgr_tl_if(clk_main, rst_n);
 tl_if uart_tl_if(clk_io_div4, rst_n);
 tl_if gpio_tl_if(clk_io_div4, rst_n);
 tl_if spi_device_tl_if(clk_io_div4, rst_n);
@@ -98,6 +99,7 @@
     `DRIVE_TL_DEVICE_IF(alert_handler, alert_handler, tl)
     `DRIVE_TL_DEVICE_IF(nmi_gen, nmi_gen, tl)
     `DRIVE_TL_DEVICE_IF(otbn, otbn, tl)
+    `DRIVE_TL_DEVICE_IF(keymgr, keymgr, tl)
     `DRIVE_TL_DEVICE_IF(uart, uart, tl)
     `DRIVE_TL_DEVICE_IF(gpio, gpio, tl)
     `DRIVE_TL_DEVICE_IF(spi_device, spi_device, tl)
diff --git a/hw/top_earlgrey/dv/autogen/xbar_env_pkg__params.sv b/hw/top_earlgrey/dv/autogen/xbar_env_pkg__params.sv
index c18cacd..bdb366e 100644
--- a/hw/top_earlgrey/dv/autogen/xbar_env_pkg__params.sv
+++ b/hw/top_earlgrey/dv/autogen/xbar_env_pkg__params.sv
@@ -46,6 +46,9 @@
     '{"otbn", '{
         '{32'h50000000, 32'h503fffff}
     }},
+    '{"keymgr", '{
+        '{32'h401a0000, 32'h401a0fff}
+    }},
     '{"uart", '{
         '{32'h40000000, 32'h40000fff}
     }},
@@ -112,7 +115,8 @@
         "padctrl",
         "alert_handler",
         "nmi_gen",
-        "otbn"}}
+        "otbn",
+        "keymgr"}}
     ,
     '{"dm_sba", 2, '{
         "rom",
diff --git a/hw/top_earlgrey/ip/alert_handler/data/autogen/alert_handler.hjson b/hw/top_earlgrey/ip/alert_handler/data/autogen/alert_handler.hjson
index 5a1e996..1a9f721 100644
--- a/hw/top_earlgrey/ip/alert_handler/data/autogen/alert_handler.hjson
+++ b/hw/top_earlgrey/ip/alert_handler/data/autogen/alert_handler.hjson
@@ -30,7 +30,7 @@
     { name: "NAlerts",
       desc: "Number of peripheral inputs",
       type: "int",
-      default: "13",
+      default: "14",
       local: "true"
     },
     { name: "EscCntDw",
@@ -54,7 +54,7 @@
     { name: "AsyncOn",
       desc: "Number of peripheral outputs",
       type: "logic [NAlerts-1:0]",
-      default: "13'b1111111000000",
+      default: "14'b01111111000000",
       local: "true"
     },
     { name: "N_CLASSES",
diff --git a/hw/top_earlgrey/ip/alert_handler/dv/alert_handler_env_pkg__params.sv b/hw/top_earlgrey/ip/alert_handler/dv/alert_handler_env_pkg__params.sv
index d5abde7..6aab9b6 100644
--- a/hw/top_earlgrey/ip/alert_handler/dv/alert_handler_env_pkg__params.sv
+++ b/hw/top_earlgrey/ip/alert_handler/dv/alert_handler_env_pkg__params.sv
@@ -10,5 +10,5 @@
 // Licensed under the Apache License, Version 2.0, see LICENSE for details.
 // SPDX-License-Identifier: Apache-2.0
 
-parameter uint NUM_ALERTS = 13;
-parameter bit [NUM_ALERTS-1:0] ASYNC_ON = 13'b1111111000000;
+parameter uint NUM_ALERTS = 14;
+parameter bit [NUM_ALERTS-1:0] ASYNC_ON = 14'b01111111000000;
diff --git a/hw/top_earlgrey/ip/alert_handler/rtl/autogen/alert_handler_reg_pkg.sv b/hw/top_earlgrey/ip/alert_handler/rtl/autogen/alert_handler_reg_pkg.sv
index 2135bc2..e732bd3 100644
--- a/hw/top_earlgrey/ip/alert_handler/rtl/autogen/alert_handler_reg_pkg.sv
+++ b/hw/top_earlgrey/ip/alert_handler/rtl/autogen/alert_handler_reg_pkg.sv
@@ -7,11 +7,11 @@
 package alert_handler_reg_pkg;
 
   // Param list
-  parameter int NAlerts = 13;
+  parameter int NAlerts = 14;
   parameter int EscCntDw = 32;
   parameter int AccuCntDw = 16;
   parameter int LfsrSeed = 2147483647;
-  parameter logic [NAlerts-1:0] AsyncOn = 13'b1111111000000;
+  parameter logic [NAlerts-1:0] AsyncOn = 14'b01111111000000;
   parameter int N_CLASSES = 4;
   parameter int N_ESC_SEV = 4;
   parameter int N_PHASES = 4;
@@ -455,14 +455,14 @@
   // Register to internal design logic //
   ///////////////////////////////////////
   typedef struct packed {
-    alert_handler_reg2hw_intr_state_reg_t intr_state; // [876:873]
-    alert_handler_reg2hw_intr_enable_reg_t intr_enable; // [872:869]
-    alert_handler_reg2hw_intr_test_reg_t intr_test; // [868:861]
-    alert_handler_reg2hw_regen_reg_t regen; // [860:860]
-    alert_handler_reg2hw_ping_timeout_cyc_reg_t ping_timeout_cyc; // [859:836]
-    alert_handler_reg2hw_alert_en_mreg_t [12:0] alert_en; // [835:823]
-    alert_handler_reg2hw_alert_class_mreg_t [12:0] alert_class; // [822:797]
-    alert_handler_reg2hw_alert_cause_mreg_t [12:0] alert_cause; // [796:784]
+    alert_handler_reg2hw_intr_state_reg_t intr_state; // [880:877]
+    alert_handler_reg2hw_intr_enable_reg_t intr_enable; // [876:873]
+    alert_handler_reg2hw_intr_test_reg_t intr_test; // [872:865]
+    alert_handler_reg2hw_regen_reg_t regen; // [864:864]
+    alert_handler_reg2hw_ping_timeout_cyc_reg_t ping_timeout_cyc; // [863:840]
+    alert_handler_reg2hw_alert_en_mreg_t [13:0] alert_en; // [839:826]
+    alert_handler_reg2hw_alert_class_mreg_t [13:0] alert_class; // [825:798]
+    alert_handler_reg2hw_alert_cause_mreg_t [13:0] alert_cause; // [797:784]
     alert_handler_reg2hw_loc_alert_en_mreg_t [3:0] loc_alert_en; // [783:780]
     alert_handler_reg2hw_loc_alert_class_mreg_t [3:0] loc_alert_class; // [779:772]
     alert_handler_reg2hw_loc_alert_cause_mreg_t [3:0] loc_alert_cause; // [771:768]
@@ -504,8 +504,8 @@
   // Internal design logic to register //
   ///////////////////////////////////////
   typedef struct packed {
-    alert_handler_hw2reg_intr_state_reg_t intr_state; // [253:250]
-    alert_handler_hw2reg_alert_cause_mreg_t [12:0] alert_cause; // [249:224]
+    alert_handler_hw2reg_intr_state_reg_t intr_state; // [255:252]
+    alert_handler_hw2reg_alert_cause_mreg_t [13:0] alert_cause; // [251:224]
     alert_handler_hw2reg_loc_alert_cause_mreg_t [3:0] loc_alert_cause; // [223:216]
     alert_handler_hw2reg_classa_clren_reg_t classa_clren; // [215:216]
     alert_handler_hw2reg_classa_accum_cnt_reg_t classa_accum_cnt; // [215:216]
diff --git a/hw/top_earlgrey/ip/alert_handler/rtl/autogen/alert_handler_reg_top.sv b/hw/top_earlgrey/ip/alert_handler/rtl/autogen/alert_handler_reg_top.sv
index 32496b9..38c7628 100644
--- a/hw/top_earlgrey/ip/alert_handler/rtl/autogen/alert_handler_reg_top.sv
+++ b/hw/top_earlgrey/ip/alert_handler/rtl/autogen/alert_handler_reg_top.sv
@@ -148,6 +148,9 @@
   logic alert_en_en_a_12_qs;
   logic alert_en_en_a_12_wd;
   logic alert_en_en_a_12_we;
+  logic alert_en_en_a_13_qs;
+  logic alert_en_en_a_13_wd;
+  logic alert_en_en_a_13_we;
   logic [1:0] alert_class_class_a_0_qs;
   logic [1:0] alert_class_class_a_0_wd;
   logic alert_class_class_a_0_we;
@@ -187,6 +190,9 @@
   logic [1:0] alert_class_class_a_12_qs;
   logic [1:0] alert_class_class_a_12_wd;
   logic alert_class_class_a_12_we;
+  logic [1:0] alert_class_class_a_13_qs;
+  logic [1:0] alert_class_class_a_13_wd;
+  logic alert_class_class_a_13_we;
   logic alert_cause_a_0_qs;
   logic alert_cause_a_0_wd;
   logic alert_cause_a_0_we;
@@ -226,6 +232,9 @@
   logic alert_cause_a_12_qs;
   logic alert_cause_a_12_wd;
   logic alert_cause_a_12_we;
+  logic alert_cause_a_13_qs;
+  logic alert_cause_a_13_wd;
+  logic alert_cause_a_13_we;
   logic loc_alert_en_en_la_0_qs;
   logic loc_alert_en_en_la_0_wd;
   logic loc_alert_en_en_la_0_we;
@@ -1170,6 +1179,32 @@
   );
 
 
+  // F[en_a_13]: 13:13
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_alert_en_en_a_13 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (alert_en_en_a_13_we & regen_qs),
+    .wd     (alert_en_en_a_13_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.alert_en[13].q ),
+
+    // to register interface (read)
+    .qs     (alert_en_en_a_13_qs)
+  );
+
+
 
 
   // Subregister 0 of Multireg alert_class
@@ -1513,6 +1548,32 @@
   );
 
 
+  // F[class_a_13]: 27:26
+  prim_subreg #(
+    .DW      (2),
+    .SWACCESS("RW"),
+    .RESVAL  (2'h0)
+  ) u_alert_class_class_a_13 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (alert_class_class_a_13_we & regen_qs),
+    .wd     (alert_class_class_a_13_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.alert_class[13].q ),
+
+    // to register interface (read)
+    .qs     (alert_class_class_a_13_qs)
+  );
+
+
 
 
   // Subregister 0 of Multireg alert_cause
@@ -1856,6 +1917,32 @@
   );
 
 
+  // F[a_13]: 13:13
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W1C"),
+    .RESVAL  (1'h0)
+  ) u_alert_cause_a_13 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (alert_cause_a_13_we),
+    .wd     (alert_cause_a_13_wd),
+
+    // from internal hardware
+    .de     (hw2reg.alert_cause[13].de),
+    .d      (hw2reg.alert_cause[13].d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.alert_cause[13].q ),
+
+    // to register interface (read)
+    .qs     (alert_cause_a_13_qs)
+  );
+
+
 
 
   // Subregister 0 of Multireg loc_alert_en
@@ -4497,6 +4584,9 @@
   assign alert_en_en_a_12_we = addr_hit[5] & reg_we & ~wr_err;
   assign alert_en_en_a_12_wd = reg_wdata[12];
 
+  assign alert_en_en_a_13_we = addr_hit[5] & reg_we & ~wr_err;
+  assign alert_en_en_a_13_wd = reg_wdata[13];
+
   assign alert_class_class_a_0_we = addr_hit[6] & reg_we & ~wr_err;
   assign alert_class_class_a_0_wd = reg_wdata[1:0];
 
@@ -4536,6 +4626,9 @@
   assign alert_class_class_a_12_we = addr_hit[6] & reg_we & ~wr_err;
   assign alert_class_class_a_12_wd = reg_wdata[25:24];
 
+  assign alert_class_class_a_13_we = addr_hit[6] & reg_we & ~wr_err;
+  assign alert_class_class_a_13_wd = reg_wdata[27:26];
+
   assign alert_cause_a_0_we = addr_hit[7] & reg_we & ~wr_err;
   assign alert_cause_a_0_wd = reg_wdata[0];
 
@@ -4575,6 +4668,9 @@
   assign alert_cause_a_12_we = addr_hit[7] & reg_we & ~wr_err;
   assign alert_cause_a_12_wd = reg_wdata[12];
 
+  assign alert_cause_a_13_we = addr_hit[7] & reg_we & ~wr_err;
+  assign alert_cause_a_13_wd = reg_wdata[13];
+
   assign loc_alert_en_en_la_0_we = addr_hit[8] & reg_we & ~wr_err;
   assign loc_alert_en_en_la_0_wd = reg_wdata[0];
 
@@ -4898,6 +4994,7 @@
         reg_rdata_next[10] = alert_en_en_a_10_qs;
         reg_rdata_next[11] = alert_en_en_a_11_qs;
         reg_rdata_next[12] = alert_en_en_a_12_qs;
+        reg_rdata_next[13] = alert_en_en_a_13_qs;
       end
 
       addr_hit[6]: begin
@@ -4914,6 +5011,7 @@
         reg_rdata_next[21:20] = alert_class_class_a_10_qs;
         reg_rdata_next[23:22] = alert_class_class_a_11_qs;
         reg_rdata_next[25:24] = alert_class_class_a_12_qs;
+        reg_rdata_next[27:26] = alert_class_class_a_13_qs;
       end
 
       addr_hit[7]: begin
@@ -4930,6 +5028,7 @@
         reg_rdata_next[10] = alert_cause_a_10_qs;
         reg_rdata_next[11] = alert_cause_a_11_qs;
         reg_rdata_next[12] = alert_cause_a_12_qs;
+        reg_rdata_next[13] = alert_cause_a_13_qs;
       end
 
       addr_hit[8]: begin
diff --git a/hw/top_earlgrey/ip/rv_plic/data/autogen/rv_plic.hjson b/hw/top_earlgrey/ip/rv_plic/data/autogen/rv_plic.hjson
index dc83f40..338d24d 100644
--- a/hw/top_earlgrey/ip/rv_plic/data/autogen/rv_plic.hjson
+++ b/hw/top_earlgrey/ip/rv_plic/data/autogen/rv_plic.hjson
@@ -25,7 +25,7 @@
     { name: "NumSrc",
       desc: "Number of interrupt sources",
       type: "int",
-      default: "82",
+      default: "84",
       local: "true"
     },
     { name: "NumTarget",
@@ -725,6 +725,22 @@
         { bits: "1:0" }
       ],
     }
+    { name: "PRIO82",
+      desc: "Interrupt Source 82 Priority",
+      swaccess: "rw",
+      hwaccess: "hro",
+      fields: [
+        { bits: "1:0" }
+      ],
+    }
+    { name: "PRIO83",
+      desc: "Interrupt Source 83 Priority",
+      swaccess: "rw",
+      hwaccess: "hro",
+      fields: [
+        { bits: "1:0" }
+      ],
+    }
     { skipto: "512" }
     { multireg: {
         name: "IE0",
diff --git a/hw/top_earlgrey/ip/rv_plic/rtl/autogen/rv_plic.sv b/hw/top_earlgrey/ip/rv_plic/rtl/autogen/rv_plic.sv
index cd6e64e..6853d57 100644
--- a/hw/top_earlgrey/ip/rv_plic/rtl/autogen/rv_plic.sv
+++ b/hw/top_earlgrey/ip/rv_plic/rtl/autogen/rv_plic.sv
@@ -176,11 +176,13 @@
   assign prio[79] = reg2hw.prio79.q;
   assign prio[80] = reg2hw.prio80.q;
   assign prio[81] = reg2hw.prio81.q;
+  assign prio[82] = reg2hw.prio82.q;
+  assign prio[83] = reg2hw.prio83.q;
 
   //////////////////////
   // Interrupt Enable //
   //////////////////////
-  for (genvar s = 0; s < 82; s++) begin : gen_ie0
+  for (genvar s = 0; s < 84; s++) begin : gen_ie0
     assign ie[0][s] = reg2hw.ie0[s].q;
   end
 
@@ -206,7 +208,7 @@
   ////////
   // IP //
   ////////
-  for (genvar s = 0; s < 82; s++) begin : gen_ip
+  for (genvar s = 0; s < 84; s++) begin : gen_ip
     assign hw2reg.ip[s].de = 1'b1; // Always write
     assign hw2reg.ip[s].d  = ip[s];
   end
@@ -214,7 +216,7 @@
   ///////////////////////////////////
   // Detection:: 0: Level, 1: Edge //
   ///////////////////////////////////
-  for (genvar s = 0; s < 82; s++) begin : gen_le
+  for (genvar s = 0; s < 84; s++) begin : gen_le
     assign le[s] = reg2hw.le[s].q;
   end
 
diff --git a/hw/top_earlgrey/ip/rv_plic/rtl/autogen/rv_plic_reg_pkg.sv b/hw/top_earlgrey/ip/rv_plic/rtl/autogen/rv_plic_reg_pkg.sv
index dacec8b..f8d828b 100644
--- a/hw/top_earlgrey/ip/rv_plic/rtl/autogen/rv_plic_reg_pkg.sv
+++ b/hw/top_earlgrey/ip/rv_plic/rtl/autogen/rv_plic_reg_pkg.sv
@@ -7,7 +7,7 @@
 package rv_plic_reg_pkg;
 
   // Param list
-  parameter int NumSrc = 82;
+  parameter int NumSrc = 84;
   parameter int NumTarget = 1;
   parameter int PrioWidth = 2;
 
@@ -347,6 +347,14 @@
   } rv_plic_reg2hw_prio81_reg_t;
 
   typedef struct packed {
+    logic [1:0]  q;
+  } rv_plic_reg2hw_prio82_reg_t;
+
+  typedef struct packed {
+    logic [1:0]  q;
+  } rv_plic_reg2hw_prio83_reg_t;
+
+  typedef struct packed {
     logic        q;
   } rv_plic_reg2hw_ie0_mreg_t;
 
@@ -379,90 +387,92 @@
   // Register to internal design logic //
   ///////////////////////////////////////
   typedef struct packed {
-    rv_plic_reg2hw_le_mreg_t [81:0] le; // [339:258]
-    rv_plic_reg2hw_prio0_reg_t prio0; // [257:256]
-    rv_plic_reg2hw_prio1_reg_t prio1; // [255:254]
-    rv_plic_reg2hw_prio2_reg_t prio2; // [253:252]
-    rv_plic_reg2hw_prio3_reg_t prio3; // [251:250]
-    rv_plic_reg2hw_prio4_reg_t prio4; // [249:248]
-    rv_plic_reg2hw_prio5_reg_t prio5; // [247:246]
-    rv_plic_reg2hw_prio6_reg_t prio6; // [245:244]
-    rv_plic_reg2hw_prio7_reg_t prio7; // [243:242]
-    rv_plic_reg2hw_prio8_reg_t prio8; // [241:240]
-    rv_plic_reg2hw_prio9_reg_t prio9; // [239:238]
-    rv_plic_reg2hw_prio10_reg_t prio10; // [237:236]
-    rv_plic_reg2hw_prio11_reg_t prio11; // [235:234]
-    rv_plic_reg2hw_prio12_reg_t prio12; // [233:232]
-    rv_plic_reg2hw_prio13_reg_t prio13; // [231:230]
-    rv_plic_reg2hw_prio14_reg_t prio14; // [229:228]
-    rv_plic_reg2hw_prio15_reg_t prio15; // [227:226]
-    rv_plic_reg2hw_prio16_reg_t prio16; // [225:224]
-    rv_plic_reg2hw_prio17_reg_t prio17; // [223:222]
-    rv_plic_reg2hw_prio18_reg_t prio18; // [221:220]
-    rv_plic_reg2hw_prio19_reg_t prio19; // [219:218]
-    rv_plic_reg2hw_prio20_reg_t prio20; // [217:216]
-    rv_plic_reg2hw_prio21_reg_t prio21; // [215:214]
-    rv_plic_reg2hw_prio22_reg_t prio22; // [213:212]
-    rv_plic_reg2hw_prio23_reg_t prio23; // [211:210]
-    rv_plic_reg2hw_prio24_reg_t prio24; // [209:208]
-    rv_plic_reg2hw_prio25_reg_t prio25; // [207:206]
-    rv_plic_reg2hw_prio26_reg_t prio26; // [205:204]
-    rv_plic_reg2hw_prio27_reg_t prio27; // [203:202]
-    rv_plic_reg2hw_prio28_reg_t prio28; // [201:200]
-    rv_plic_reg2hw_prio29_reg_t prio29; // [199:198]
-    rv_plic_reg2hw_prio30_reg_t prio30; // [197:196]
-    rv_plic_reg2hw_prio31_reg_t prio31; // [195:194]
-    rv_plic_reg2hw_prio32_reg_t prio32; // [193:192]
-    rv_plic_reg2hw_prio33_reg_t prio33; // [191:190]
-    rv_plic_reg2hw_prio34_reg_t prio34; // [189:188]
-    rv_plic_reg2hw_prio35_reg_t prio35; // [187:186]
-    rv_plic_reg2hw_prio36_reg_t prio36; // [185:184]
-    rv_plic_reg2hw_prio37_reg_t prio37; // [183:182]
-    rv_plic_reg2hw_prio38_reg_t prio38; // [181:180]
-    rv_plic_reg2hw_prio39_reg_t prio39; // [179:178]
-    rv_plic_reg2hw_prio40_reg_t prio40; // [177:176]
-    rv_plic_reg2hw_prio41_reg_t prio41; // [175:174]
-    rv_plic_reg2hw_prio42_reg_t prio42; // [173:172]
-    rv_plic_reg2hw_prio43_reg_t prio43; // [171:170]
-    rv_plic_reg2hw_prio44_reg_t prio44; // [169:168]
-    rv_plic_reg2hw_prio45_reg_t prio45; // [167:166]
-    rv_plic_reg2hw_prio46_reg_t prio46; // [165:164]
-    rv_plic_reg2hw_prio47_reg_t prio47; // [163:162]
-    rv_plic_reg2hw_prio48_reg_t prio48; // [161:160]
-    rv_plic_reg2hw_prio49_reg_t prio49; // [159:158]
-    rv_plic_reg2hw_prio50_reg_t prio50; // [157:156]
-    rv_plic_reg2hw_prio51_reg_t prio51; // [155:154]
-    rv_plic_reg2hw_prio52_reg_t prio52; // [153:152]
-    rv_plic_reg2hw_prio53_reg_t prio53; // [151:150]
-    rv_plic_reg2hw_prio54_reg_t prio54; // [149:148]
-    rv_plic_reg2hw_prio55_reg_t prio55; // [147:146]
-    rv_plic_reg2hw_prio56_reg_t prio56; // [145:144]
-    rv_plic_reg2hw_prio57_reg_t prio57; // [143:142]
-    rv_plic_reg2hw_prio58_reg_t prio58; // [141:140]
-    rv_plic_reg2hw_prio59_reg_t prio59; // [139:138]
-    rv_plic_reg2hw_prio60_reg_t prio60; // [137:136]
-    rv_plic_reg2hw_prio61_reg_t prio61; // [135:134]
-    rv_plic_reg2hw_prio62_reg_t prio62; // [133:132]
-    rv_plic_reg2hw_prio63_reg_t prio63; // [131:130]
-    rv_plic_reg2hw_prio64_reg_t prio64; // [129:128]
-    rv_plic_reg2hw_prio65_reg_t prio65; // [127:126]
-    rv_plic_reg2hw_prio66_reg_t prio66; // [125:124]
-    rv_plic_reg2hw_prio67_reg_t prio67; // [123:122]
-    rv_plic_reg2hw_prio68_reg_t prio68; // [121:120]
-    rv_plic_reg2hw_prio69_reg_t prio69; // [119:118]
-    rv_plic_reg2hw_prio70_reg_t prio70; // [117:116]
-    rv_plic_reg2hw_prio71_reg_t prio71; // [115:114]
-    rv_plic_reg2hw_prio72_reg_t prio72; // [113:112]
-    rv_plic_reg2hw_prio73_reg_t prio73; // [111:110]
-    rv_plic_reg2hw_prio74_reg_t prio74; // [109:108]
-    rv_plic_reg2hw_prio75_reg_t prio75; // [107:106]
-    rv_plic_reg2hw_prio76_reg_t prio76; // [105:104]
-    rv_plic_reg2hw_prio77_reg_t prio77; // [103:102]
-    rv_plic_reg2hw_prio78_reg_t prio78; // [101:100]
-    rv_plic_reg2hw_prio79_reg_t prio79; // [99:98]
-    rv_plic_reg2hw_prio80_reg_t prio80; // [97:96]
-    rv_plic_reg2hw_prio81_reg_t prio81; // [95:94]
-    rv_plic_reg2hw_ie0_mreg_t [81:0] ie0; // [93:12]
+    rv_plic_reg2hw_le_mreg_t [83:0] le; // [347:264]
+    rv_plic_reg2hw_prio0_reg_t prio0; // [263:262]
+    rv_plic_reg2hw_prio1_reg_t prio1; // [261:260]
+    rv_plic_reg2hw_prio2_reg_t prio2; // [259:258]
+    rv_plic_reg2hw_prio3_reg_t prio3; // [257:256]
+    rv_plic_reg2hw_prio4_reg_t prio4; // [255:254]
+    rv_plic_reg2hw_prio5_reg_t prio5; // [253:252]
+    rv_plic_reg2hw_prio6_reg_t prio6; // [251:250]
+    rv_plic_reg2hw_prio7_reg_t prio7; // [249:248]
+    rv_plic_reg2hw_prio8_reg_t prio8; // [247:246]
+    rv_plic_reg2hw_prio9_reg_t prio9; // [245:244]
+    rv_plic_reg2hw_prio10_reg_t prio10; // [243:242]
+    rv_plic_reg2hw_prio11_reg_t prio11; // [241:240]
+    rv_plic_reg2hw_prio12_reg_t prio12; // [239:238]
+    rv_plic_reg2hw_prio13_reg_t prio13; // [237:236]
+    rv_plic_reg2hw_prio14_reg_t prio14; // [235:234]
+    rv_plic_reg2hw_prio15_reg_t prio15; // [233:232]
+    rv_plic_reg2hw_prio16_reg_t prio16; // [231:230]
+    rv_plic_reg2hw_prio17_reg_t prio17; // [229:228]
+    rv_plic_reg2hw_prio18_reg_t prio18; // [227:226]
+    rv_plic_reg2hw_prio19_reg_t prio19; // [225:224]
+    rv_plic_reg2hw_prio20_reg_t prio20; // [223:222]
+    rv_plic_reg2hw_prio21_reg_t prio21; // [221:220]
+    rv_plic_reg2hw_prio22_reg_t prio22; // [219:218]
+    rv_plic_reg2hw_prio23_reg_t prio23; // [217:216]
+    rv_plic_reg2hw_prio24_reg_t prio24; // [215:214]
+    rv_plic_reg2hw_prio25_reg_t prio25; // [213:212]
+    rv_plic_reg2hw_prio26_reg_t prio26; // [211:210]
+    rv_plic_reg2hw_prio27_reg_t prio27; // [209:208]
+    rv_plic_reg2hw_prio28_reg_t prio28; // [207:206]
+    rv_plic_reg2hw_prio29_reg_t prio29; // [205:204]
+    rv_plic_reg2hw_prio30_reg_t prio30; // [203:202]
+    rv_plic_reg2hw_prio31_reg_t prio31; // [201:200]
+    rv_plic_reg2hw_prio32_reg_t prio32; // [199:198]
+    rv_plic_reg2hw_prio33_reg_t prio33; // [197:196]
+    rv_plic_reg2hw_prio34_reg_t prio34; // [195:194]
+    rv_plic_reg2hw_prio35_reg_t prio35; // [193:192]
+    rv_plic_reg2hw_prio36_reg_t prio36; // [191:190]
+    rv_plic_reg2hw_prio37_reg_t prio37; // [189:188]
+    rv_plic_reg2hw_prio38_reg_t prio38; // [187:186]
+    rv_plic_reg2hw_prio39_reg_t prio39; // [185:184]
+    rv_plic_reg2hw_prio40_reg_t prio40; // [183:182]
+    rv_plic_reg2hw_prio41_reg_t prio41; // [181:180]
+    rv_plic_reg2hw_prio42_reg_t prio42; // [179:178]
+    rv_plic_reg2hw_prio43_reg_t prio43; // [177:176]
+    rv_plic_reg2hw_prio44_reg_t prio44; // [175:174]
+    rv_plic_reg2hw_prio45_reg_t prio45; // [173:172]
+    rv_plic_reg2hw_prio46_reg_t prio46; // [171:170]
+    rv_plic_reg2hw_prio47_reg_t prio47; // [169:168]
+    rv_plic_reg2hw_prio48_reg_t prio48; // [167:166]
+    rv_plic_reg2hw_prio49_reg_t prio49; // [165:164]
+    rv_plic_reg2hw_prio50_reg_t prio50; // [163:162]
+    rv_plic_reg2hw_prio51_reg_t prio51; // [161:160]
+    rv_plic_reg2hw_prio52_reg_t prio52; // [159:158]
+    rv_plic_reg2hw_prio53_reg_t prio53; // [157:156]
+    rv_plic_reg2hw_prio54_reg_t prio54; // [155:154]
+    rv_plic_reg2hw_prio55_reg_t prio55; // [153:152]
+    rv_plic_reg2hw_prio56_reg_t prio56; // [151:150]
+    rv_plic_reg2hw_prio57_reg_t prio57; // [149:148]
+    rv_plic_reg2hw_prio58_reg_t prio58; // [147:146]
+    rv_plic_reg2hw_prio59_reg_t prio59; // [145:144]
+    rv_plic_reg2hw_prio60_reg_t prio60; // [143:142]
+    rv_plic_reg2hw_prio61_reg_t prio61; // [141:140]
+    rv_plic_reg2hw_prio62_reg_t prio62; // [139:138]
+    rv_plic_reg2hw_prio63_reg_t prio63; // [137:136]
+    rv_plic_reg2hw_prio64_reg_t prio64; // [135:134]
+    rv_plic_reg2hw_prio65_reg_t prio65; // [133:132]
+    rv_plic_reg2hw_prio66_reg_t prio66; // [131:130]
+    rv_plic_reg2hw_prio67_reg_t prio67; // [129:128]
+    rv_plic_reg2hw_prio68_reg_t prio68; // [127:126]
+    rv_plic_reg2hw_prio69_reg_t prio69; // [125:124]
+    rv_plic_reg2hw_prio70_reg_t prio70; // [123:122]
+    rv_plic_reg2hw_prio71_reg_t prio71; // [121:120]
+    rv_plic_reg2hw_prio72_reg_t prio72; // [119:118]
+    rv_plic_reg2hw_prio73_reg_t prio73; // [117:116]
+    rv_plic_reg2hw_prio74_reg_t prio74; // [115:114]
+    rv_plic_reg2hw_prio75_reg_t prio75; // [113:112]
+    rv_plic_reg2hw_prio76_reg_t prio76; // [111:110]
+    rv_plic_reg2hw_prio77_reg_t prio77; // [109:108]
+    rv_plic_reg2hw_prio78_reg_t prio78; // [107:106]
+    rv_plic_reg2hw_prio79_reg_t prio79; // [105:104]
+    rv_plic_reg2hw_prio80_reg_t prio80; // [103:102]
+    rv_plic_reg2hw_prio81_reg_t prio81; // [101:100]
+    rv_plic_reg2hw_prio82_reg_t prio82; // [99:98]
+    rv_plic_reg2hw_prio83_reg_t prio83; // [97:96]
+    rv_plic_reg2hw_ie0_mreg_t [83:0] ie0; // [95:12]
     rv_plic_reg2hw_threshold0_reg_t threshold0; // [11:10]
     rv_plic_reg2hw_cc0_reg_t cc0; // [9:1]
     rv_plic_reg2hw_msip0_reg_t msip0; // [0:0]
@@ -472,7 +482,7 @@
   // Internal design logic to register //
   ///////////////////////////////////////
   typedef struct packed {
-    rv_plic_hw2reg_ip_mreg_t [81:0] ip; // [170:7]
+    rv_plic_hw2reg_ip_mreg_t [83:0] ip; // [174:7]
     rv_plic_hw2reg_cc0_reg_t cc0; // [6:-2]
   } rv_plic_hw2reg_t;
 
@@ -565,6 +575,8 @@
   parameter logic [9:0] RV_PLIC_PRIO79_OFFSET = 10'h 154;
   parameter logic [9:0] RV_PLIC_PRIO80_OFFSET = 10'h 158;
   parameter logic [9:0] RV_PLIC_PRIO81_OFFSET = 10'h 15c;
+  parameter logic [9:0] RV_PLIC_PRIO82_OFFSET = 10'h 160;
+  parameter logic [9:0] RV_PLIC_PRIO83_OFFSET = 10'h 164;
   parameter logic [9:0] RV_PLIC_IE0_0_OFFSET = 10'h 200;
   parameter logic [9:0] RV_PLIC_IE0_1_OFFSET = 10'h 204;
   parameter logic [9:0] RV_PLIC_IE0_2_OFFSET = 10'h 208;
@@ -663,6 +675,8 @@
     RV_PLIC_PRIO79,
     RV_PLIC_PRIO80,
     RV_PLIC_PRIO81,
+    RV_PLIC_PRIO82,
+    RV_PLIC_PRIO83,
     RV_PLIC_IE0_0,
     RV_PLIC_IE0_1,
     RV_PLIC_IE0_2,
@@ -672,7 +686,7 @@
   } rv_plic_id_e;
 
   // Register width information to check illegal writes
-  parameter logic [3:0] RV_PLIC_PERMIT [94] = '{
+  parameter logic [3:0] RV_PLIC_PERMIT [96] = '{
     4'b 1111, // index[ 0] RV_PLIC_IP_0
     4'b 1111, // index[ 1] RV_PLIC_IP_1
     4'b 0111, // index[ 2] RV_PLIC_IP_2
@@ -761,12 +775,14 @@
     4'b 0001, // index[85] RV_PLIC_PRIO79
     4'b 0001, // index[86] RV_PLIC_PRIO80
     4'b 0001, // index[87] RV_PLIC_PRIO81
-    4'b 1111, // index[88] RV_PLIC_IE0_0
-    4'b 1111, // index[89] RV_PLIC_IE0_1
-    4'b 0111, // index[90] RV_PLIC_IE0_2
-    4'b 0001, // index[91] RV_PLIC_THRESHOLD0
-    4'b 0001, // index[92] RV_PLIC_CC0
-    4'b 0001  // index[93] RV_PLIC_MSIP0
+    4'b 0001, // index[88] RV_PLIC_PRIO82
+    4'b 0001, // index[89] RV_PLIC_PRIO83
+    4'b 1111, // index[90] RV_PLIC_IE0_0
+    4'b 1111, // index[91] RV_PLIC_IE0_1
+    4'b 0111, // index[92] RV_PLIC_IE0_2
+    4'b 0001, // index[93] RV_PLIC_THRESHOLD0
+    4'b 0001, // index[94] RV_PLIC_CC0
+    4'b 0001  // index[95] RV_PLIC_MSIP0
   };
 endpackage
 
diff --git a/hw/top_earlgrey/ip/rv_plic/rtl/autogen/rv_plic_reg_top.sv b/hw/top_earlgrey/ip/rv_plic/rtl/autogen/rv_plic_reg_top.sv
index f59d278..e3b8374 100644
--- a/hw/top_earlgrey/ip/rv_plic/rtl/autogen/rv_plic_reg_top.sv
+++ b/hw/top_earlgrey/ip/rv_plic/rtl/autogen/rv_plic_reg_top.sv
@@ -153,6 +153,8 @@
   logic ip_2_p_79_qs;
   logic ip_2_p_80_qs;
   logic ip_2_p_81_qs;
+  logic ip_2_p_82_qs;
+  logic ip_2_p_83_qs;
   logic le_0_le_0_qs;
   logic le_0_le_0_wd;
   logic le_0_le_0_we;
@@ -399,6 +401,12 @@
   logic le_2_le_81_qs;
   logic le_2_le_81_wd;
   logic le_2_le_81_we;
+  logic le_2_le_82_qs;
+  logic le_2_le_82_wd;
+  logic le_2_le_82_we;
+  logic le_2_le_83_qs;
+  logic le_2_le_83_wd;
+  logic le_2_le_83_we;
   logic [1:0] prio0_qs;
   logic [1:0] prio0_wd;
   logic prio0_we;
@@ -645,6 +653,12 @@
   logic [1:0] prio81_qs;
   logic [1:0] prio81_wd;
   logic prio81_we;
+  logic [1:0] prio82_qs;
+  logic [1:0] prio82_wd;
+  logic prio82_we;
+  logic [1:0] prio83_qs;
+  logic [1:0] prio83_wd;
+  logic prio83_we;
   logic ie0_0_e_0_qs;
   logic ie0_0_e_0_wd;
   logic ie0_0_e_0_we;
@@ -891,6 +905,12 @@
   logic ie0_2_e_81_qs;
   logic ie0_2_e_81_wd;
   logic ie0_2_e_81_we;
+  logic ie0_2_e_82_qs;
+  logic ie0_2_e_82_wd;
+  logic ie0_2_e_82_we;
+  logic ie0_2_e_83_qs;
+  logic ie0_2_e_83_wd;
+  logic ie0_2_e_83_we;
   logic [1:0] threshold0_qs;
   logic [1:0] threshold0_wd;
   logic threshold0_we;
@@ -2963,6 +2983,56 @@
   );
 
 
+  // F[p_82]: 18:18
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RO"),
+    .RESVAL  (1'h0)
+  ) u_ip_2_p_82 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    .we     (1'b0),
+    .wd     ('0  ),
+
+    // from internal hardware
+    .de     (hw2reg.ip[82].de),
+    .d      (hw2reg.ip[82].d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (ip_2_p_82_qs)
+  );
+
+
+  // F[p_83]: 19:19
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RO"),
+    .RESVAL  (1'h0)
+  ) u_ip_2_p_83 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    .we     (1'b0),
+    .wd     ('0  ),
+
+    // from internal hardware
+    .de     (hw2reg.ip[83].de),
+    .d      (hw2reg.ip[83].d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (ip_2_p_83_qs)
+  );
+
+
 
 
   // Subregister 0 of Multireg le
@@ -5106,6 +5176,58 @@
   );
 
 
+  // F[le_82]: 18:18
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_le_2_le_82 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (le_2_le_82_we),
+    .wd     (le_2_le_82_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.le[82].q ),
+
+    // to register interface (read)
+    .qs     (le_2_le_82_qs)
+  );
+
+
+  // F[le_83]: 19:19
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_le_2_le_83 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (le_2_le_83_we),
+    .wd     (le_2_le_83_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.le[83].q ),
+
+    // to register interface (read)
+    .qs     (le_2_le_83_qs)
+  );
+
+
 
   // R[prio0]: V(False)
 
@@ -7321,6 +7443,60 @@
   );
 
 
+  // R[prio82]: V(False)
+
+  prim_subreg #(
+    .DW      (2),
+    .SWACCESS("RW"),
+    .RESVAL  (2'h0)
+  ) u_prio82 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (prio82_we),
+    .wd     (prio82_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.prio82.q ),
+
+    // to register interface (read)
+    .qs     (prio82_qs)
+  );
+
+
+  // R[prio83]: V(False)
+
+  prim_subreg #(
+    .DW      (2),
+    .SWACCESS("RW"),
+    .RESVAL  (2'h0)
+  ) u_prio83 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (prio83_we),
+    .wd     (prio83_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.prio83.q ),
+
+    // to register interface (read)
+    .qs     (prio83_qs)
+  );
+
+
 
   // Subregister 0 of Multireg ie0
   // R[ie0_0]: V(False)
@@ -9463,6 +9639,58 @@
   );
 
 
+  // F[e_82]: 18:18
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_ie0_2_e_82 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (ie0_2_e_82_we),
+    .wd     (ie0_2_e_82_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.ie0[82].q ),
+
+    // to register interface (read)
+    .qs     (ie0_2_e_82_qs)
+  );
+
+
+  // F[e_83]: 19:19
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_ie0_2_e_83 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (ie0_2_e_83_we),
+    .wd     (ie0_2_e_83_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.ie0[83].q ),
+
+    // to register interface (read)
+    .qs     (ie0_2_e_83_qs)
+  );
+
+
 
   // R[threshold0]: V(False)
 
@@ -9536,7 +9764,7 @@
 
 
 
-  logic [93:0] addr_hit;
+  logic [95:0] addr_hit;
   always_comb begin
     addr_hit = '0;
     addr_hit[ 0] = (reg_addr == RV_PLIC_IP_0_OFFSET);
@@ -9627,12 +9855,14 @@
     addr_hit[85] = (reg_addr == RV_PLIC_PRIO79_OFFSET);
     addr_hit[86] = (reg_addr == RV_PLIC_PRIO80_OFFSET);
     addr_hit[87] = (reg_addr == RV_PLIC_PRIO81_OFFSET);
-    addr_hit[88] = (reg_addr == RV_PLIC_IE0_0_OFFSET);
-    addr_hit[89] = (reg_addr == RV_PLIC_IE0_1_OFFSET);
-    addr_hit[90] = (reg_addr == RV_PLIC_IE0_2_OFFSET);
-    addr_hit[91] = (reg_addr == RV_PLIC_THRESHOLD0_OFFSET);
-    addr_hit[92] = (reg_addr == RV_PLIC_CC0_OFFSET);
-    addr_hit[93] = (reg_addr == RV_PLIC_MSIP0_OFFSET);
+    addr_hit[88] = (reg_addr == RV_PLIC_PRIO82_OFFSET);
+    addr_hit[89] = (reg_addr == RV_PLIC_PRIO83_OFFSET);
+    addr_hit[90] = (reg_addr == RV_PLIC_IE0_0_OFFSET);
+    addr_hit[91] = (reg_addr == RV_PLIC_IE0_1_OFFSET);
+    addr_hit[92] = (reg_addr == RV_PLIC_IE0_2_OFFSET);
+    addr_hit[93] = (reg_addr == RV_PLIC_THRESHOLD0_OFFSET);
+    addr_hit[94] = (reg_addr == RV_PLIC_CC0_OFFSET);
+    addr_hit[95] = (reg_addr == RV_PLIC_MSIP0_OFFSET);
   end
 
   assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ;
@@ -9734,6 +9964,8 @@
     if (addr_hit[91] && reg_we && (RV_PLIC_PERMIT[91] != (RV_PLIC_PERMIT[91] & reg_be))) wr_err = 1'b1 ;
     if (addr_hit[92] && reg_we && (RV_PLIC_PERMIT[92] != (RV_PLIC_PERMIT[92] & reg_be))) wr_err = 1'b1 ;
     if (addr_hit[93] && reg_we && (RV_PLIC_PERMIT[93] != (RV_PLIC_PERMIT[93] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[94] && reg_we && (RV_PLIC_PERMIT[94] != (RV_PLIC_PERMIT[94] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[95] && reg_we && (RV_PLIC_PERMIT[95] != (RV_PLIC_PERMIT[95] & reg_be))) wr_err = 1'b1 ;
   end
 
 
@@ -9818,6 +10050,8 @@
 
 
 
+
+
   assign le_0_le_0_we = addr_hit[3] & reg_we & ~wr_err;
   assign le_0_le_0_wd = reg_wdata[0];
 
@@ -10064,6 +10298,12 @@
   assign le_2_le_81_we = addr_hit[5] & reg_we & ~wr_err;
   assign le_2_le_81_wd = reg_wdata[17];
 
+  assign le_2_le_82_we = addr_hit[5] & reg_we & ~wr_err;
+  assign le_2_le_82_wd = reg_wdata[18];
+
+  assign le_2_le_83_we = addr_hit[5] & reg_we & ~wr_err;
+  assign le_2_le_83_wd = reg_wdata[19];
+
   assign prio0_we = addr_hit[6] & reg_we & ~wr_err;
   assign prio0_wd = reg_wdata[1:0];
 
@@ -10310,260 +10550,272 @@
   assign prio81_we = addr_hit[87] & reg_we & ~wr_err;
   assign prio81_wd = reg_wdata[1:0];
 
-  assign ie0_0_e_0_we = addr_hit[88] & reg_we & ~wr_err;
+  assign prio82_we = addr_hit[88] & reg_we & ~wr_err;
+  assign prio82_wd = reg_wdata[1:0];
+
+  assign prio83_we = addr_hit[89] & reg_we & ~wr_err;
+  assign prio83_wd = reg_wdata[1:0];
+
+  assign ie0_0_e_0_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_0_wd = reg_wdata[0];
 
-  assign ie0_0_e_1_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_1_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_1_wd = reg_wdata[1];
 
-  assign ie0_0_e_2_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_2_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_2_wd = reg_wdata[2];
 
-  assign ie0_0_e_3_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_3_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_3_wd = reg_wdata[3];
 
-  assign ie0_0_e_4_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_4_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_4_wd = reg_wdata[4];
 
-  assign ie0_0_e_5_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_5_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_5_wd = reg_wdata[5];
 
-  assign ie0_0_e_6_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_6_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_6_wd = reg_wdata[6];
 
-  assign ie0_0_e_7_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_7_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_7_wd = reg_wdata[7];
 
-  assign ie0_0_e_8_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_8_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_8_wd = reg_wdata[8];
 
-  assign ie0_0_e_9_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_9_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_9_wd = reg_wdata[9];
 
-  assign ie0_0_e_10_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_10_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_10_wd = reg_wdata[10];
 
-  assign ie0_0_e_11_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_11_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_11_wd = reg_wdata[11];
 
-  assign ie0_0_e_12_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_12_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_12_wd = reg_wdata[12];
 
-  assign ie0_0_e_13_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_13_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_13_wd = reg_wdata[13];
 
-  assign ie0_0_e_14_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_14_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_14_wd = reg_wdata[14];
 
-  assign ie0_0_e_15_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_15_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_15_wd = reg_wdata[15];
 
-  assign ie0_0_e_16_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_16_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_16_wd = reg_wdata[16];
 
-  assign ie0_0_e_17_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_17_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_17_wd = reg_wdata[17];
 
-  assign ie0_0_e_18_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_18_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_18_wd = reg_wdata[18];
 
-  assign ie0_0_e_19_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_19_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_19_wd = reg_wdata[19];
 
-  assign ie0_0_e_20_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_20_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_20_wd = reg_wdata[20];
 
-  assign ie0_0_e_21_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_21_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_21_wd = reg_wdata[21];
 
-  assign ie0_0_e_22_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_22_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_22_wd = reg_wdata[22];
 
-  assign ie0_0_e_23_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_23_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_23_wd = reg_wdata[23];
 
-  assign ie0_0_e_24_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_24_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_24_wd = reg_wdata[24];
 
-  assign ie0_0_e_25_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_25_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_25_wd = reg_wdata[25];
 
-  assign ie0_0_e_26_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_26_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_26_wd = reg_wdata[26];
 
-  assign ie0_0_e_27_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_27_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_27_wd = reg_wdata[27];
 
-  assign ie0_0_e_28_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_28_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_28_wd = reg_wdata[28];
 
-  assign ie0_0_e_29_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_29_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_29_wd = reg_wdata[29];
 
-  assign ie0_0_e_30_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_30_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_30_wd = reg_wdata[30];
 
-  assign ie0_0_e_31_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie0_0_e_31_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie0_0_e_31_wd = reg_wdata[31];
 
-  assign ie0_1_e_32_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_32_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_32_wd = reg_wdata[0];
 
-  assign ie0_1_e_33_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_33_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_33_wd = reg_wdata[1];
 
-  assign ie0_1_e_34_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_34_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_34_wd = reg_wdata[2];
 
-  assign ie0_1_e_35_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_35_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_35_wd = reg_wdata[3];
 
-  assign ie0_1_e_36_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_36_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_36_wd = reg_wdata[4];
 
-  assign ie0_1_e_37_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_37_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_37_wd = reg_wdata[5];
 
-  assign ie0_1_e_38_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_38_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_38_wd = reg_wdata[6];
 
-  assign ie0_1_e_39_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_39_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_39_wd = reg_wdata[7];
 
-  assign ie0_1_e_40_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_40_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_40_wd = reg_wdata[8];
 
-  assign ie0_1_e_41_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_41_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_41_wd = reg_wdata[9];
 
-  assign ie0_1_e_42_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_42_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_42_wd = reg_wdata[10];
 
-  assign ie0_1_e_43_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_43_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_43_wd = reg_wdata[11];
 
-  assign ie0_1_e_44_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_44_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_44_wd = reg_wdata[12];
 
-  assign ie0_1_e_45_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_45_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_45_wd = reg_wdata[13];
 
-  assign ie0_1_e_46_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_46_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_46_wd = reg_wdata[14];
 
-  assign ie0_1_e_47_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_47_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_47_wd = reg_wdata[15];
 
-  assign ie0_1_e_48_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_48_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_48_wd = reg_wdata[16];
 
-  assign ie0_1_e_49_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_49_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_49_wd = reg_wdata[17];
 
-  assign ie0_1_e_50_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_50_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_50_wd = reg_wdata[18];
 
-  assign ie0_1_e_51_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_51_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_51_wd = reg_wdata[19];
 
-  assign ie0_1_e_52_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_52_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_52_wd = reg_wdata[20];
 
-  assign ie0_1_e_53_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_53_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_53_wd = reg_wdata[21];
 
-  assign ie0_1_e_54_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_54_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_54_wd = reg_wdata[22];
 
-  assign ie0_1_e_55_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_55_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_55_wd = reg_wdata[23];
 
-  assign ie0_1_e_56_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_56_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_56_wd = reg_wdata[24];
 
-  assign ie0_1_e_57_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_57_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_57_wd = reg_wdata[25];
 
-  assign ie0_1_e_58_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_58_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_58_wd = reg_wdata[26];
 
-  assign ie0_1_e_59_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_59_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_59_wd = reg_wdata[27];
 
-  assign ie0_1_e_60_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_60_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_60_wd = reg_wdata[28];
 
-  assign ie0_1_e_61_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_61_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_61_wd = reg_wdata[29];
 
-  assign ie0_1_e_62_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_62_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_62_wd = reg_wdata[30];
 
-  assign ie0_1_e_63_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie0_1_e_63_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie0_1_e_63_wd = reg_wdata[31];
 
-  assign ie0_2_e_64_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_64_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_64_wd = reg_wdata[0];
 
-  assign ie0_2_e_65_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_65_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_65_wd = reg_wdata[1];
 
-  assign ie0_2_e_66_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_66_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_66_wd = reg_wdata[2];
 
-  assign ie0_2_e_67_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_67_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_67_wd = reg_wdata[3];
 
-  assign ie0_2_e_68_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_68_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_68_wd = reg_wdata[4];
 
-  assign ie0_2_e_69_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_69_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_69_wd = reg_wdata[5];
 
-  assign ie0_2_e_70_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_70_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_70_wd = reg_wdata[6];
 
-  assign ie0_2_e_71_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_71_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_71_wd = reg_wdata[7];
 
-  assign ie0_2_e_72_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_72_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_72_wd = reg_wdata[8];
 
-  assign ie0_2_e_73_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_73_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_73_wd = reg_wdata[9];
 
-  assign ie0_2_e_74_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_74_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_74_wd = reg_wdata[10];
 
-  assign ie0_2_e_75_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_75_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_75_wd = reg_wdata[11];
 
-  assign ie0_2_e_76_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_76_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_76_wd = reg_wdata[12];
 
-  assign ie0_2_e_77_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_77_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_77_wd = reg_wdata[13];
 
-  assign ie0_2_e_78_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_78_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_78_wd = reg_wdata[14];
 
-  assign ie0_2_e_79_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_79_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_79_wd = reg_wdata[15];
 
-  assign ie0_2_e_80_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_80_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_80_wd = reg_wdata[16];
 
-  assign ie0_2_e_81_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie0_2_e_81_we = addr_hit[92] & reg_we & ~wr_err;
   assign ie0_2_e_81_wd = reg_wdata[17];
 
-  assign threshold0_we = addr_hit[91] & reg_we & ~wr_err;
+  assign ie0_2_e_82_we = addr_hit[92] & reg_we & ~wr_err;
+  assign ie0_2_e_82_wd = reg_wdata[18];
+
+  assign ie0_2_e_83_we = addr_hit[92] & reg_we & ~wr_err;
+  assign ie0_2_e_83_wd = reg_wdata[19];
+
+  assign threshold0_we = addr_hit[93] & reg_we & ~wr_err;
   assign threshold0_wd = reg_wdata[1:0];
 
-  assign cc0_we = addr_hit[92] & reg_we & ~wr_err;
+  assign cc0_we = addr_hit[94] & reg_we & ~wr_err;
   assign cc0_wd = reg_wdata[6:0];
-  assign cc0_re = addr_hit[92] && reg_re;
+  assign cc0_re = addr_hit[94] && reg_re;
 
-  assign msip0_we = addr_hit[93] & reg_we & ~wr_err;
+  assign msip0_we = addr_hit[95] & reg_we & ~wr_err;
   assign msip0_wd = reg_wdata[0];
 
   // Read data return
@@ -10659,6 +10911,8 @@
         reg_rdata_next[15] = ip_2_p_79_qs;
         reg_rdata_next[16] = ip_2_p_80_qs;
         reg_rdata_next[17] = ip_2_p_81_qs;
+        reg_rdata_next[18] = ip_2_p_82_qs;
+        reg_rdata_next[19] = ip_2_p_83_qs;
       end
 
       addr_hit[3]: begin
@@ -10750,6 +11004,8 @@
         reg_rdata_next[15] = le_2_le_79_qs;
         reg_rdata_next[16] = le_2_le_80_qs;
         reg_rdata_next[17] = le_2_le_81_qs;
+        reg_rdata_next[18] = le_2_le_82_qs;
+        reg_rdata_next[19] = le_2_le_83_qs;
       end
 
       addr_hit[6]: begin
@@ -11081,6 +11337,14 @@
       end
 
       addr_hit[88]: begin
+        reg_rdata_next[1:0] = prio82_qs;
+      end
+
+      addr_hit[89]: begin
+        reg_rdata_next[1:0] = prio83_qs;
+      end
+
+      addr_hit[90]: begin
         reg_rdata_next[0] = ie0_0_e_0_qs;
         reg_rdata_next[1] = ie0_0_e_1_qs;
         reg_rdata_next[2] = ie0_0_e_2_qs;
@@ -11115,7 +11379,7 @@
         reg_rdata_next[31] = ie0_0_e_31_qs;
       end
 
-      addr_hit[89]: begin
+      addr_hit[91]: begin
         reg_rdata_next[0] = ie0_1_e_32_qs;
         reg_rdata_next[1] = ie0_1_e_33_qs;
         reg_rdata_next[2] = ie0_1_e_34_qs;
@@ -11150,7 +11414,7 @@
         reg_rdata_next[31] = ie0_1_e_63_qs;
       end
 
-      addr_hit[90]: begin
+      addr_hit[92]: begin
         reg_rdata_next[0] = ie0_2_e_64_qs;
         reg_rdata_next[1] = ie0_2_e_65_qs;
         reg_rdata_next[2] = ie0_2_e_66_qs;
@@ -11169,17 +11433,19 @@
         reg_rdata_next[15] = ie0_2_e_79_qs;
         reg_rdata_next[16] = ie0_2_e_80_qs;
         reg_rdata_next[17] = ie0_2_e_81_qs;
-      end
-
-      addr_hit[91]: begin
-        reg_rdata_next[1:0] = threshold0_qs;
-      end
-
-      addr_hit[92]: begin
-        reg_rdata_next[6:0] = cc0_qs;
+        reg_rdata_next[18] = ie0_2_e_82_qs;
+        reg_rdata_next[19] = ie0_2_e_83_qs;
       end
 
       addr_hit[93]: begin
+        reg_rdata_next[1:0] = threshold0_qs;
+      end
+
+      addr_hit[94]: begin
+        reg_rdata_next[6:0] = cc0_qs;
+      end
+
+      addr_hit[95]: begin
         reg_rdata_next[0] = msip0_qs;
       end
 
diff --git a/hw/top_earlgrey/ip/xbar_main/data/autogen/xbar_main.gen.hjson b/hw/top_earlgrey/ip/xbar_main/data/autogen/xbar_main.gen.hjson
index 7afbb82..3a4156f 100644
--- a/hw/top_earlgrey/ip/xbar_main/data/autogen/xbar_main.gen.hjson
+++ b/hw/top_earlgrey/ip/xbar_main/data/autogen/xbar_main.gen.hjson
@@ -51,6 +51,7 @@
       alert_handler
       nmi_gen
       otbn
+      keymgr
     ]
     dm_sba:
     [
@@ -373,6 +374,24 @@
       stub: false
       pipeline: "true"
     }
+    {
+      name: keymgr
+      type: device
+      clock: clk_main_i
+      reset: rst_main_ni
+      pipeline_byp: "false"
+      inst_type: keymgr
+      addr_range:
+      [
+        {
+          base_addr: 0x401a0000
+          size_byte: 0x1000
+        }
+      ]
+      xbar: false
+      stub: false
+      pipeline: "true"
+    }
   ]
   clock: clk_main_i
   type: xbar
diff --git a/hw/top_earlgrey/ip/xbar_main/data/autogen/xbar_main.hjson b/hw/top_earlgrey/ip/xbar_main/data/autogen/xbar_main.hjson
index 0fa41d3..02c0331 100644
--- a/hw/top_earlgrey/ip/xbar_main/data/autogen/xbar_main.hjson
+++ b/hw/top_earlgrey/ip/xbar_main/data/autogen/xbar_main.hjson
@@ -115,5 +115,11 @@
       act:    "req"
       package: "tlul_pkg"
     }
+    { struct: "tl"
+      type:   "req_rsp"
+      name:   "tl_keymgr"
+      act:    "req"
+      package: "tlul_pkg"
+    }
   ]
 }
diff --git a/hw/top_earlgrey/ip/xbar_main/dv/autogen/tb__xbar_connect.sv b/hw/top_earlgrey/ip/xbar_main/dv/autogen/tb__xbar_connect.sv
index 0429508..e12f473 100644
--- a/hw/top_earlgrey/ip/xbar_main/dv/autogen/tb__xbar_connect.sv
+++ b/hw/top_earlgrey/ip/xbar_main/dv/autogen/tb__xbar_connect.sv
@@ -36,3 +36,4 @@
 `CONNECT_TL_DEVICE_IF(alert_handler, dut, clk_main_i, rst_n)
 `CONNECT_TL_DEVICE_IF(nmi_gen, dut, clk_main_i, rst_n)
 `CONNECT_TL_DEVICE_IF(otbn, dut, clk_main_i, rst_n)
+`CONNECT_TL_DEVICE_IF(keymgr, dut, clk_main_i, rst_n)
diff --git a/hw/top_earlgrey/ip/xbar_main/dv/autogen/xbar_env_pkg__params.sv b/hw/top_earlgrey/ip/xbar_main/dv/autogen/xbar_env_pkg__params.sv
index 9c8604c..cba37ef 100644
--- a/hw/top_earlgrey/ip/xbar_main/dv/autogen/xbar_env_pkg__params.sv
+++ b/hw/top_earlgrey/ip/xbar_main/dv/autogen/xbar_env_pkg__params.sv
@@ -53,6 +53,9 @@
     }},
     '{"otbn", '{
         '{32'h50000000, 32'h503fffff}
+    }},
+    '{"keymgr", '{
+        '{32'h401a0000, 32'h401a0fff}
 }}};
 
   // List of Xbar hosts
@@ -77,7 +80,8 @@
         "padctrl",
         "alert_handler",
         "nmi_gen",
-        "otbn"}}
+        "otbn",
+        "keymgr"}}
     ,
     '{"dm_sba", 2, '{
         "rom",
diff --git a/hw/top_earlgrey/ip/xbar_main/dv/autogen/xbar_main_bind.sv b/hw/top_earlgrey/ip/xbar_main/dv/autogen/xbar_main_bind.sv
index 10e0c6c..00c05a3 100644
--- a/hw/top_earlgrey/ip/xbar_main/dv/autogen/xbar_main_bind.sv
+++ b/hw/top_earlgrey/ip/xbar_main/dv/autogen/xbar_main_bind.sv
@@ -110,5 +110,11 @@
     .h2d    (tl_otbn_o),
     .d2h    (tl_otbn_i)
   );
+  bind xbar_main tlul_assert #(.EndpointType("Host")) tlul_assert_device_keymgr (
+    .clk_i  (clk_main_i),
+    .rst_ni (rst_main_ni),
+    .h2d    (tl_keymgr_o),
+    .d2h    (tl_keymgr_i)
+  );
 
 endmodule
diff --git a/hw/top_earlgrey/ip/xbar_main/rtl/autogen/tl_main_pkg.sv b/hw/top_earlgrey/ip/xbar_main/rtl/autogen/tl_main_pkg.sv
index a777bf3..f9483a6 100644
--- a/hw/top_earlgrey/ip/xbar_main/rtl/autogen/tl_main_pkg.sv
+++ b/hw/top_earlgrey/ip/xbar_main/rtl/autogen/tl_main_pkg.sv
@@ -27,6 +27,7 @@
   localparam logic [31:0] ADDR_SPACE_ALERT_HANDLER = 32'h 40130000;
   localparam logic [31:0] ADDR_SPACE_NMI_GEN       = 32'h 40140000;
   localparam logic [31:0] ADDR_SPACE_OTBN          = 32'h 50000000;
+  localparam logic [31:0] ADDR_SPACE_KEYMGR        = 32'h 401a0000;
 
   localparam logic [31:0] ADDR_MASK_ROM           = 32'h 00003fff;
   localparam logic [31:0] ADDR_MASK_DEBUG_MEM     = 32'h 00000fff;
@@ -49,9 +50,10 @@
   localparam logic [31:0] ADDR_MASK_ALERT_HANDLER = 32'h 00000fff;
   localparam logic [31:0] ADDR_MASK_NMI_GEN       = 32'h 00000fff;
   localparam logic [31:0] ADDR_MASK_OTBN          = 32'h 003fffff;
+  localparam logic [31:0] ADDR_MASK_KEYMGR        = 32'h 00000fff;
 
   localparam int N_HOST   = 3;
-  localparam int N_DEVICE = 14;
+  localparam int N_DEVICE = 15;
 
   typedef enum int {
     TlRom = 0,
@@ -67,7 +69,8 @@
     TlPadctrl = 10,
     TlAlertHandler = 11,
     TlNmiGen = 12,
-    TlOtbn = 13
+    TlOtbn = 13,
+    TlKeymgr = 14
   } tl_device_e;
 
   typedef enum int {
diff --git a/hw/top_earlgrey/ip/xbar_main/rtl/autogen/xbar_main.sv b/hw/top_earlgrey/ip/xbar_main/rtl/autogen/xbar_main.sv
index 0e8c03f..b697c6d 100644
--- a/hw/top_earlgrey/ip/xbar_main/rtl/autogen/xbar_main.sv
+++ b/hw/top_earlgrey/ip/xbar_main/rtl/autogen/xbar_main.sv
@@ -7,74 +7,75 @@
 //
 // Interconnect
 // corei
-//   -> s1n_17
-//     -> sm1_18
-//       -> rom
+//   -> s1n_18
 //     -> sm1_19
-//       -> debug_mem
+//       -> rom
 //     -> sm1_20
-//       -> ram_main
+//       -> debug_mem
 //     -> sm1_21
+//       -> ram_main
+//     -> sm1_22
 //       -> eflash
 // cored
-//   -> s1n_22
-//     -> sm1_18
-//       -> rom
+//   -> s1n_23
 //     -> sm1_19
-//       -> debug_mem
-//     -> sm1_20
-//       -> ram_main
-//     -> sm1_21
-//       -> eflash
-//     -> sm1_24
-//       -> asf_23
-//         -> peri
-//     -> sm1_25
-//       -> flash_ctrl
-//     -> sm1_26
-//       -> aes
-//     -> sm1_27
-//       -> hmac
-//     -> sm1_28
-//       -> rv_plic
-//     -> sm1_29
-//       -> pinmux
-//     -> sm1_30
-//       -> padctrl
-//     -> sm1_31
-//       -> alert_handler
-//     -> sm1_32
-//       -> nmi_gen
-//     -> sm1_33
-//       -> otbn
-// dm_sba
-//   -> s1n_34
-//     -> sm1_18
 //       -> rom
 //     -> sm1_20
-//       -> ram_main
+//       -> debug_mem
 //     -> sm1_21
+//       -> ram_main
+//     -> sm1_22
 //       -> eflash
-//     -> sm1_24
-//       -> asf_23
-//         -> peri
 //     -> sm1_25
-//       -> flash_ctrl
+//       -> asf_24
+//         -> peri
 //     -> sm1_26
-//       -> aes
+//       -> flash_ctrl
 //     -> sm1_27
-//       -> hmac
+//       -> aes
 //     -> sm1_28
-//       -> rv_plic
+//       -> hmac
 //     -> sm1_29
-//       -> pinmux
+//       -> rv_plic
 //     -> sm1_30
-//       -> padctrl
+//       -> pinmux
 //     -> sm1_31
-//       -> alert_handler
+//       -> padctrl
 //     -> sm1_32
-//       -> nmi_gen
+//       -> alert_handler
 //     -> sm1_33
+//       -> nmi_gen
+//     -> sm1_34
+//       -> otbn
+//     -> keymgr
+// dm_sba
+//   -> s1n_35
+//     -> sm1_19
+//       -> rom
+//     -> sm1_21
+//       -> ram_main
+//     -> sm1_22
+//       -> eflash
+//     -> sm1_25
+//       -> asf_24
+//         -> peri
+//     -> sm1_26
+//       -> flash_ctrl
+//     -> sm1_27
+//       -> aes
+//     -> sm1_28
+//       -> hmac
+//     -> sm1_29
+//       -> rv_plic
+//     -> sm1_30
+//       -> pinmux
+//     -> sm1_31
+//       -> padctrl
+//     -> sm1_32
+//       -> alert_handler
+//     -> sm1_33
+//       -> nmi_gen
+//     -> sm1_34
 //       -> otbn
 
 module xbar_main (
@@ -120,6 +121,8 @@
   input  tlul_pkg::tl_d2h_t tl_nmi_gen_i,
   output tlul_pkg::tl_h2d_t tl_otbn_o,
   input  tlul_pkg::tl_d2h_t tl_otbn_i,
+  output tlul_pkg::tl_h2d_t tl_keymgr_o,
+  input  tlul_pkg::tl_d2h_t tl_keymgr_i,
 
   input scanmode_i
 );
@@ -132,33 +135,26 @@
   logic unused_scanmode;
   assign unused_scanmode = scanmode_i;
 
-  tl_h2d_t tl_s1n_17_us_h2d ;
-  tl_d2h_t tl_s1n_17_us_d2h ;
+  tl_h2d_t tl_s1n_18_us_h2d ;
+  tl_d2h_t tl_s1n_18_us_d2h ;
 
 
-  tl_h2d_t tl_s1n_17_ds_h2d [4];
-  tl_d2h_t tl_s1n_17_ds_d2h [4];
+  tl_h2d_t tl_s1n_18_ds_h2d [4];
+  tl_d2h_t tl_s1n_18_ds_d2h [4];
 
   // Create steering signal
-  logic [2:0] dev_sel_s1n_17;
+  logic [2:0] dev_sel_s1n_18;
 
 
-  tl_h2d_t tl_sm1_18_us_h2d [3];
-  tl_d2h_t tl_sm1_18_us_d2h [3];
-
-  tl_h2d_t tl_sm1_18_ds_h2d ;
-  tl_d2h_t tl_sm1_18_ds_d2h ;
-
-
-  tl_h2d_t tl_sm1_19_us_h2d [2];
-  tl_d2h_t tl_sm1_19_us_d2h [2];
+  tl_h2d_t tl_sm1_19_us_h2d [3];
+  tl_d2h_t tl_sm1_19_us_d2h [3];
 
   tl_h2d_t tl_sm1_19_ds_h2d ;
   tl_d2h_t tl_sm1_19_ds_d2h ;
 
 
-  tl_h2d_t tl_sm1_20_us_h2d [3];
-  tl_d2h_t tl_sm1_20_us_d2h [3];
+  tl_h2d_t tl_sm1_20_us_h2d [2];
+  tl_d2h_t tl_sm1_20_us_d2h [2];
 
   tl_h2d_t tl_sm1_20_ds_h2d ;
   tl_d2h_t tl_sm1_20_ds_d2h ;
@@ -170,27 +166,27 @@
   tl_h2d_t tl_sm1_21_ds_h2d ;
   tl_d2h_t tl_sm1_21_ds_d2h ;
 
-  tl_h2d_t tl_s1n_22_us_h2d ;
-  tl_d2h_t tl_s1n_22_us_d2h ;
+
+  tl_h2d_t tl_sm1_22_us_h2d [3];
+  tl_d2h_t tl_sm1_22_us_d2h [3];
+
+  tl_h2d_t tl_sm1_22_ds_h2d ;
+  tl_d2h_t tl_sm1_22_ds_d2h ;
+
+  tl_h2d_t tl_s1n_23_us_h2d ;
+  tl_d2h_t tl_s1n_23_us_d2h ;
 
 
-  tl_h2d_t tl_s1n_22_ds_h2d [14];
-  tl_d2h_t tl_s1n_22_ds_d2h [14];
+  tl_h2d_t tl_s1n_23_ds_h2d [15];
+  tl_d2h_t tl_s1n_23_ds_d2h [15];
 
   // Create steering signal
-  logic [3:0] dev_sel_s1n_22;
+  logic [3:0] dev_sel_s1n_23;
 
-  tl_h2d_t tl_asf_23_us_h2d ;
-  tl_d2h_t tl_asf_23_us_d2h ;
-  tl_h2d_t tl_asf_23_ds_h2d ;
-  tl_d2h_t tl_asf_23_ds_d2h ;
-
-
-  tl_h2d_t tl_sm1_24_us_h2d [2];
-  tl_d2h_t tl_sm1_24_us_d2h [2];
-
-  tl_h2d_t tl_sm1_24_ds_h2d ;
-  tl_d2h_t tl_sm1_24_ds_d2h ;
+  tl_h2d_t tl_asf_24_us_h2d ;
+  tl_d2h_t tl_asf_24_us_d2h ;
+  tl_h2d_t tl_asf_24_ds_h2d ;
+  tl_d2h_t tl_asf_24_ds_d2h ;
 
 
   tl_h2d_t tl_sm1_25_us_h2d [2];
@@ -255,294 +251,307 @@
   tl_h2d_t tl_sm1_33_ds_h2d ;
   tl_d2h_t tl_sm1_33_ds_d2h ;
 
-  tl_h2d_t tl_s1n_34_us_h2d ;
-  tl_d2h_t tl_s1n_34_us_d2h ;
+
+  tl_h2d_t tl_sm1_34_us_h2d [2];
+  tl_d2h_t tl_sm1_34_us_d2h [2];
+
+  tl_h2d_t tl_sm1_34_ds_h2d ;
+  tl_d2h_t tl_sm1_34_ds_d2h ;
+
+  tl_h2d_t tl_s1n_35_us_h2d ;
+  tl_d2h_t tl_s1n_35_us_d2h ;
 
 
-  tl_h2d_t tl_s1n_34_ds_h2d [13];
-  tl_d2h_t tl_s1n_34_ds_d2h [13];
+  tl_h2d_t tl_s1n_35_ds_h2d [13];
+  tl_d2h_t tl_s1n_35_ds_d2h [13];
 
   // Create steering signal
-  logic [3:0] dev_sel_s1n_34;
+  logic [3:0] dev_sel_s1n_35;
 
 
 
-  assign tl_sm1_18_us_h2d[0] = tl_s1n_17_ds_h2d[0];
-  assign tl_s1n_17_ds_d2h[0] = tl_sm1_18_us_d2h[0];
+  assign tl_sm1_19_us_h2d[0] = tl_s1n_18_ds_h2d[0];
+  assign tl_s1n_18_ds_d2h[0] = tl_sm1_19_us_d2h[0];
 
-  assign tl_sm1_19_us_h2d[0] = tl_s1n_17_ds_h2d[1];
-  assign tl_s1n_17_ds_d2h[1] = tl_sm1_19_us_d2h[0];
+  assign tl_sm1_20_us_h2d[0] = tl_s1n_18_ds_h2d[1];
+  assign tl_s1n_18_ds_d2h[1] = tl_sm1_20_us_d2h[0];
 
-  assign tl_sm1_20_us_h2d[0] = tl_s1n_17_ds_h2d[2];
-  assign tl_s1n_17_ds_d2h[2] = tl_sm1_20_us_d2h[0];
+  assign tl_sm1_21_us_h2d[0] = tl_s1n_18_ds_h2d[2];
+  assign tl_s1n_18_ds_d2h[2] = tl_sm1_21_us_d2h[0];
 
-  assign tl_sm1_21_us_h2d[0] = tl_s1n_17_ds_h2d[3];
-  assign tl_s1n_17_ds_d2h[3] = tl_sm1_21_us_d2h[0];
+  assign tl_sm1_22_us_h2d[0] = tl_s1n_18_ds_h2d[3];
+  assign tl_s1n_18_ds_d2h[3] = tl_sm1_22_us_d2h[0];
 
-  assign tl_sm1_18_us_h2d[1] = tl_s1n_22_ds_h2d[0];
-  assign tl_s1n_22_ds_d2h[0] = tl_sm1_18_us_d2h[1];
+  assign tl_sm1_19_us_h2d[1] = tl_s1n_23_ds_h2d[0];
+  assign tl_s1n_23_ds_d2h[0] = tl_sm1_19_us_d2h[1];
 
-  assign tl_sm1_19_us_h2d[1] = tl_s1n_22_ds_h2d[1];
-  assign tl_s1n_22_ds_d2h[1] = tl_sm1_19_us_d2h[1];
+  assign tl_sm1_20_us_h2d[1] = tl_s1n_23_ds_h2d[1];
+  assign tl_s1n_23_ds_d2h[1] = tl_sm1_20_us_d2h[1];
 
-  assign tl_sm1_20_us_h2d[1] = tl_s1n_22_ds_h2d[2];
-  assign tl_s1n_22_ds_d2h[2] = tl_sm1_20_us_d2h[1];
+  assign tl_sm1_21_us_h2d[1] = tl_s1n_23_ds_h2d[2];
+  assign tl_s1n_23_ds_d2h[2] = tl_sm1_21_us_d2h[1];
 
-  assign tl_sm1_21_us_h2d[1] = tl_s1n_22_ds_h2d[3];
-  assign tl_s1n_22_ds_d2h[3] = tl_sm1_21_us_d2h[1];
+  assign tl_sm1_22_us_h2d[1] = tl_s1n_23_ds_h2d[3];
+  assign tl_s1n_23_ds_d2h[3] = tl_sm1_22_us_d2h[1];
 
-  assign tl_sm1_24_us_h2d[0] = tl_s1n_22_ds_h2d[4];
-  assign tl_s1n_22_ds_d2h[4] = tl_sm1_24_us_d2h[0];
+  assign tl_sm1_25_us_h2d[0] = tl_s1n_23_ds_h2d[4];
+  assign tl_s1n_23_ds_d2h[4] = tl_sm1_25_us_d2h[0];
 
-  assign tl_sm1_25_us_h2d[0] = tl_s1n_22_ds_h2d[5];
-  assign tl_s1n_22_ds_d2h[5] = tl_sm1_25_us_d2h[0];
+  assign tl_sm1_26_us_h2d[0] = tl_s1n_23_ds_h2d[5];
+  assign tl_s1n_23_ds_d2h[5] = tl_sm1_26_us_d2h[0];
 
-  assign tl_sm1_26_us_h2d[0] = tl_s1n_22_ds_h2d[6];
-  assign tl_s1n_22_ds_d2h[6] = tl_sm1_26_us_d2h[0];
+  assign tl_sm1_27_us_h2d[0] = tl_s1n_23_ds_h2d[6];
+  assign tl_s1n_23_ds_d2h[6] = tl_sm1_27_us_d2h[0];
 
-  assign tl_sm1_27_us_h2d[0] = tl_s1n_22_ds_h2d[7];
-  assign tl_s1n_22_ds_d2h[7] = tl_sm1_27_us_d2h[0];
+  assign tl_sm1_28_us_h2d[0] = tl_s1n_23_ds_h2d[7];
+  assign tl_s1n_23_ds_d2h[7] = tl_sm1_28_us_d2h[0];
 
-  assign tl_sm1_28_us_h2d[0] = tl_s1n_22_ds_h2d[8];
-  assign tl_s1n_22_ds_d2h[8] = tl_sm1_28_us_d2h[0];
+  assign tl_sm1_29_us_h2d[0] = tl_s1n_23_ds_h2d[8];
+  assign tl_s1n_23_ds_d2h[8] = tl_sm1_29_us_d2h[0];
 
-  assign tl_sm1_29_us_h2d[0] = tl_s1n_22_ds_h2d[9];
-  assign tl_s1n_22_ds_d2h[9] = tl_sm1_29_us_d2h[0];
+  assign tl_sm1_30_us_h2d[0] = tl_s1n_23_ds_h2d[9];
+  assign tl_s1n_23_ds_d2h[9] = tl_sm1_30_us_d2h[0];
 
-  assign tl_sm1_30_us_h2d[0] = tl_s1n_22_ds_h2d[10];
-  assign tl_s1n_22_ds_d2h[10] = tl_sm1_30_us_d2h[0];
+  assign tl_sm1_31_us_h2d[0] = tl_s1n_23_ds_h2d[10];
+  assign tl_s1n_23_ds_d2h[10] = tl_sm1_31_us_d2h[0];
 
-  assign tl_sm1_31_us_h2d[0] = tl_s1n_22_ds_h2d[11];
-  assign tl_s1n_22_ds_d2h[11] = tl_sm1_31_us_d2h[0];
+  assign tl_sm1_32_us_h2d[0] = tl_s1n_23_ds_h2d[11];
+  assign tl_s1n_23_ds_d2h[11] = tl_sm1_32_us_d2h[0];
 
-  assign tl_sm1_32_us_h2d[0] = tl_s1n_22_ds_h2d[12];
-  assign tl_s1n_22_ds_d2h[12] = tl_sm1_32_us_d2h[0];
+  assign tl_sm1_33_us_h2d[0] = tl_s1n_23_ds_h2d[12];
+  assign tl_s1n_23_ds_d2h[12] = tl_sm1_33_us_d2h[0];
 
-  assign tl_sm1_33_us_h2d[0] = tl_s1n_22_ds_h2d[13];
-  assign tl_s1n_22_ds_d2h[13] = tl_sm1_33_us_d2h[0];
+  assign tl_sm1_34_us_h2d[0] = tl_s1n_23_ds_h2d[13];
+  assign tl_s1n_23_ds_d2h[13] = tl_sm1_34_us_d2h[0];
 
-  assign tl_sm1_18_us_h2d[2] = tl_s1n_34_ds_h2d[0];
-  assign tl_s1n_34_ds_d2h[0] = tl_sm1_18_us_d2h[2];
+  assign tl_keymgr_o = tl_s1n_23_ds_h2d[14];
+  assign tl_s1n_23_ds_d2h[14] = tl_keymgr_i;
 
-  assign tl_sm1_20_us_h2d[2] = tl_s1n_34_ds_h2d[1];
-  assign tl_s1n_34_ds_d2h[1] = tl_sm1_20_us_d2h[2];
+  assign tl_sm1_19_us_h2d[2] = tl_s1n_35_ds_h2d[0];
+  assign tl_s1n_35_ds_d2h[0] = tl_sm1_19_us_d2h[2];
 
-  assign tl_sm1_21_us_h2d[2] = tl_s1n_34_ds_h2d[2];
-  assign tl_s1n_34_ds_d2h[2] = tl_sm1_21_us_d2h[2];
+  assign tl_sm1_21_us_h2d[2] = tl_s1n_35_ds_h2d[1];
+  assign tl_s1n_35_ds_d2h[1] = tl_sm1_21_us_d2h[2];
 
-  assign tl_sm1_24_us_h2d[1] = tl_s1n_34_ds_h2d[3];
-  assign tl_s1n_34_ds_d2h[3] = tl_sm1_24_us_d2h[1];
+  assign tl_sm1_22_us_h2d[2] = tl_s1n_35_ds_h2d[2];
+  assign tl_s1n_35_ds_d2h[2] = tl_sm1_22_us_d2h[2];
 
-  assign tl_sm1_25_us_h2d[1] = tl_s1n_34_ds_h2d[4];
-  assign tl_s1n_34_ds_d2h[4] = tl_sm1_25_us_d2h[1];
+  assign tl_sm1_25_us_h2d[1] = tl_s1n_35_ds_h2d[3];
+  assign tl_s1n_35_ds_d2h[3] = tl_sm1_25_us_d2h[1];
 
-  assign tl_sm1_26_us_h2d[1] = tl_s1n_34_ds_h2d[5];
-  assign tl_s1n_34_ds_d2h[5] = tl_sm1_26_us_d2h[1];
+  assign tl_sm1_26_us_h2d[1] = tl_s1n_35_ds_h2d[4];
+  assign tl_s1n_35_ds_d2h[4] = tl_sm1_26_us_d2h[1];
 
-  assign tl_sm1_27_us_h2d[1] = tl_s1n_34_ds_h2d[6];
-  assign tl_s1n_34_ds_d2h[6] = tl_sm1_27_us_d2h[1];
+  assign tl_sm1_27_us_h2d[1] = tl_s1n_35_ds_h2d[5];
+  assign tl_s1n_35_ds_d2h[5] = tl_sm1_27_us_d2h[1];
 
-  assign tl_sm1_28_us_h2d[1] = tl_s1n_34_ds_h2d[7];
-  assign tl_s1n_34_ds_d2h[7] = tl_sm1_28_us_d2h[1];
+  assign tl_sm1_28_us_h2d[1] = tl_s1n_35_ds_h2d[6];
+  assign tl_s1n_35_ds_d2h[6] = tl_sm1_28_us_d2h[1];
 
-  assign tl_sm1_29_us_h2d[1] = tl_s1n_34_ds_h2d[8];
-  assign tl_s1n_34_ds_d2h[8] = tl_sm1_29_us_d2h[1];
+  assign tl_sm1_29_us_h2d[1] = tl_s1n_35_ds_h2d[7];
+  assign tl_s1n_35_ds_d2h[7] = tl_sm1_29_us_d2h[1];
 
-  assign tl_sm1_30_us_h2d[1] = tl_s1n_34_ds_h2d[9];
-  assign tl_s1n_34_ds_d2h[9] = tl_sm1_30_us_d2h[1];
+  assign tl_sm1_30_us_h2d[1] = tl_s1n_35_ds_h2d[8];
+  assign tl_s1n_35_ds_d2h[8] = tl_sm1_30_us_d2h[1];
 
-  assign tl_sm1_31_us_h2d[1] = tl_s1n_34_ds_h2d[10];
-  assign tl_s1n_34_ds_d2h[10] = tl_sm1_31_us_d2h[1];
+  assign tl_sm1_31_us_h2d[1] = tl_s1n_35_ds_h2d[9];
+  assign tl_s1n_35_ds_d2h[9] = tl_sm1_31_us_d2h[1];
 
-  assign tl_sm1_32_us_h2d[1] = tl_s1n_34_ds_h2d[11];
-  assign tl_s1n_34_ds_d2h[11] = tl_sm1_32_us_d2h[1];
+  assign tl_sm1_32_us_h2d[1] = tl_s1n_35_ds_h2d[10];
+  assign tl_s1n_35_ds_d2h[10] = tl_sm1_32_us_d2h[1];
 
-  assign tl_sm1_33_us_h2d[1] = tl_s1n_34_ds_h2d[12];
-  assign tl_s1n_34_ds_d2h[12] = tl_sm1_33_us_d2h[1];
+  assign tl_sm1_33_us_h2d[1] = tl_s1n_35_ds_h2d[11];
+  assign tl_s1n_35_ds_d2h[11] = tl_sm1_33_us_d2h[1];
 
-  assign tl_s1n_17_us_h2d = tl_corei_i;
-  assign tl_corei_o = tl_s1n_17_us_d2h;
+  assign tl_sm1_34_us_h2d[1] = tl_s1n_35_ds_h2d[12];
+  assign tl_s1n_35_ds_d2h[12] = tl_sm1_34_us_d2h[1];
 
-  assign tl_rom_o = tl_sm1_18_ds_h2d;
-  assign tl_sm1_18_ds_d2h = tl_rom_i;
+  assign tl_s1n_18_us_h2d = tl_corei_i;
+  assign tl_corei_o = tl_s1n_18_us_d2h;
 
-  assign tl_debug_mem_o = tl_sm1_19_ds_h2d;
-  assign tl_sm1_19_ds_d2h = tl_debug_mem_i;
+  assign tl_rom_o = tl_sm1_19_ds_h2d;
+  assign tl_sm1_19_ds_d2h = tl_rom_i;
 
-  assign tl_ram_main_o = tl_sm1_20_ds_h2d;
-  assign tl_sm1_20_ds_d2h = tl_ram_main_i;
+  assign tl_debug_mem_o = tl_sm1_20_ds_h2d;
+  assign tl_sm1_20_ds_d2h = tl_debug_mem_i;
 
-  assign tl_eflash_o = tl_sm1_21_ds_h2d;
-  assign tl_sm1_21_ds_d2h = tl_eflash_i;
+  assign tl_ram_main_o = tl_sm1_21_ds_h2d;
+  assign tl_sm1_21_ds_d2h = tl_ram_main_i;
 
-  assign tl_s1n_22_us_h2d = tl_cored_i;
-  assign tl_cored_o = tl_s1n_22_us_d2h;
+  assign tl_eflash_o = tl_sm1_22_ds_h2d;
+  assign tl_sm1_22_ds_d2h = tl_eflash_i;
 
-  assign tl_peri_o = tl_asf_23_ds_h2d;
-  assign tl_asf_23_ds_d2h = tl_peri_i;
+  assign tl_s1n_23_us_h2d = tl_cored_i;
+  assign tl_cored_o = tl_s1n_23_us_d2h;
 
-  assign tl_asf_23_us_h2d = tl_sm1_24_ds_h2d;
-  assign tl_sm1_24_ds_d2h = tl_asf_23_us_d2h;
+  assign tl_peri_o = tl_asf_24_ds_h2d;
+  assign tl_asf_24_ds_d2h = tl_peri_i;
 
-  assign tl_flash_ctrl_o = tl_sm1_25_ds_h2d;
-  assign tl_sm1_25_ds_d2h = tl_flash_ctrl_i;
+  assign tl_asf_24_us_h2d = tl_sm1_25_ds_h2d;
+  assign tl_sm1_25_ds_d2h = tl_asf_24_us_d2h;
 
-  assign tl_aes_o = tl_sm1_26_ds_h2d;
-  assign tl_sm1_26_ds_d2h = tl_aes_i;
+  assign tl_flash_ctrl_o = tl_sm1_26_ds_h2d;
+  assign tl_sm1_26_ds_d2h = tl_flash_ctrl_i;
 
-  assign tl_hmac_o = tl_sm1_27_ds_h2d;
-  assign tl_sm1_27_ds_d2h = tl_hmac_i;
+  assign tl_aes_o = tl_sm1_27_ds_h2d;
+  assign tl_sm1_27_ds_d2h = tl_aes_i;
 
-  assign tl_rv_plic_o = tl_sm1_28_ds_h2d;
-  assign tl_sm1_28_ds_d2h = tl_rv_plic_i;
+  assign tl_hmac_o = tl_sm1_28_ds_h2d;
+  assign tl_sm1_28_ds_d2h = tl_hmac_i;
 
-  assign tl_pinmux_o = tl_sm1_29_ds_h2d;
-  assign tl_sm1_29_ds_d2h = tl_pinmux_i;
+  assign tl_rv_plic_o = tl_sm1_29_ds_h2d;
+  assign tl_sm1_29_ds_d2h = tl_rv_plic_i;
 
-  assign tl_padctrl_o = tl_sm1_30_ds_h2d;
-  assign tl_sm1_30_ds_d2h = tl_padctrl_i;
+  assign tl_pinmux_o = tl_sm1_30_ds_h2d;
+  assign tl_sm1_30_ds_d2h = tl_pinmux_i;
 
-  assign tl_alert_handler_o = tl_sm1_31_ds_h2d;
-  assign tl_sm1_31_ds_d2h = tl_alert_handler_i;
+  assign tl_padctrl_o = tl_sm1_31_ds_h2d;
+  assign tl_sm1_31_ds_d2h = tl_padctrl_i;
 
-  assign tl_nmi_gen_o = tl_sm1_32_ds_h2d;
-  assign tl_sm1_32_ds_d2h = tl_nmi_gen_i;
+  assign tl_alert_handler_o = tl_sm1_32_ds_h2d;
+  assign tl_sm1_32_ds_d2h = tl_alert_handler_i;
 
-  assign tl_otbn_o = tl_sm1_33_ds_h2d;
-  assign tl_sm1_33_ds_d2h = tl_otbn_i;
+  assign tl_nmi_gen_o = tl_sm1_33_ds_h2d;
+  assign tl_sm1_33_ds_d2h = tl_nmi_gen_i;
 
-  assign tl_s1n_34_us_h2d = tl_dm_sba_i;
-  assign tl_dm_sba_o = tl_s1n_34_us_d2h;
+  assign tl_otbn_o = tl_sm1_34_ds_h2d;
+  assign tl_sm1_34_ds_d2h = tl_otbn_i;
+
+  assign tl_s1n_35_us_h2d = tl_dm_sba_i;
+  assign tl_dm_sba_o = tl_s1n_35_us_d2h;
 
   always_comb begin
     // default steering to generate error response if address is not within the range
-    dev_sel_s1n_17 = 3'd4;
-    if ((tl_s1n_17_us_h2d.a_address & ~(ADDR_MASK_ROM)) == ADDR_SPACE_ROM) begin
-      dev_sel_s1n_17 = 3'd0;
+    dev_sel_s1n_18 = 3'd4;
+    if ((tl_s1n_18_us_h2d.a_address & ~(ADDR_MASK_ROM)) == ADDR_SPACE_ROM) begin
+      dev_sel_s1n_18 = 3'd0;
 
-    end else if ((tl_s1n_17_us_h2d.a_address & ~(ADDR_MASK_DEBUG_MEM)) == ADDR_SPACE_DEBUG_MEM) begin
-      dev_sel_s1n_17 = 3'd1;
+    end else if ((tl_s1n_18_us_h2d.a_address & ~(ADDR_MASK_DEBUG_MEM)) == ADDR_SPACE_DEBUG_MEM) begin
+      dev_sel_s1n_18 = 3'd1;
 
-    end else if ((tl_s1n_17_us_h2d.a_address & ~(ADDR_MASK_RAM_MAIN)) == ADDR_SPACE_RAM_MAIN) begin
-      dev_sel_s1n_17 = 3'd2;
+    end else if ((tl_s1n_18_us_h2d.a_address & ~(ADDR_MASK_RAM_MAIN)) == ADDR_SPACE_RAM_MAIN) begin
+      dev_sel_s1n_18 = 3'd2;
 
-    end else if ((tl_s1n_17_us_h2d.a_address & ~(ADDR_MASK_EFLASH)) == ADDR_SPACE_EFLASH) begin
-      dev_sel_s1n_17 = 3'd3;
+    end else if ((tl_s1n_18_us_h2d.a_address & ~(ADDR_MASK_EFLASH)) == ADDR_SPACE_EFLASH) begin
+      dev_sel_s1n_18 = 3'd3;
 end
   end
 
   always_comb begin
     // default steering to generate error response if address is not within the range
-    dev_sel_s1n_22 = 4'd14;
-    if ((tl_s1n_22_us_h2d.a_address & ~(ADDR_MASK_ROM)) == ADDR_SPACE_ROM) begin
-      dev_sel_s1n_22 = 4'd0;
+    dev_sel_s1n_23 = 4'd15;
+    if ((tl_s1n_23_us_h2d.a_address & ~(ADDR_MASK_ROM)) == ADDR_SPACE_ROM) begin
+      dev_sel_s1n_23 = 4'd0;
 
-    end else if ((tl_s1n_22_us_h2d.a_address & ~(ADDR_MASK_DEBUG_MEM)) == ADDR_SPACE_DEBUG_MEM) begin
-      dev_sel_s1n_22 = 4'd1;
+    end else if ((tl_s1n_23_us_h2d.a_address & ~(ADDR_MASK_DEBUG_MEM)) == ADDR_SPACE_DEBUG_MEM) begin
+      dev_sel_s1n_23 = 4'd1;
 
-    end else if ((tl_s1n_22_us_h2d.a_address & ~(ADDR_MASK_RAM_MAIN)) == ADDR_SPACE_RAM_MAIN) begin
-      dev_sel_s1n_22 = 4'd2;
+    end else if ((tl_s1n_23_us_h2d.a_address & ~(ADDR_MASK_RAM_MAIN)) == ADDR_SPACE_RAM_MAIN) begin
+      dev_sel_s1n_23 = 4'd2;
 
-    end else if ((tl_s1n_22_us_h2d.a_address & ~(ADDR_MASK_EFLASH)) == ADDR_SPACE_EFLASH) begin
-      dev_sel_s1n_22 = 4'd3;
+    end else if ((tl_s1n_23_us_h2d.a_address & ~(ADDR_MASK_EFLASH)) == ADDR_SPACE_EFLASH) begin
+      dev_sel_s1n_23 = 4'd3;
 
     end else if (
-      ((tl_s1n_22_us_h2d.a_address & ~(ADDR_MASK_PERI[0])) == ADDR_SPACE_PERI[0]) ||
-      ((tl_s1n_22_us_h2d.a_address <= (ADDR_MASK_PERI[1] + ADDR_SPACE_PERI[1])) &&
-       (tl_s1n_22_us_h2d.a_address >= ADDR_SPACE_PERI[1])) ||
-      ((tl_s1n_22_us_h2d.a_address <= (ADDR_MASK_PERI[2] + ADDR_SPACE_PERI[2])) &&
-       (tl_s1n_22_us_h2d.a_address >= ADDR_SPACE_PERI[2])) ||
-      ((tl_s1n_22_us_h2d.a_address <= (ADDR_MASK_PERI[3] + ADDR_SPACE_PERI[3])) &&
-       (tl_s1n_22_us_h2d.a_address >= ADDR_SPACE_PERI[3])) ||
-      ((tl_s1n_22_us_h2d.a_address <= (ADDR_MASK_PERI[4] + ADDR_SPACE_PERI[4])) &&
-       (tl_s1n_22_us_h2d.a_address >= ADDR_SPACE_PERI[4])) ||
-      ((tl_s1n_22_us_h2d.a_address <= (ADDR_MASK_PERI[5] + ADDR_SPACE_PERI[5])) &&
-       (tl_s1n_22_us_h2d.a_address >= ADDR_SPACE_PERI[5]))
+      ((tl_s1n_23_us_h2d.a_address & ~(ADDR_MASK_PERI[0])) == ADDR_SPACE_PERI[0]) ||
+      ((tl_s1n_23_us_h2d.a_address <= (ADDR_MASK_PERI[1] + ADDR_SPACE_PERI[1])) &&
+       (tl_s1n_23_us_h2d.a_address >= ADDR_SPACE_PERI[1])) ||
+      ((tl_s1n_23_us_h2d.a_address <= (ADDR_MASK_PERI[2] + ADDR_SPACE_PERI[2])) &&
+       (tl_s1n_23_us_h2d.a_address >= ADDR_SPACE_PERI[2])) ||
+      ((tl_s1n_23_us_h2d.a_address <= (ADDR_MASK_PERI[3] + ADDR_SPACE_PERI[3])) &&
+       (tl_s1n_23_us_h2d.a_address >= ADDR_SPACE_PERI[3])) ||
+      ((tl_s1n_23_us_h2d.a_address <= (ADDR_MASK_PERI[4] + ADDR_SPACE_PERI[4])) &&
+       (tl_s1n_23_us_h2d.a_address >= ADDR_SPACE_PERI[4])) ||
+      ((tl_s1n_23_us_h2d.a_address <= (ADDR_MASK_PERI[5] + ADDR_SPACE_PERI[5])) &&
+       (tl_s1n_23_us_h2d.a_address >= ADDR_SPACE_PERI[5]))
     ) begin
-      dev_sel_s1n_22 = 4'd4;
+      dev_sel_s1n_23 = 4'd4;
 
-    end else if ((tl_s1n_22_us_h2d.a_address & ~(ADDR_MASK_FLASH_CTRL)) == ADDR_SPACE_FLASH_CTRL) begin
-      dev_sel_s1n_22 = 4'd5;
+    end else if ((tl_s1n_23_us_h2d.a_address & ~(ADDR_MASK_FLASH_CTRL)) == ADDR_SPACE_FLASH_CTRL) begin
+      dev_sel_s1n_23 = 4'd5;
 
-    end else if ((tl_s1n_22_us_h2d.a_address & ~(ADDR_MASK_AES)) == ADDR_SPACE_AES) begin
-      dev_sel_s1n_22 = 4'd6;
+    end else if ((tl_s1n_23_us_h2d.a_address & ~(ADDR_MASK_AES)) == ADDR_SPACE_AES) begin
+      dev_sel_s1n_23 = 4'd6;
 
-    end else if ((tl_s1n_22_us_h2d.a_address & ~(ADDR_MASK_HMAC)) == ADDR_SPACE_HMAC) begin
-      dev_sel_s1n_22 = 4'd7;
+    end else if ((tl_s1n_23_us_h2d.a_address & ~(ADDR_MASK_HMAC)) == ADDR_SPACE_HMAC) begin
+      dev_sel_s1n_23 = 4'd7;
 
-    end else if ((tl_s1n_22_us_h2d.a_address & ~(ADDR_MASK_RV_PLIC)) == ADDR_SPACE_RV_PLIC) begin
-      dev_sel_s1n_22 = 4'd8;
+    end else if ((tl_s1n_23_us_h2d.a_address & ~(ADDR_MASK_RV_PLIC)) == ADDR_SPACE_RV_PLIC) begin
+      dev_sel_s1n_23 = 4'd8;
 
-    end else if ((tl_s1n_22_us_h2d.a_address & ~(ADDR_MASK_PINMUX)) == ADDR_SPACE_PINMUX) begin
-      dev_sel_s1n_22 = 4'd9;
+    end else if ((tl_s1n_23_us_h2d.a_address & ~(ADDR_MASK_PINMUX)) == ADDR_SPACE_PINMUX) begin
+      dev_sel_s1n_23 = 4'd9;
 
-    end else if ((tl_s1n_22_us_h2d.a_address & ~(ADDR_MASK_PADCTRL)) == ADDR_SPACE_PADCTRL) begin
-      dev_sel_s1n_22 = 4'd10;
+    end else if ((tl_s1n_23_us_h2d.a_address & ~(ADDR_MASK_PADCTRL)) == ADDR_SPACE_PADCTRL) begin
+      dev_sel_s1n_23 = 4'd10;
 
-    end else if ((tl_s1n_22_us_h2d.a_address & ~(ADDR_MASK_ALERT_HANDLER)) == ADDR_SPACE_ALERT_HANDLER) begin
-      dev_sel_s1n_22 = 4'd11;
+    end else if ((tl_s1n_23_us_h2d.a_address & ~(ADDR_MASK_ALERT_HANDLER)) == ADDR_SPACE_ALERT_HANDLER) begin
+      dev_sel_s1n_23 = 4'd11;
 
-    end else if ((tl_s1n_22_us_h2d.a_address & ~(ADDR_MASK_NMI_GEN)) == ADDR_SPACE_NMI_GEN) begin
-      dev_sel_s1n_22 = 4'd12;
+    end else if ((tl_s1n_23_us_h2d.a_address & ~(ADDR_MASK_NMI_GEN)) == ADDR_SPACE_NMI_GEN) begin
+      dev_sel_s1n_23 = 4'd12;
 
-    end else if ((tl_s1n_22_us_h2d.a_address & ~(ADDR_MASK_OTBN)) == ADDR_SPACE_OTBN) begin
-      dev_sel_s1n_22 = 4'd13;
+    end else if ((tl_s1n_23_us_h2d.a_address & ~(ADDR_MASK_OTBN)) == ADDR_SPACE_OTBN) begin
+      dev_sel_s1n_23 = 4'd13;
+
+    end else if ((tl_s1n_23_us_h2d.a_address & ~(ADDR_MASK_KEYMGR)) == ADDR_SPACE_KEYMGR) begin
+      dev_sel_s1n_23 = 4'd14;
 end
   end
 
   always_comb begin
     // default steering to generate error response if address is not within the range
-    dev_sel_s1n_34 = 4'd13;
-    if ((tl_s1n_34_us_h2d.a_address & ~(ADDR_MASK_ROM)) == ADDR_SPACE_ROM) begin
-      dev_sel_s1n_34 = 4'd0;
+    dev_sel_s1n_35 = 4'd13;
+    if ((tl_s1n_35_us_h2d.a_address & ~(ADDR_MASK_ROM)) == ADDR_SPACE_ROM) begin
+      dev_sel_s1n_35 = 4'd0;
 
-    end else if ((tl_s1n_34_us_h2d.a_address & ~(ADDR_MASK_RAM_MAIN)) == ADDR_SPACE_RAM_MAIN) begin
-      dev_sel_s1n_34 = 4'd1;
+    end else if ((tl_s1n_35_us_h2d.a_address & ~(ADDR_MASK_RAM_MAIN)) == ADDR_SPACE_RAM_MAIN) begin
+      dev_sel_s1n_35 = 4'd1;
 
-    end else if ((tl_s1n_34_us_h2d.a_address & ~(ADDR_MASK_EFLASH)) == ADDR_SPACE_EFLASH) begin
-      dev_sel_s1n_34 = 4'd2;
+    end else if ((tl_s1n_35_us_h2d.a_address & ~(ADDR_MASK_EFLASH)) == ADDR_SPACE_EFLASH) begin
+      dev_sel_s1n_35 = 4'd2;
 
     end else if (
-      ((tl_s1n_34_us_h2d.a_address & ~(ADDR_MASK_PERI[0])) == ADDR_SPACE_PERI[0]) ||
-      ((tl_s1n_34_us_h2d.a_address <= (ADDR_MASK_PERI[1] + ADDR_SPACE_PERI[1])) &&
-       (tl_s1n_34_us_h2d.a_address >= ADDR_SPACE_PERI[1])) ||
-      ((tl_s1n_34_us_h2d.a_address <= (ADDR_MASK_PERI[2] + ADDR_SPACE_PERI[2])) &&
-       (tl_s1n_34_us_h2d.a_address >= ADDR_SPACE_PERI[2])) ||
-      ((tl_s1n_34_us_h2d.a_address <= (ADDR_MASK_PERI[3] + ADDR_SPACE_PERI[3])) &&
-       (tl_s1n_34_us_h2d.a_address >= ADDR_SPACE_PERI[3])) ||
-      ((tl_s1n_34_us_h2d.a_address <= (ADDR_MASK_PERI[4] + ADDR_SPACE_PERI[4])) &&
-       (tl_s1n_34_us_h2d.a_address >= ADDR_SPACE_PERI[4])) ||
-      ((tl_s1n_34_us_h2d.a_address <= (ADDR_MASK_PERI[5] + ADDR_SPACE_PERI[5])) &&
-       (tl_s1n_34_us_h2d.a_address >= ADDR_SPACE_PERI[5]))
+      ((tl_s1n_35_us_h2d.a_address & ~(ADDR_MASK_PERI[0])) == ADDR_SPACE_PERI[0]) ||
+      ((tl_s1n_35_us_h2d.a_address <= (ADDR_MASK_PERI[1] + ADDR_SPACE_PERI[1])) &&
+       (tl_s1n_35_us_h2d.a_address >= ADDR_SPACE_PERI[1])) ||
+      ((tl_s1n_35_us_h2d.a_address <= (ADDR_MASK_PERI[2] + ADDR_SPACE_PERI[2])) &&
+       (tl_s1n_35_us_h2d.a_address >= ADDR_SPACE_PERI[2])) ||
+      ((tl_s1n_35_us_h2d.a_address <= (ADDR_MASK_PERI[3] + ADDR_SPACE_PERI[3])) &&
+       (tl_s1n_35_us_h2d.a_address >= ADDR_SPACE_PERI[3])) ||
+      ((tl_s1n_35_us_h2d.a_address <= (ADDR_MASK_PERI[4] + ADDR_SPACE_PERI[4])) &&
+       (tl_s1n_35_us_h2d.a_address >= ADDR_SPACE_PERI[4])) ||
+      ((tl_s1n_35_us_h2d.a_address <= (ADDR_MASK_PERI[5] + ADDR_SPACE_PERI[5])) &&
+       (tl_s1n_35_us_h2d.a_address >= ADDR_SPACE_PERI[5]))
     ) begin
-      dev_sel_s1n_34 = 4'd3;
+      dev_sel_s1n_35 = 4'd3;
 
-    end else if ((tl_s1n_34_us_h2d.a_address & ~(ADDR_MASK_FLASH_CTRL)) == ADDR_SPACE_FLASH_CTRL) begin
-      dev_sel_s1n_34 = 4'd4;
+    end else if ((tl_s1n_35_us_h2d.a_address & ~(ADDR_MASK_FLASH_CTRL)) == ADDR_SPACE_FLASH_CTRL) begin
+      dev_sel_s1n_35 = 4'd4;
 
-    end else if ((tl_s1n_34_us_h2d.a_address & ~(ADDR_MASK_AES)) == ADDR_SPACE_AES) begin
-      dev_sel_s1n_34 = 4'd5;
+    end else if ((tl_s1n_35_us_h2d.a_address & ~(ADDR_MASK_AES)) == ADDR_SPACE_AES) begin
+      dev_sel_s1n_35 = 4'd5;
 
-    end else if ((tl_s1n_34_us_h2d.a_address & ~(ADDR_MASK_HMAC)) == ADDR_SPACE_HMAC) begin
-      dev_sel_s1n_34 = 4'd6;
+    end else if ((tl_s1n_35_us_h2d.a_address & ~(ADDR_MASK_HMAC)) == ADDR_SPACE_HMAC) begin
+      dev_sel_s1n_35 = 4'd6;
 
-    end else if ((tl_s1n_34_us_h2d.a_address & ~(ADDR_MASK_RV_PLIC)) == ADDR_SPACE_RV_PLIC) begin
-      dev_sel_s1n_34 = 4'd7;
+    end else if ((tl_s1n_35_us_h2d.a_address & ~(ADDR_MASK_RV_PLIC)) == ADDR_SPACE_RV_PLIC) begin
+      dev_sel_s1n_35 = 4'd7;
 
-    end else if ((tl_s1n_34_us_h2d.a_address & ~(ADDR_MASK_PINMUX)) == ADDR_SPACE_PINMUX) begin
-      dev_sel_s1n_34 = 4'd8;
+    end else if ((tl_s1n_35_us_h2d.a_address & ~(ADDR_MASK_PINMUX)) == ADDR_SPACE_PINMUX) begin
+      dev_sel_s1n_35 = 4'd8;
 
-    end else if ((tl_s1n_34_us_h2d.a_address & ~(ADDR_MASK_PADCTRL)) == ADDR_SPACE_PADCTRL) begin
-      dev_sel_s1n_34 = 4'd9;
+    end else if ((tl_s1n_35_us_h2d.a_address & ~(ADDR_MASK_PADCTRL)) == ADDR_SPACE_PADCTRL) begin
+      dev_sel_s1n_35 = 4'd9;
 
-    end else if ((tl_s1n_34_us_h2d.a_address & ~(ADDR_MASK_ALERT_HANDLER)) == ADDR_SPACE_ALERT_HANDLER) begin
-      dev_sel_s1n_34 = 4'd10;
+    end else if ((tl_s1n_35_us_h2d.a_address & ~(ADDR_MASK_ALERT_HANDLER)) == ADDR_SPACE_ALERT_HANDLER) begin
+      dev_sel_s1n_35 = 4'd10;
 
-    end else if ((tl_s1n_34_us_h2d.a_address & ~(ADDR_MASK_NMI_GEN)) == ADDR_SPACE_NMI_GEN) begin
-      dev_sel_s1n_34 = 4'd11;
+    end else if ((tl_s1n_35_us_h2d.a_address & ~(ADDR_MASK_NMI_GEN)) == ADDR_SPACE_NMI_GEN) begin
+      dev_sel_s1n_35 = 4'd11;
 
-    end else if ((tl_s1n_34_us_h2d.a_address & ~(ADDR_MASK_OTBN)) == ADDR_SPACE_OTBN) begin
-      dev_sel_s1n_34 = 4'd12;
+    end else if ((tl_s1n_35_us_h2d.a_address & ~(ADDR_MASK_OTBN)) == ADDR_SPACE_OTBN) begin
+      dev_sel_s1n_35 = 4'd12;
 end
   end
 
@@ -554,14 +563,14 @@
     .DReqDepth (16'h0),
     .DRspDepth (16'h0),
     .N         (4)
-  ) u_s1n_17 (
+  ) u_s1n_18 (
     .clk_i        (clk_main_i),
     .rst_ni       (rst_main_ni),
-    .tl_h_i       (tl_s1n_17_us_h2d),
-    .tl_h_o       (tl_s1n_17_us_d2h),
-    .tl_d_o       (tl_s1n_17_ds_h2d),
-    .tl_d_i       (tl_s1n_17_ds_d2h),
-    .dev_select_i (dev_sel_s1n_17)
+    .tl_h_i       (tl_s1n_18_us_h2d),
+    .tl_h_o       (tl_s1n_18_us_d2h),
+    .tl_d_o       (tl_s1n_18_ds_h2d),
+    .tl_d_i       (tl_s1n_18_ds_d2h),
+    .dev_select_i (dev_sel_s1n_18)
   );
   tlul_socket_m1 #(
     .HReqDepth (12'h0),
@@ -569,20 +578,6 @@
     .DReqDepth (4'h0),
     .DRspDepth (4'h0),
     .M         (3)
-  ) u_sm1_18 (
-    .clk_i        (clk_main_i),
-    .rst_ni       (rst_main_ni),
-    .tl_h_i       (tl_sm1_18_us_h2d),
-    .tl_h_o       (tl_sm1_18_us_d2h),
-    .tl_d_o       (tl_sm1_18_ds_h2d),
-    .tl_d_i       (tl_sm1_18_ds_d2h)
-  );
-  tlul_socket_m1 #(
-    .HReqDepth (8'h0),
-    .HRspDepth (8'h0),
-    .DReqPass  (1'b0),
-    .DRspPass  (1'b0),
-    .M         (2)
   ) u_sm1_19 (
     .clk_i        (clk_main_i),
     .rst_ni       (rst_main_ni),
@@ -592,11 +587,11 @@
     .tl_d_i       (tl_sm1_19_ds_d2h)
   );
   tlul_socket_m1 #(
-    .HReqDepth (12'h0),
-    .HRspDepth (12'h0),
-    .DReqDepth (4'h0),
-    .DRspDepth (4'h0),
-    .M         (3)
+    .HReqDepth (8'h0),
+    .HRspDepth (8'h0),
+    .DReqPass  (1'b0),
+    .DRspPass  (1'b0),
+    .M         (2)
   ) u_sm1_20 (
     .clk_i        (clk_main_i),
     .rst_ni       (rst_main_ni),
@@ -619,33 +614,49 @@
     .tl_d_o       (tl_sm1_21_ds_h2d),
     .tl_d_i       (tl_sm1_21_ds_d2h)
   );
+  tlul_socket_m1 #(
+    .HReqDepth (12'h0),
+    .HRspDepth (12'h0),
+    .DReqDepth (4'h0),
+    .DRspDepth (4'h0),
+    .M         (3)
+  ) u_sm1_22 (
+    .clk_i        (clk_main_i),
+    .rst_ni       (rst_main_ni),
+    .tl_h_i       (tl_sm1_22_us_h2d),
+    .tl_h_o       (tl_sm1_22_us_d2h),
+    .tl_d_o       (tl_sm1_22_ds_h2d),
+    .tl_d_i       (tl_sm1_22_ds_d2h)
+  );
   tlul_socket_1n #(
     .HReqDepth (4'h0),
     .HRspDepth (4'h0),
-    .DReqDepth (56'h0),
-    .DRspDepth (56'h0),
-    .N         (14)
-  ) u_s1n_22 (
+    .DReqPass  (15'h3fff),
+    .DRspPass  (15'h3fff),
+    .DReqDepth (60'h200000000000000),
+    .DRspDepth (60'h200000000000000),
+    .N         (15)
+  ) u_s1n_23 (
     .clk_i        (clk_main_i),
     .rst_ni       (rst_main_ni),
-    .tl_h_i       (tl_s1n_22_us_h2d),
-    .tl_h_o       (tl_s1n_22_us_d2h),
-    .tl_d_o       (tl_s1n_22_ds_h2d),
-    .tl_d_i       (tl_s1n_22_ds_d2h),
-    .dev_select_i (dev_sel_s1n_22)
+    .tl_h_i       (tl_s1n_23_us_h2d),
+    .tl_h_o       (tl_s1n_23_us_d2h),
+    .tl_d_o       (tl_s1n_23_ds_h2d),
+    .tl_d_i       (tl_s1n_23_ds_d2h),
+    .dev_select_i (dev_sel_s1n_23)
   );
   tlul_fifo_async #(
     .ReqDepth        (3),// At least 3 to make async work
     .RspDepth        (3) // At least 3 to make async work
-  ) u_asf_23 (
+  ) u_asf_24 (
     .clk_h_i      (clk_main_i),
     .rst_h_ni     (rst_main_ni),
     .clk_d_i      (clk_fixed_i),
     .rst_d_ni     (rst_fixed_ni),
-    .tl_h_i       (tl_asf_23_us_h2d),
-    .tl_h_o       (tl_asf_23_us_d2h),
-    .tl_d_o       (tl_asf_23_ds_h2d),
-    .tl_d_i       (tl_asf_23_ds_d2h)
+    .tl_h_i       (tl_asf_24_us_h2d),
+    .tl_h_o       (tl_asf_24_us_d2h),
+    .tl_d_o       (tl_asf_24_ds_h2d),
+    .tl_d_i       (tl_asf_24_ds_d2h)
   );
   tlul_socket_m1 #(
     .HReqDepth (8'h0),
@@ -653,20 +664,6 @@
     .DReqDepth (4'h0),
     .DRspDepth (4'h0),
     .M         (2)
-  ) u_sm1_24 (
-    .clk_i        (clk_main_i),
-    .rst_ni       (rst_main_ni),
-    .tl_h_i       (tl_sm1_24_us_h2d),
-    .tl_h_o       (tl_sm1_24_us_d2h),
-    .tl_d_o       (tl_sm1_24_ds_h2d),
-    .tl_d_i       (tl_sm1_24_ds_d2h)
-  );
-  tlul_socket_m1 #(
-    .HReqDepth (8'h0),
-    .HRspDepth (8'h0),
-    .DReqPass  (1'b0),
-    .DRspPass  (1'b0),
-    .M         (2)
   ) u_sm1_25 (
     .clk_i        (clk_main_i),
     .rst_ni       (rst_main_ni),
@@ -787,20 +784,34 @@
     .tl_d_o       (tl_sm1_33_ds_h2d),
     .tl_d_i       (tl_sm1_33_ds_d2h)
   );
+  tlul_socket_m1 #(
+    .HReqDepth (8'h0),
+    .HRspDepth (8'h0),
+    .DReqPass  (1'b0),
+    .DRspPass  (1'b0),
+    .M         (2)
+  ) u_sm1_34 (
+    .clk_i        (clk_main_i),
+    .rst_ni       (rst_main_ni),
+    .tl_h_i       (tl_sm1_34_us_h2d),
+    .tl_h_o       (tl_sm1_34_us_d2h),
+    .tl_d_o       (tl_sm1_34_ds_h2d),
+    .tl_d_i       (tl_sm1_34_ds_d2h)
+  );
   tlul_socket_1n #(
     .HReqPass  (1'b0),
     .HRspPass  (1'b0),
     .DReqDepth (52'h0),
     .DRspDepth (52'h0),
     .N         (13)
-  ) u_s1n_34 (
+  ) u_s1n_35 (
     .clk_i        (clk_main_i),
     .rst_ni       (rst_main_ni),
-    .tl_h_i       (tl_s1n_34_us_h2d),
-    .tl_h_o       (tl_s1n_34_us_d2h),
-    .tl_d_o       (tl_s1n_34_ds_h2d),
-    .tl_d_i       (tl_s1n_34_ds_d2h),
-    .dev_select_i (dev_sel_s1n_34)
+    .tl_h_i       (tl_s1n_35_us_h2d),
+    .tl_h_o       (tl_s1n_35_us_d2h),
+    .tl_d_o       (tl_s1n_35_ds_h2d),
+    .tl_d_i       (tl_s1n_35_ds_d2h),
+    .dev_select_i (dev_sel_s1n_35)
   );
 
 endmodule
diff --git a/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv b/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
index c05a351..d6da257 100644
--- a/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
+++ b/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
@@ -124,10 +124,11 @@
   logic        cio_usbdev_dn_d2p;
   logic        cio_usbdev_dn_en_d2p;
   // sensor_ctrl
+  // keymgr
   // otbn
 
 
-  logic [81:0]  intr_vector;
+  logic [83:0]  intr_vector;
   // Interrupt source list
   logic intr_uart_tx_watermark;
   logic intr_uart_rx_watermark;
@@ -178,6 +179,8 @@
   logic intr_usbdev_rx_bitstuff_err;
   logic intr_usbdev_frame;
   logic intr_usbdev_connected;
+  logic intr_keymgr_op_done;
+  logic intr_keymgr_err;
   logic intr_otbn_done;
   logic intr_otbn_err;
 
@@ -208,6 +211,7 @@
   pwrmgr_pkg::pwr_rst_rsp_t       pwrmgr_pwr_rst_rsp;
   pwrmgr_pkg::pwr_clk_req_t       pwrmgr_pwr_clk_req;
   pwrmgr_pkg::pwr_clk_rsp_t       pwrmgr_pwr_clk_rsp;
+  flash_ctrl_pkg::keymgr_flash_t       flash_ctrl_keymgr;
   logic       pwrmgr_wakeups;
   tlul_pkg::tl_h2d_t       rom_tl_req;
   tlul_pkg::tl_d2h_t       rom_tl_rsp;
@@ -235,6 +239,8 @@
   tlul_pkg::tl_d2h_t       nmi_gen_tl_rsp;
   tlul_pkg::tl_h2d_t       otbn_tl_req;
   tlul_pkg::tl_d2h_t       otbn_tl_rsp;
+  tlul_pkg::tl_h2d_t       keymgr_tl_req;
+  tlul_pkg::tl_d2h_t       keymgr_tl_rsp;
   tlul_pkg::tl_h2d_t       uart_tl_req;
   tlul_pkg::tl_d2h_t       uart_tl_rsp;
   tlul_pkg::tl_h2d_t       gpio_tl_req;
@@ -651,6 +657,7 @@
       .edn_i(flash_ctrl_pkg::EDN_ENTROPY_DEFAULT),
       .pwrmgr_i(pwrmgr_pwr_flash_req),
       .pwrmgr_o(pwrmgr_pwr_flash_rsp),
+      .keymgr_o(flash_ctrl_keymgr),
       .tl_i(flash_ctrl_tl_req),
       .tl_o(flash_ctrl_tl_rsp),
       .clk_i (clkmgr_clocks.clk_main_infra),
@@ -955,17 +962,42 @@
       .rst_ni (rstmgr_resets.rst_sys_io_div4_n)
   );
 
+  keymgr u_keymgr (
+
+      // Interrupt
+      .intr_op_done_o (intr_keymgr_op_done),
+      .intr_err_o     (intr_keymgr_err),
+
+      // [10]: err
+      .alert_tx_o  ( alert_tx[10:10] ),
+      .alert_rx_i  ( alert_rx[10:10] ),
+
+      // Inter-module signals
+      .aes_key_o(),
+      .hmac_key_o(),
+      .kmac_key_o(),
+      .kmac_data_o(),
+      .kmac_data_i(keymgr_pkg::KMAC_DATA_RSP_DEFAULT),
+      .lc_i(keymgr_pkg::LC_DATA_DEFAULT),
+      .otp_i(keymgr_pkg::OTP_DATA_DEFAULT),
+      .flash_i(flash_ctrl_keymgr),
+      .tl_i(keymgr_tl_req),
+      .tl_o(keymgr_tl_rsp),
+      .clk_i (clkmgr_clocks.clk_main_secure),
+      .rst_ni (rstmgr_resets.rst_sys_n)
+  );
+
   otbn u_otbn (
 
       // Interrupt
       .intr_done_o (intr_otbn_done),
       .intr_err_o  (intr_otbn_err),
 
-      // [10]: imem_uncorrectable
-      // [11]: dmem_uncorrectable
-      // [12]: reg_uncorrectable
-      .alert_tx_o  ( alert_tx[12:10] ),
-      .alert_rx_i  ( alert_rx[12:10] ),
+      // [11]: imem_uncorrectable
+      // [12]: dmem_uncorrectable
+      // [13]: reg_uncorrectable
+      .alert_tx_o  ( alert_tx[13:11] ),
+      .alert_rx_i  ( alert_rx[13:11] ),
 
       // Inter-module signals
       .idle_o(),
@@ -977,6 +1009,8 @@
 
   // interrupt assignments
   assign intr_vector = {
+      intr_keymgr_err,
+      intr_keymgr_op_done,
       intr_otbn_err,
       intr_otbn_done,
       intr_pwrmgr_wakeup,
@@ -1105,6 +1139,10 @@
     .tl_otbn_o(otbn_tl_req),
     .tl_otbn_i(otbn_tl_rsp),
 
+    // port: tl_keymgr
+    .tl_keymgr_o(keymgr_tl_req),
+    .tl_keymgr_i(keymgr_tl_rsp),
+
 
     .scanmode_i
   );
diff --git a/hw/top_earlgrey/rtl/autogen/top_earlgrey_pkg.sv b/hw/top_earlgrey/rtl/autogen/top_earlgrey_pkg.sv
index a046478..36688a4 100644
--- a/hw/top_earlgrey/rtl/autogen/top_earlgrey_pkg.sv
+++ b/hw/top_earlgrey/rtl/autogen/top_earlgrey_pkg.sv
@@ -22,6 +22,7 @@
   parameter logic [31:0] TOP_EARLGREY_NMI_GEN_BASE_ADDR = 32'h40140000;
   parameter logic [31:0] TOP_EARLGREY_USBDEV_BASE_ADDR = 32'h40150000;
   parameter logic [31:0] TOP_EARLGREY_SENSOR_CTRL_BASE_ADDR = 32'h40170000;
+  parameter logic [31:0] TOP_EARLGREY_KEYMGR_BASE_ADDR = 32'h401a0000;
   parameter logic [31:0] TOP_EARLGREY_OTBN_BASE_ADDR = 32'h50000000;
 
   // Enumeration for DIO pins.
diff --git a/hw/top_earlgrey/sw/autogen/top_earlgrey.c b/hw/top_earlgrey/sw/autogen/top_earlgrey.c
index 88ded3d..186bdc4 100644
--- a/hw/top_earlgrey/sw/autogen/top_earlgrey.c
+++ b/hw/top_earlgrey/sw/autogen/top_earlgrey.c
@@ -11,7 +11,7 @@
  * `top_earlgrey_plic_peripheral_t`.
  */
 const top_earlgrey_plic_peripheral_t
-    top_earlgrey_plic_interrupt_for_peripheral[82] = {
+    top_earlgrey_plic_interrupt_for_peripheral[84] = {
   [kTopEarlgreyPlicIrqIdNone] = kTopEarlgreyPlicPeripheralUnknown,
   [kTopEarlgreyPlicIrqIdGpioGpio0] = kTopEarlgreyPlicPeripheralGpio,
   [kTopEarlgreyPlicIrqIdGpioGpio1] = kTopEarlgreyPlicPeripheralGpio,
@@ -94,6 +94,8 @@
   [kTopEarlgreyPlicIrqIdPwrmgrWakeup] = kTopEarlgreyPlicPeripheralPwrmgr,
   [kTopEarlgreyPlicIrqIdOtbnDone] = kTopEarlgreyPlicPeripheralOtbn,
   [kTopEarlgreyPlicIrqIdOtbnErr] = kTopEarlgreyPlicPeripheralOtbn,
+  [kTopEarlgreyPlicIrqIdKeymgrOpDone] = kTopEarlgreyPlicPeripheralKeymgr,
+  [kTopEarlgreyPlicIrqIdKeymgrErr] = kTopEarlgreyPlicPeripheralKeymgr,
 };
 
 
@@ -104,7 +106,7 @@
  * `top_earlgrey_alert_peripheral_t`.
  */
 const top_earlgrey_alert_peripheral_t
-    top_earlgrey_alert_for_peripheral[13] = {
+    top_earlgrey_alert_for_peripheral[14] = {
   [kTopEarlgreyAlertIdAesCtrlErrUpdate] = kTopEarlgreyAlertPeripheralAes,
   [kTopEarlgreyAlertIdAesCtrlErrStorage] = kTopEarlgreyAlertPeripheralAes,
   [kTopEarlgreyAlertIdHmacMsgPushShaDisabled] = kTopEarlgreyAlertPeripheralHmac,
@@ -118,5 +120,6 @@
   [kTopEarlgreyAlertIdSensorCtrlAstAlerts4] = kTopEarlgreyAlertPeripheralSensorCtrl,
   [kTopEarlgreyAlertIdSensorCtrlAstAlerts5] = kTopEarlgreyAlertPeripheralSensorCtrl,
   [kTopEarlgreyAlertIdSensorCtrlAstAlerts6] = kTopEarlgreyAlertPeripheralSensorCtrl,
+  [kTopEarlgreyAlertIdKeymgrErr] = kTopEarlgreyAlertPeripheralKeymgr,
 };
 
diff --git a/hw/top_earlgrey/sw/autogen/top_earlgrey.h b/hw/top_earlgrey/sw/autogen/top_earlgrey.h
index e0cd8ac..81759bb 100644
--- a/hw/top_earlgrey/sw/autogen/top_earlgrey.h
+++ b/hw/top_earlgrey/sw/autogen/top_earlgrey.h
@@ -333,6 +333,24 @@
 #define TOP_EARLGREY_SENSOR_CTRL_SIZE_BYTES 0x1000u
 
 /**
+ * Peripheral base address for keymgr in top earlgrey.
+ *
+ * This should be used with #mmio_region_from_addr to access the memory-mapped
+ * registers associated with the peripheral (usually via a DIF).
+ */
+#define TOP_EARLGREY_KEYMGR_BASE_ADDR 0x401a0000u
+
+/**
+ * Peripheral size for keymgr in top earlgrey.
+ *
+ * This is the size (in bytes) of the peripheral's reserved memory area. All
+ * memory-mapped registers associated with this peripheral should have an
+ * address between #TOP_EARLGREY_KEYMGR_BASE_ADDR and
+ * `TOP_EARLGREY_KEYMGR_BASE_ADDR + TOP_EARLGREY_KEYMGR_SIZE_BYTES`.
+ */
+#define TOP_EARLGREY_KEYMGR_SIZE_BYTES 0x1000u
+
+/**
  * Peripheral base address for otbn in top earlgrey.
  *
  * This should be used with #mmio_region_from_addr to access the memory-mapped
@@ -410,7 +428,8 @@
   kTopEarlgreyPlicPeripheralUsbdev = 8, /**< usbdev */
   kTopEarlgreyPlicPeripheralPwrmgr = 9, /**< pwrmgr */
   kTopEarlgreyPlicPeripheralOtbn = 10, /**< otbn */
-  kTopEarlgreyPlicPeripheralLast = 10, /**< \internal Final PLIC peripheral */
+  kTopEarlgreyPlicPeripheralKeymgr = 11, /**< keymgr */
+  kTopEarlgreyPlicPeripheralLast = 11, /**< \internal Final PLIC peripheral */
 } top_earlgrey_plic_peripheral_t;
 
 /**
@@ -502,7 +521,9 @@
   kTopEarlgreyPlicIrqIdPwrmgrWakeup = 79, /**< pwrmgr_wakeup */
   kTopEarlgreyPlicIrqIdOtbnDone = 80, /**< otbn_done */
   kTopEarlgreyPlicIrqIdOtbnErr = 81, /**< otbn_err */
-  kTopEarlgreyPlicIrqIdLast = 81, /**< \internal The Last Valid Interrupt ID. */
+  kTopEarlgreyPlicIrqIdKeymgrOpDone = 82, /**< keymgr_op_done */
+  kTopEarlgreyPlicIrqIdKeymgrErr = 83, /**< keymgr_err */
+  kTopEarlgreyPlicIrqIdLast = 83, /**< \internal The Last Valid Interrupt ID. */
 } top_earlgrey_plic_irq_id_t;
 
 /**
@@ -512,7 +533,7 @@
  * `top_earlgrey_plic_peripheral_t`.
  */
 extern const top_earlgrey_plic_peripheral_t
-    top_earlgrey_plic_interrupt_for_peripheral[82];
+    top_earlgrey_plic_interrupt_for_peripheral[84];
 
 /**
  * PLIC Interrupt Target.
@@ -536,7 +557,8 @@
   kTopEarlgreyAlertPeripheralHmac = 1, /**< hmac */
   kTopEarlgreyAlertPeripheralOtbn = 2, /**< otbn */
   kTopEarlgreyAlertPeripheralSensorCtrl = 3, /**< sensor_ctrl */
-  kTopEarlgreyAlertPeripheralLast = 3, /**< \internal Final Alert peripheral */
+  kTopEarlgreyAlertPeripheralKeymgr = 4, /**< keymgr */
+  kTopEarlgreyAlertPeripheralLast = 4, /**< \internal Final Alert peripheral */
 } top_earlgrey_alert_peripheral_t;
 
 /**
@@ -559,7 +581,8 @@
   kTopEarlgreyAlertIdSensorCtrlAstAlerts4 = 10, /**< sensor_ctrl_ast_alerts 4 */
   kTopEarlgreyAlertIdSensorCtrlAstAlerts5 = 11, /**< sensor_ctrl_ast_alerts 5 */
   kTopEarlgreyAlertIdSensorCtrlAstAlerts6 = 12, /**< sensor_ctrl_ast_alerts 6 */
-  kTopEarlgreyAlertIdLast = 12, /**< \internal The Last Valid Alert ID. */
+  kTopEarlgreyAlertIdKeymgrErr = 13, /**< keymgr_err */
+  kTopEarlgreyAlertIdLast = 13, /**< \internal The Last Valid Alert ID. */
 } top_earlgrey_alert_id_t;
 
 /**
@@ -569,7 +592,7 @@
  * `top_earlgrey_alert_peripheral_t`.
  */
 extern const top_earlgrey_alert_peripheral_t
-    top_earlgrey_alert_for_peripheral[13];
+    top_earlgrey_alert_for_peripheral[14];
 
 #define PINMUX_PERIPH_INSEL_IDX_OFFSET 2