[top_earlgrey] Enable OTBN in toplevel

Enable OTBN in the top_earlgrey toplevel.

Fixes #2580

Signed-off-by: Philipp Wagner <phw@lowrisc.org>
diff --git a/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson b/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
index cb15f3e..924a1c1 100644
--- a/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
+++ b/hw/top_earlgrey/data/autogen/top_earlgrey.gen.hjson
@@ -63,6 +63,7 @@
         {
           clk_main_aes: main
           clk_main_hmac: main
+          clk_main_otbn: main
         }
       }
       {
@@ -1664,6 +1665,92 @@
         }
       ]
     }
+    {
+      name: otbn
+      type: otbn
+      clock_srcs:
+      {
+        clk_i: main
+      }
+      clock_group: trans
+      reset_connections:
+      {
+        rst_ni: sys
+      }
+      base_addr: 0x50000000
+      clock_connections:
+      {
+        clk_i: clkmgr_clocks.clk_main_otbn
+      }
+      size: 0x400000
+      bus_device: tlul
+      bus_host: none
+      available_input_list: []
+      available_output_list: []
+      available_inout_list: []
+      interrupt_list:
+      [
+        {
+          name: 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: imem_uncorrectable
+          width: 1
+          type: alert
+          async: 0
+        }
+        {
+          name: dmem_uncorrectable
+          width: 1
+          type: alert
+          async: 0
+        }
+        {
+          name: reg_uncorrectable
+          width: 1
+          type: alert
+          async: 0
+        }
+      ]
+      wakeup_list: []
+      scan: "false"
+      inter_signal_list:
+      [
+        {
+          name: idle
+          type: uni
+          struct: logic
+          width: "1"
+          act: req
+          inst_name: otbn
+          index: -1
+        }
+      ]
+    }
   ]
   memory:
   [
@@ -1835,6 +1922,7 @@
           padctrl
           alert_handler
           nmi_gen
+          otbn
         ]
         dm_sba:
         [
@@ -1850,6 +1938,7 @@
           padctrl
           alert_handler
           nmi_gen
+          otbn
         ]
       }
       nodes:
@@ -2134,6 +2223,23 @@
           xbar: false
           pipeline: "true"
         }
+        {
+          name: otbn
+          type: device
+          clock: clk_main_i
+          reset: rst_main_ni
+          pipeline_byp: "false"
+          inst_type: otbn
+          addr_range:
+          [
+            {
+              base_addr: 0x50000000
+              size_byte: 0x400000
+            }
+          ]
+          xbar: false
+          pipeline: "true"
+        }
       ]
       clock: clk_main_i
     }
@@ -2348,6 +2454,7 @@
     nmi_gen
     usbdev
     pwrmgr
+    otbn
   ]
   interrupt:
   [
@@ -2988,10 +3095,37 @@
       type: interrupt
       module_name: pwrmgr
     }
+    {
+      name: otbn_done
+      width: 1
+      bits: "0"
+      bitinfo:
+      [
+        1
+        1
+        0
+      ]
+      type: interrupt
+      module_name: otbn
+    }
+    {
+      name: otbn_err
+      width: 1
+      bits: "1"
+      bitinfo:
+      [
+        2
+        1
+        1
+      ]
+      type: interrupt
+      module_name: otbn
+    }
   ]
   alert_module:
   [
     hmac
+    otbn
   ]
   alert:
   [
@@ -3002,6 +3136,27 @@
       async: 0
       module_name: hmac
     }
+    {
+      name: otbn_imem_uncorrectable
+      width: 1
+      type: alert
+      async: 0
+      module_name: otbn
+    }
+    {
+      name: otbn_dmem_uncorrectable
+      width: 1
+      type: alert
+      async: 0
+      module_name: otbn
+    }
+    {
+      name: otbn_reg_uncorrectable
+      width: 1
+      type: alert
+      async: 0
+      module_name: otbn
+    }
   ]
   pinmux:
   {
@@ -3552,6 +3707,15 @@
         index: -1
       }
       {
+        name: idle
+        type: uni
+        struct: logic
+        width: "1"
+        act: req
+        inst_name: otbn
+        index: -1
+      }
+      {
         struct: flash
         type: req_rsp
         name: flash_ctrl
diff --git a/hw/top_earlgrey/data/top_earlgrey.hjson b/hw/top_earlgrey/data/top_earlgrey.hjson
index 18f71fd..8d40dc7 100644
--- a/hw/top_earlgrey/data/top_earlgrey.hjson
+++ b/hw/top_earlgrey/data/top_earlgrey.hjson
@@ -246,6 +246,13 @@
       reset_connections: {rst_ni: "sys_io", rst_usb_48mhz_ni: "usb"},
       base_addr: "0x40150000",
     },
+    { name: "otbn",
+      type: "otbn",
+      clock_srcs: {clk_i: "main"},
+      clock_group: "trans",
+      reset_connections: {rst_ni: "sys"},
+      base_addr: "0x50000000",
+    },
   ]
 
   // Memories (ROM, RAM, eFlash) are defined at the top.
@@ -341,7 +348,8 @@
   // and include every modules.
   // first item goes to LSB of the interrupt source
   interrupt_module: ["gpio", "uart", "spi_device", "flash_ctrl",
-                     "hmac", "alert_handler", "nmi_gen", "usbdev", "pwrmgr" ]
+                     "hmac", "alert_handler", "nmi_gen", "usbdev", "pwrmgr",
+                     "otbn" ]
 
   // RV_PLIC has two searching algorithm internally to pick the most highest priority interrupt
   // source. "sequential" is smaller but slower, "matrix" is larger but faster.
@@ -353,8 +361,8 @@
 
   // ===== ALERT HANDLER ======================================================
   // list all modules that expose alerts
-  // first item goes to LSB of the interrupt source
-  alert_module: [ "hmac" ]
+  // first item goes to LSB of the alert source
+  alert_module: [ "hmac", "otbn" ]
 
   // generated list of alerts:
   alert: [
diff --git a/hw/top_earlgrey/data/xbar_main.hjson b/hw/top_earlgrey/data/xbar_main.hjson
index 1530cb0..4042092 100644
--- a/hw/top_earlgrey/data/xbar_main.hjson
+++ b/hw/top_earlgrey/data/xbar_main.hjson
@@ -122,12 +122,18 @@
       inst_type: "nmi_gen",
       pipeline_byp: "false"
     }
+    { name:      "otbn",
+      type:      "device",
+      clock:     "clk_main_i"
+      reset:     "rst_main_ni"
+      pipeline_byp: "false"
+    },
   ],
   connections: {
     corei:  ["rom", "debug_mem", "ram_main", "eflash"],
     cored:  ["rom", "debug_mem", "ram_main", "eflash", "peri", "flash_ctrl",
-    "aes", "hmac", "rv_plic", "pinmux", "padctrl", "alert_handler", "nmi_gen"],
+    "aes", "hmac", "rv_plic", "pinmux", "padctrl", "alert_handler", "nmi_gen", "otbn"],
     dm_sba: ["rom",              "ram_main", "eflash", "peri", "flash_ctrl",
-    "aes", "hmac", "rv_plic", "pinmux", "padctrl", "alert_handler", "nmi_gen"],
+    "aes", "hmac", "rv_plic", "pinmux", "padctrl", "alert_handler", "nmi_gen", "otbn"],
   },
 }
diff --git a/hw/top_earlgrey/dv/autogen/tb__xbar_connect.sv b/hw/top_earlgrey/dv/autogen/tb__xbar_connect.sv
index 86342cc..0444c2a 100644
--- a/hw/top_earlgrey/dv/autogen/tb__xbar_connect.sv
+++ b/hw/top_earlgrey/dv/autogen/tb__xbar_connect.sv
@@ -24,6 +24,7 @@
 tl_if padctrl_tl_if(clk_main, rst_n);
 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 uart_tl_if(clk_io, rst_n);
 tl_if gpio_tl_if(clk_io, rst_n);
 tl_if spi_device_tl_if(clk_io, rst_n);
@@ -74,6 +75,7 @@
     `DRIVE_TL_DEVICE_IF(padctrl, dut.top_earlgrey, clk_main, rst_n, d_d2h, d_h2d)
     `DRIVE_TL_DEVICE_IF(alert_handler, dut.top_earlgrey, clk_main, rst_n, d_d2h, d_h2d)
     `DRIVE_TL_DEVICE_IF(nmi_gen, dut.top_earlgrey, clk_main, rst_n, d_d2h, d_h2d)
+    `DRIVE_TL_DEVICE_IF(otbn, dut.top_earlgrey, clk_main, rst_n, d_d2h, d_h2d)
     `DRIVE_TL_DEVICE_IF(uart, dut.top_earlgrey, clk_io, rst_n, d_d2h, d_h2d)
     `DRIVE_TL_DEVICE_IF(gpio, dut.top_earlgrey, clk_io, rst_n, d_d2h, d_h2d)
     `DRIVE_TL_DEVICE_IF(spi_device, dut.top_earlgrey, clk_io, rst_n, d_d2h, d_h2d)
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 38b9e59..3f41bda 100644
--- a/hw/top_earlgrey/dv/autogen/xbar_env_pkg__params.sv
+++ b/hw/top_earlgrey/dv/autogen/xbar_env_pkg__params.sv
@@ -43,6 +43,9 @@
     '{"nmi_gen", '{
         '{32'h40140000, 32'h40140fff}
     }},
+    '{"otbn", '{
+        '{32'h50000000, 32'h503fffff}
+    }},
     '{"uart", '{
         '{32'h40000000, 32'h40000fff}
     }},
@@ -100,7 +103,8 @@
         "pinmux",
         "padctrl",
         "alert_handler",
-        "nmi_gen"}}
+        "nmi_gen",
+        "otbn"}}
     ,
     '{"dm_sba", 2, '{
         "rom",
@@ -122,5 +126,6 @@
         "pinmux",
         "padctrl",
         "alert_handler",
-        "nmi_gen"}}
+        "nmi_gen",
+        "otbn"}}
 };
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 4bf94f9..4bc3a9e 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: "1",
+      default: "4",
       local: "true"
     },
     { name: "EscCntDw",
@@ -54,7 +54,7 @@
     { name: "AsyncOn",
       desc: "Number of peripheral outputs",
       type: "logic [NAlerts-1:0]",
-      default: "1'b0",
+      default: "4'b0000",
       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 0aa3307..3da4a60 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
@@ -6,5 +6,5 @@
 // PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED WITH THE FOLLOWING COMMAND:
 // util/topgen.py -t hw/top_earlgrey/doc/top_earlgrey.hjson --alert-handler-only -o hw/top_earlgrey/
 
-parameter uint NUM_ALERTS = 1;
-parameter bit [NUM_ALERTS-1:0] ASYNC_ON = 1'b0;
+parameter uint NUM_ALERTS = 4;
+parameter bit [NUM_ALERTS-1:0] ASYNC_ON = 4'b0000;
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 c5c4f44..891bdd5 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 = 1;
+  parameter int NAlerts = 4;
   parameter int EscCntDw = 32;
   parameter int AccuCntDw = 16;
   parameter int LfsrSeed = 2147483647;
-  parameter logic [NAlerts-1:0] AsyncOn = 1'b0;
+  parameter logic [NAlerts-1:0] AsyncOn = 4'b0000;
   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; // [828:825]
-    alert_handler_reg2hw_intr_enable_reg_t intr_enable; // [824:821]
-    alert_handler_reg2hw_intr_test_reg_t intr_test; // [820:813]
-    alert_handler_reg2hw_regen_reg_t regen; // [812:812]
-    alert_handler_reg2hw_ping_timeout_cyc_reg_t ping_timeout_cyc; // [811:788]
-    alert_handler_reg2hw_alert_en_mreg_t [0:0] alert_en; // [787:787]
-    alert_handler_reg2hw_alert_class_mreg_t [0:0] alert_class; // [786:785]
-    alert_handler_reg2hw_alert_cause_mreg_t [0:0] alert_cause; // [784:784]
+    alert_handler_reg2hw_intr_state_reg_t intr_state; // [840:837]
+    alert_handler_reg2hw_intr_enable_reg_t intr_enable; // [836:833]
+    alert_handler_reg2hw_intr_test_reg_t intr_test; // [832:825]
+    alert_handler_reg2hw_regen_reg_t regen; // [824:824]
+    alert_handler_reg2hw_ping_timeout_cyc_reg_t ping_timeout_cyc; // [823:800]
+    alert_handler_reg2hw_alert_en_mreg_t [3:0] alert_en; // [799:796]
+    alert_handler_reg2hw_alert_class_mreg_t [3:0] alert_class; // [795:788]
+    alert_handler_reg2hw_alert_cause_mreg_t [3:0] alert_cause; // [787: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; // [229:226]
-    alert_handler_hw2reg_alert_cause_mreg_t [0:0] alert_cause; // [225:224]
+    alert_handler_hw2reg_intr_state_reg_t intr_state; // [235:232]
+    alert_handler_hw2reg_alert_cause_mreg_t [3:0] alert_cause; // [231: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 d5ff6f7..3495ca5 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
@@ -109,15 +109,42 @@
   logic [23:0] ping_timeout_cyc_qs;
   logic [23:0] ping_timeout_cyc_wd;
   logic ping_timeout_cyc_we;
-  logic alert_en_qs;
-  logic alert_en_wd;
-  logic alert_en_we;
-  logic [1:0] alert_class_qs;
-  logic [1:0] alert_class_wd;
-  logic alert_class_we;
-  logic alert_cause_qs;
-  logic alert_cause_wd;
-  logic alert_cause_we;
+  logic alert_en_en_a0_qs;
+  logic alert_en_en_a0_wd;
+  logic alert_en_en_a0_we;
+  logic alert_en_en_a1_qs;
+  logic alert_en_en_a1_wd;
+  logic alert_en_en_a1_we;
+  logic alert_en_en_a2_qs;
+  logic alert_en_en_a2_wd;
+  logic alert_en_en_a2_we;
+  logic alert_en_en_a3_qs;
+  logic alert_en_en_a3_wd;
+  logic alert_en_en_a3_we;
+  logic [1:0] alert_class_class_a0_qs;
+  logic [1:0] alert_class_class_a0_wd;
+  logic alert_class_class_a0_we;
+  logic [1:0] alert_class_class_a1_qs;
+  logic [1:0] alert_class_class_a1_wd;
+  logic alert_class_class_a1_we;
+  logic [1:0] alert_class_class_a2_qs;
+  logic [1:0] alert_class_class_a2_wd;
+  logic alert_class_class_a2_we;
+  logic [1:0] alert_class_class_a3_qs;
+  logic [1:0] alert_class_class_a3_wd;
+  logic alert_class_class_a3_we;
+  logic alert_cause_a0_qs;
+  logic alert_cause_a0_wd;
+  logic alert_cause_a0_we;
+  logic alert_cause_a1_qs;
+  logic alert_cause_a1_wd;
+  logic alert_cause_a1_we;
+  logic alert_cause_a2_qs;
+  logic alert_cause_a2_wd;
+  logic alert_cause_a2_we;
+  logic alert_cause_a3_qs;
+  logic alert_cause_a3_wd;
+  logic alert_cause_a3_we;
   logic loc_alert_en_en_la0_qs;
   logic loc_alert_en_en_la0_wd;
   logic loc_alert_en_en_la0_we;
@@ -724,17 +751,18 @@
   // Subregister 0 of Multireg alert_en
   // R[alert_en]: V(False)
 
+  // F[en_a0]: 0:0
   prim_subreg #(
     .DW      (1),
     .SWACCESS("RW"),
     .RESVAL  (1'h0)
-  ) u_alert_en (
+  ) u_alert_en_en_a0 (
     .clk_i   (clk_i    ),
     .rst_ni  (rst_ni  ),
 
     // from register interface (qualified with register enable)
-    .we     (alert_en_we & regen_qs),
-    .wd     (alert_en_wd),
+    .we     (alert_en_en_a0_we & regen_qs),
+    .wd     (alert_en_en_a0_wd),
 
     // from internal hardware
     .de     (1'b0),
@@ -745,25 +773,105 @@
     .q      (reg2hw.alert_en[0].q ),
 
     // to register interface (read)
-    .qs     (alert_en_qs)
+    .qs     (alert_en_en_a0_qs)
   );
 
 
+  // F[en_a1]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_alert_en_en_a1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (alert_en_en_a1_we & regen_qs),
+    .wd     (alert_en_en_a1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.alert_en[1].q ),
+
+    // to register interface (read)
+    .qs     (alert_en_en_a1_qs)
+  );
+
+
+  // F[en_a2]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_alert_en_en_a2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (alert_en_en_a2_we & regen_qs),
+    .wd     (alert_en_en_a2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.alert_en[2].q ),
+
+    // to register interface (read)
+    .qs     (alert_en_en_a2_qs)
+  );
+
+
+  // F[en_a3]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_alert_en_en_a3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (alert_en_en_a3_we & regen_qs),
+    .wd     (alert_en_en_a3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.alert_en[3].q ),
+
+    // to register interface (read)
+    .qs     (alert_en_en_a3_qs)
+  );
+
+
+
 
   // Subregister 0 of Multireg alert_class
   // R[alert_class]: V(False)
 
+  // F[class_a0]: 1:0
   prim_subreg #(
     .DW      (2),
     .SWACCESS("RW"),
     .RESVAL  (2'h0)
-  ) u_alert_class (
+  ) u_alert_class_class_a0 (
     .clk_i   (clk_i    ),
     .rst_ni  (rst_ni  ),
 
     // from register interface (qualified with register enable)
-    .we     (alert_class_we & regen_qs),
-    .wd     (alert_class_wd),
+    .we     (alert_class_class_a0_we & regen_qs),
+    .wd     (alert_class_class_a0_wd),
 
     // from internal hardware
     .de     (1'b0),
@@ -774,25 +882,105 @@
     .q      (reg2hw.alert_class[0].q ),
 
     // to register interface (read)
-    .qs     (alert_class_qs)
+    .qs     (alert_class_class_a0_qs)
   );
 
 
+  // F[class_a1]: 3:2
+  prim_subreg #(
+    .DW      (2),
+    .SWACCESS("RW"),
+    .RESVAL  (2'h0)
+  ) u_alert_class_class_a1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (alert_class_class_a1_we & regen_qs),
+    .wd     (alert_class_class_a1_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.alert_class[1].q ),
+
+    // to register interface (read)
+    .qs     (alert_class_class_a1_qs)
+  );
+
+
+  // F[class_a2]: 5:4
+  prim_subreg #(
+    .DW      (2),
+    .SWACCESS("RW"),
+    .RESVAL  (2'h0)
+  ) u_alert_class_class_a2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (alert_class_class_a2_we & regen_qs),
+    .wd     (alert_class_class_a2_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.alert_class[2].q ),
+
+    // to register interface (read)
+    .qs     (alert_class_class_a2_qs)
+  );
+
+
+  // F[class_a3]: 7:6
+  prim_subreg #(
+    .DW      (2),
+    .SWACCESS("RW"),
+    .RESVAL  (2'h0)
+  ) u_alert_class_class_a3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (alert_class_class_a3_we & regen_qs),
+    .wd     (alert_class_class_a3_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.alert_class[3].q ),
+
+    // to register interface (read)
+    .qs     (alert_class_class_a3_qs)
+  );
+
+
+
 
   // Subregister 0 of Multireg alert_cause
   // R[alert_cause]: V(False)
 
+  // F[a0]: 0:0
   prim_subreg #(
     .DW      (1),
     .SWACCESS("W1C"),
     .RESVAL  (1'h0)
-  ) u_alert_cause (
+  ) u_alert_cause_a0 (
     .clk_i   (clk_i    ),
     .rst_ni  (rst_ni  ),
 
     // from register interface
-    .we     (alert_cause_we),
-    .wd     (alert_cause_wd),
+    .we     (alert_cause_a0_we),
+    .wd     (alert_cause_a0_wd),
 
     // from internal hardware
     .de     (hw2reg.alert_cause[0].de),
@@ -803,10 +991,89 @@
     .q      (reg2hw.alert_cause[0].q ),
 
     // to register interface (read)
-    .qs     (alert_cause_qs)
+    .qs     (alert_cause_a0_qs)
   );
 
 
+  // F[a1]: 1:1
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W1C"),
+    .RESVAL  (1'h0)
+  ) u_alert_cause_a1 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (alert_cause_a1_we),
+    .wd     (alert_cause_a1_wd),
+
+    // from internal hardware
+    .de     (hw2reg.alert_cause[1].de),
+    .d      (hw2reg.alert_cause[1].d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.alert_cause[1].q ),
+
+    // to register interface (read)
+    .qs     (alert_cause_a1_qs)
+  );
+
+
+  // F[a2]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W1C"),
+    .RESVAL  (1'h0)
+  ) u_alert_cause_a2 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (alert_cause_a2_we),
+    .wd     (alert_cause_a2_wd),
+
+    // from internal hardware
+    .de     (hw2reg.alert_cause[2].de),
+    .d      (hw2reg.alert_cause[2].d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.alert_cause[2].q ),
+
+    // to register interface (read)
+    .qs     (alert_cause_a2_qs)
+  );
+
+
+  // F[a3]: 3:3
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("W1C"),
+    .RESVAL  (1'h0)
+  ) u_alert_cause_a3 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (alert_cause_a3_we),
+    .wd     (alert_cause_a3_wd),
+
+    // from internal hardware
+    .de     (hw2reg.alert_cause[3].de),
+    .d      (hw2reg.alert_cause[3].d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.alert_cause[3].q ),
+
+    // to register interface (read)
+    .qs     (alert_cause_a3_qs)
+  );
+
+
+
 
   // Subregister 0 of Multireg loc_alert_en
   // R[loc_alert_en]: V(False)
@@ -3408,14 +3675,41 @@
   assign ping_timeout_cyc_we = addr_hit[4] & reg_we & ~wr_err;
   assign ping_timeout_cyc_wd = reg_wdata[23:0];
 
-  assign alert_en_we = addr_hit[5] & reg_we & ~wr_err;
-  assign alert_en_wd = reg_wdata[0];
+  assign alert_en_en_a0_we = addr_hit[5] & reg_we & ~wr_err;
+  assign alert_en_en_a0_wd = reg_wdata[0];
 
-  assign alert_class_we = addr_hit[6] & reg_we & ~wr_err;
-  assign alert_class_wd = reg_wdata[1:0];
+  assign alert_en_en_a1_we = addr_hit[5] & reg_we & ~wr_err;
+  assign alert_en_en_a1_wd = reg_wdata[1];
 
-  assign alert_cause_we = addr_hit[7] & reg_we & ~wr_err;
-  assign alert_cause_wd = reg_wdata[0];
+  assign alert_en_en_a2_we = addr_hit[5] & reg_we & ~wr_err;
+  assign alert_en_en_a2_wd = reg_wdata[2];
+
+  assign alert_en_en_a3_we = addr_hit[5] & reg_we & ~wr_err;
+  assign alert_en_en_a3_wd = reg_wdata[3];
+
+  assign alert_class_class_a0_we = addr_hit[6] & reg_we & ~wr_err;
+  assign alert_class_class_a0_wd = reg_wdata[1:0];
+
+  assign alert_class_class_a1_we = addr_hit[6] & reg_we & ~wr_err;
+  assign alert_class_class_a1_wd = reg_wdata[3:2];
+
+  assign alert_class_class_a2_we = addr_hit[6] & reg_we & ~wr_err;
+  assign alert_class_class_a2_wd = reg_wdata[5:4];
+
+  assign alert_class_class_a3_we = addr_hit[6] & reg_we & ~wr_err;
+  assign alert_class_class_a3_wd = reg_wdata[7:6];
+
+  assign alert_cause_a0_we = addr_hit[7] & reg_we & ~wr_err;
+  assign alert_cause_a0_wd = reg_wdata[0];
+
+  assign alert_cause_a1_we = addr_hit[7] & reg_we & ~wr_err;
+  assign alert_cause_a1_wd = reg_wdata[1];
+
+  assign alert_cause_a2_we = addr_hit[7] & reg_we & ~wr_err;
+  assign alert_cause_a2_wd = reg_wdata[2];
+
+  assign alert_cause_a3_we = addr_hit[7] & reg_we & ~wr_err;
+  assign alert_cause_a3_wd = reg_wdata[3];
 
   assign loc_alert_en_en_la0_we = addr_hit[8] & reg_we & ~wr_err;
   assign loc_alert_en_en_la0_wd = reg_wdata[0];
@@ -3727,15 +4021,24 @@
       end
 
       addr_hit[5]: begin
-        reg_rdata_next[0] = alert_en_qs;
+        reg_rdata_next[0] = alert_en_en_a0_qs;
+        reg_rdata_next[1] = alert_en_en_a1_qs;
+        reg_rdata_next[2] = alert_en_en_a2_qs;
+        reg_rdata_next[3] = alert_en_en_a3_qs;
       end
 
       addr_hit[6]: begin
-        reg_rdata_next[1:0] = alert_class_qs;
+        reg_rdata_next[1:0] = alert_class_class_a0_qs;
+        reg_rdata_next[3:2] = alert_class_class_a1_qs;
+        reg_rdata_next[5:4] = alert_class_class_a2_qs;
+        reg_rdata_next[7:6] = alert_class_class_a3_qs;
       end
 
       addr_hit[7]: begin
-        reg_rdata_next[0] = alert_cause_qs;
+        reg_rdata_next[0] = alert_cause_a0_qs;
+        reg_rdata_next[1] = alert_cause_a1_qs;
+        reg_rdata_next[2] = alert_cause_a2_qs;
+        reg_rdata_next[3] = alert_cause_a3_qs;
       end
 
       addr_hit[8]: begin
diff --git a/hw/top_earlgrey/ip/clkmgr/data/autogen/clkmgr.hjson b/hw/top_earlgrey/ip/clkmgr/data/autogen/clkmgr.hjson
index 3971985..a90b1af 100644
--- a/hw/top_earlgrey/ip/clkmgr/data/autogen/clkmgr.hjson
+++ b/hw/top_earlgrey/ip/clkmgr/data/autogen/clkmgr.hjson
@@ -134,6 +134,15 @@
             1 CLK_MAIN_HMAC is enabled.
           '''
         }
+        {
+          bits: "2",
+          name: "CLK_MAIN_OTBN_HINT",
+          resval: 1,
+          desc: '''
+            0 CLK_MAIN_OTBN can be disabled.
+            1 CLK_MAIN_OTBN is enabled.
+          '''
+        }
       ]
       // the CLK_HINT register cannot be written, otherwise there is the potential clocks could be
       // disabled and the system will hang
@@ -167,6 +176,15 @@
             1 CLK_MAIN_HMAC is enabled.
           '''
         }
+        {
+          bits: "2",
+          name: "CLK_MAIN_OTBN_VAL",
+          resval: 1,
+          desc: '''
+            0 CLK_MAIN_OTBN is disabled.
+            1 CLK_MAIN_OTBN is enabled.
+          '''
+        }
       ]
     },
   ]
diff --git a/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr.sv b/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr.sv
index 2a2f784..5084b0d 100644
--- a/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr.sv
+++ b/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr.sv
@@ -209,6 +209,8 @@
   logic clk_main_aes_en;
   logic clk_main_hmac_hint;
   logic clk_main_hmac_en;
+  logic clk_main_otbn_hint;
+  logic clk_main_otbn_en;
 
   assign clk_main_aes_en = clk_main_aes_hint | ~status_i.idle[0];
 
@@ -246,12 +248,32 @@
     .clk_o(clocks_o.clk_main_hmac)
   );
 
+  assign clk_main_otbn_en = clk_main_otbn_hint | ~status_i.idle[2];
+
+  prim_flop_2sync #(
+    .Width(1)
+  ) i_clk_main_otbn_hint_sync (
+    .clk_i(clk_main_i),
+    .rst_ni(rst_main_ni),
+    .d(reg2hw.clk_hints.clk_main_otbn_hint.q),
+    .q(clk_main_otbn_hint)
+  );
+
+  prim_clock_gating i_clk_main_otbn_cg (
+    .clk_i(clk_main_i),
+    .en_i(clk_main_otbn_en & clk_main_en),
+    .test_en_i(dft_i.test_en),
+    .clk_o(clocks_o.clk_main_otbn)
+  );
+
 
   // state readback
   assign hw2reg.clk_hints_status.clk_main_aes_val.de = 1'b1;
   assign hw2reg.clk_hints_status.clk_main_aes_val.d = clk_main_aes_en;
   assign hw2reg.clk_hints_status.clk_main_hmac_val.de = 1'b1;
   assign hw2reg.clk_hints_status.clk_main_hmac_val.d = clk_main_hmac_en;
+  assign hw2reg.clk_hints_status.clk_main_otbn_val.de = 1'b1;
+  assign hw2reg.clk_hints_status.clk_main_otbn_val.d = clk_main_otbn_en;
 
 
   ////////////////////////////////////////////////////
diff --git a/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_pkg.sv b/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_pkg.sv
index 0b65244..70cda99 100644
--- a/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_pkg.sv
+++ b/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_pkg.sv
@@ -19,6 +19,7 @@
   typedef struct packed {
   logic clk_main_aes;
   logic clk_main_hmac;
+  logic clk_main_otbn;
   logic clk_main_infra;
   logic clk_io_infra;
   logic clk_io_secure;
@@ -31,11 +32,11 @@
   } clkmgr_out_t;
 
   typedef struct packed {
-    logic [2-1:0] idle;
+    logic [3-1:0] idle;
   } clk_hint_status_t;
 
   parameter clk_hint_status_t CLK_HINT_STATUS_DEFAULT = '{
-    idle: {2{1'b1}}
+    idle: {3{1'b1}}
   };
 
 
diff --git a/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_reg_pkg.sv b/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_reg_pkg.sv
index b1668c2..18b5575 100644
--- a/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_reg_pkg.sv
+++ b/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_reg_pkg.sv
@@ -28,6 +28,9 @@
     struct packed {
       logic        q;
     } clk_main_hmac_hint;
+    struct packed {
+      logic        q;
+    } clk_main_otbn_hint;
   } clkmgr_reg2hw_clk_hints_reg_t;
 
 
@@ -40,6 +43,10 @@
       logic        d;
       logic        de;
     } clk_main_hmac_val;
+    struct packed {
+      logic        d;
+      logic        de;
+    } clk_main_otbn_val;
   } clkmgr_hw2reg_clk_hints_status_reg_t;
 
 
@@ -47,15 +54,15 @@
   // Register to internal design logic //
   ///////////////////////////////////////
   typedef struct packed {
-    clkmgr_reg2hw_clk_enables_reg_t clk_enables; // [3:2]
-    clkmgr_reg2hw_clk_hints_reg_t clk_hints; // [1:0]
+    clkmgr_reg2hw_clk_enables_reg_t clk_enables; // [4:3]
+    clkmgr_reg2hw_clk_hints_reg_t clk_hints; // [2:0]
   } clkmgr_reg2hw_t;
 
   ///////////////////////////////////////
   // Internal design logic to register //
   ///////////////////////////////////////
   typedef struct packed {
-    clkmgr_hw2reg_clk_hints_status_reg_t clk_hints_status; // [3:4]
+    clkmgr_hw2reg_clk_hints_status_reg_t clk_hints_status; // [5:6]
   } clkmgr_hw2reg_t;
 
   // Register Address
diff --git a/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_reg_top.sv b/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_reg_top.sv
index 8a1c418..3e40b9d 100644
--- a/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_reg_top.sv
+++ b/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_reg_top.sv
@@ -83,8 +83,12 @@
   logic clk_hints_clk_main_hmac_hint_qs;
   logic clk_hints_clk_main_hmac_hint_wd;
   logic clk_hints_clk_main_hmac_hint_we;
+  logic clk_hints_clk_main_otbn_hint_qs;
+  logic clk_hints_clk_main_otbn_hint_wd;
+  logic clk_hints_clk_main_otbn_hint_we;
   logic clk_hints_status_clk_main_aes_val_qs;
   logic clk_hints_status_clk_main_hmac_val_qs;
+  logic clk_hints_status_clk_main_otbn_val_qs;
 
   // Register instances
   // R[clk_enables]: V(False)
@@ -195,6 +199,32 @@
   );
 
 
+  //   F[clk_main_otbn_hint]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h1)
+  ) u_clk_hints_clk_main_otbn_hint (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (clk_hints_clk_main_otbn_hint_we),
+    .wd     (clk_hints_clk_main_otbn_hint_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.clk_hints.clk_main_otbn_hint.q ),
+
+    // to register interface (read)
+    .qs     (clk_hints_clk_main_otbn_hint_qs)
+  );
+
+
   // R[clk_hints_status]: V(False)
 
   //   F[clk_main_aes_val]: 0:0
@@ -247,6 +277,31 @@
   );
 
 
+  //   F[clk_main_otbn_val]: 2:2
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RO"),
+    .RESVAL  (1'h1)
+  ) u_clk_hints_status_clk_main_otbn_val (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    .we     (1'b0),
+    .wd     ('0  ),
+
+    // from internal hardware
+    .de     (hw2reg.clk_hints_status.clk_main_otbn_val.de),
+    .d      (hw2reg.clk_hints_status.clk_main_otbn_val.d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (clk_hints_status_clk_main_otbn_val_qs)
+  );
+
+
 
 
   logic [2:0] addr_hit;
@@ -279,6 +334,10 @@
   assign clk_hints_clk_main_hmac_hint_we = addr_hit[1] & reg_we & ~wr_err;
   assign clk_hints_clk_main_hmac_hint_wd = reg_wdata[1];
 
+  assign clk_hints_clk_main_otbn_hint_we = addr_hit[1] & reg_we & ~wr_err;
+  assign clk_hints_clk_main_otbn_hint_wd = reg_wdata[2];
+
+
 
 
   // Read data return
@@ -293,11 +352,13 @@
       addr_hit[1]: begin
         reg_rdata_next[0] = clk_hints_clk_main_aes_hint_qs;
         reg_rdata_next[1] = clk_hints_clk_main_hmac_hint_qs;
+        reg_rdata_next[2] = clk_hints_clk_main_otbn_hint_qs;
       end
 
       addr_hit[2]: begin
         reg_rdata_next[0] = clk_hints_status_clk_main_aes_val_qs;
         reg_rdata_next[1] = clk_hints_status_clk_main_hmac_val_qs;
+        reg_rdata_next[2] = clk_hints_status_clk_main_otbn_val_qs;
       end
 
       default: 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 47da6a3..bb230de 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: "81",
+      default: "83",
       local: "true"
     },
     { name: "NumTarget",
@@ -711,6 +711,22 @@
         { bits: "1:0" }
       ],
     }
+    { name: "PRIO81",
+      desc: "Interrupt Source 81 Priority",
+      swaccess: "rw",
+      hwaccess: "hro",
+      fields: [
+        { bits: "1:0" }
+      ],
+    }
+    { name: "PRIO82",
+      desc: "Interrupt Source 82 Priority",
+      swaccess: "rw",
+      hwaccess: "hro",
+      fields: [
+        { bits: "1:0" }
+      ],
+    }
     { skipto: "512" }
     { multireg: {
         name: "IE0",
diff --git a/hw/top_earlgrey/ip/rv_plic/fpv/autogen/rv_plic_csr_assert_fpv.sv b/hw/top_earlgrey/ip/rv_plic/fpv/autogen/rv_plic_csr_assert_fpv.sv
index 081d6b2..23d07e0 100644
--- a/hw/top_earlgrey/ip/rv_plic/fpv/autogen/rv_plic_csr_assert_fpv.sv
+++ b/hw/top_earlgrey/ip/rv_plic/fpv/autogen/rv_plic_csr_assert_fpv.sv
@@ -108,8 +108,8 @@
 // for all the regsters, declare assertion
 
   // define local fpv variable for the multi_reg
-  logic [80:0] ip_d_fpv;
-  for (genvar s = 0; s <= 80; s++) begin : gen_ip_d
+  logic [82:0] ip_d_fpv;
+  for (genvar s = 0; s <= 82; s++) begin : gen_ip_d
     assign ip_d_fpv[s] = i_rv_plic.hw2reg.ip[s].d;
   end
 
@@ -117,11 +117,11 @@
 
   `ASSERT(ip1_rd_A, rd_P(10'h4, ip_d_fpv[63:32]))
 
-  `ASSERT(ip2_rd_A, rd_P(10'h8, ip_d_fpv[80:64]))
+  `ASSERT(ip2_rd_A, rd_P(10'h8, ip_d_fpv[82:64]))
 
   // define local fpv variable for the multi_reg
-  logic [80:0] le_q_fpv;
-  for (genvar s = 0; s <= 80; s++) begin : gen_le_q
+  logic [82:0] le_q_fpv;
+  for (genvar s = 0; s <= 82; s++) begin : gen_le_q
     assign le_q_fpv[s] = 1 ?
         i_rv_plic.reg2hw.le[s].q : le_q_fpv[s];
   end
@@ -132,8 +132,8 @@
   `ASSERT(le1_wr_A, wr_P(10'h10, le_q_fpv[63:32], 1, 'hffffffff))
   `ASSERT(le1_rd_A, rd_P(10'h10, le_q_fpv[63:32]))
 
-  `ASSERT(le2_wr_A, wr_P(10'h14, le_q_fpv[80:64], 1, 'h1ffff))
-  `ASSERT(le2_rd_A, rd_P(10'h14, le_q_fpv[80:64]))
+  `ASSERT(le2_wr_A, wr_P(10'h14, le_q_fpv[82:64], 1, 'h7ffff))
+  `ASSERT(le2_rd_A, rd_P(10'h14, le_q_fpv[82:64]))
 
   `ASSERT(prio0_wr_A, wr_P(10'h18, i_rv_plic.reg2hw.prio0.q, 1, 'h3))
   `ASSERT(prio0_rd_A, rd_P(10'h18, i_rv_plic.reg2hw.prio0.q))
@@ -378,9 +378,15 @@
   `ASSERT(prio80_wr_A, wr_P(10'h158, i_rv_plic.reg2hw.prio80.q, 1, 'h3))
   `ASSERT(prio80_rd_A, rd_P(10'h158, i_rv_plic.reg2hw.prio80.q))
 
+  `ASSERT(prio81_wr_A, wr_P(10'h15c, i_rv_plic.reg2hw.prio81.q, 1, 'h3))
+  `ASSERT(prio81_rd_A, rd_P(10'h15c, i_rv_plic.reg2hw.prio81.q))
+
+  `ASSERT(prio82_wr_A, wr_P(10'h160, i_rv_plic.reg2hw.prio82.q, 1, 'h3))
+  `ASSERT(prio82_rd_A, rd_P(10'h160, i_rv_plic.reg2hw.prio82.q))
+
   // define local fpv variable for the multi_reg
-  logic [80:0] ie0_q_fpv;
-  for (genvar s = 0; s <= 80; s++) begin : gen_ie0_q
+  logic [82:0] ie0_q_fpv;
+  for (genvar s = 0; s <= 82; s++) begin : gen_ie0_q
     assign ie0_q_fpv[s] = 1 ?
         i_rv_plic.reg2hw.ie0[s].q : ie0_q_fpv[s];
   end
@@ -391,8 +397,8 @@
   `ASSERT(ie01_wr_A, wr_P(10'h204, ie0_q_fpv[63:32], 1, 'hffffffff))
   `ASSERT(ie01_rd_A, rd_P(10'h204, ie0_q_fpv[63:32]))
 
-  `ASSERT(ie02_wr_A, wr_P(10'h208, ie0_q_fpv[80:64], 1, 'h1ffff))
-  `ASSERT(ie02_rd_A, rd_P(10'h208, ie0_q_fpv[80:64]))
+  `ASSERT(ie02_wr_A, wr_P(10'h208, ie0_q_fpv[82:64], 1, 'h7ffff))
+  `ASSERT(ie02_rd_A, rd_P(10'h208, ie0_q_fpv[82:64]))
 
   `ASSERT(threshold0_wr_A, wr_P(10'h20c, i_rv_plic.reg2hw.threshold0.q, 1, 'h3))
   `ASSERT(threshold0_rd_A, rd_P(10'h20c, i_rv_plic.reg2hw.threshold0.q))
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 afcc3d7..1e11b59 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
@@ -175,11 +175,13 @@
   assign prio[78] = reg2hw.prio78.q;
   assign prio[79] = reg2hw.prio79.q;
   assign prio[80] = reg2hw.prio80.q;
+  assign prio[81] = reg2hw.prio81.q;
+  assign prio[82] = reg2hw.prio82.q;
 
   //////////////////////
   // Interrupt Enable //
   //////////////////////
-  for (genvar s = 0; s < 81; s++) begin : gen_ie0
+  for (genvar s = 0; s < 83; s++) begin : gen_ie0
     assign ie[0][s] = reg2hw.ie0[s].q;
   end
 
@@ -205,7 +207,7 @@
   ////////
   // IP //
   ////////
-  for (genvar s = 0; s < 81; s++) begin : gen_ip
+  for (genvar s = 0; s < 83; s++) begin : gen_ip
     assign hw2reg.ip[s].de = 1'b1; // Always write
     assign hw2reg.ip[s].d  = ip[s];
   end
@@ -213,7 +215,7 @@
   ///////////////////////////////////
   // Detection:: 0: Level, 1: Edge //
   ///////////////////////////////////
-  for (genvar s = 0; s < 81; s++) begin : gen_le
+  for (genvar s = 0; s < 83; 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 639a590..7233960 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 = 81;
+  parameter int NumSrc = 83;
   parameter int NumTarget = 1;
 
   ////////////////////////////
@@ -342,6 +342,14 @@
   } rv_plic_reg2hw_prio80_reg_t;
 
   typedef struct packed {
+    logic [1:0]  q;
+  } rv_plic_reg2hw_prio81_reg_t;
+
+  typedef struct packed {
+    logic [1:0]  q;
+  } rv_plic_reg2hw_prio82_reg_t;
+
+  typedef struct packed {
     logic        q;
   } rv_plic_reg2hw_ie0_mreg_t;
 
@@ -374,89 +382,91 @@
   // Register to internal design logic //
   ///////////////////////////////////////
   typedef struct packed {
-    rv_plic_reg2hw_le_mreg_t [80:0] le; // [335:255]
-    rv_plic_reg2hw_prio0_reg_t prio0; // [254:253]
-    rv_plic_reg2hw_prio1_reg_t prio1; // [252:251]
-    rv_plic_reg2hw_prio2_reg_t prio2; // [250:249]
-    rv_plic_reg2hw_prio3_reg_t prio3; // [248:247]
-    rv_plic_reg2hw_prio4_reg_t prio4; // [246:245]
-    rv_plic_reg2hw_prio5_reg_t prio5; // [244:243]
-    rv_plic_reg2hw_prio6_reg_t prio6; // [242:241]
-    rv_plic_reg2hw_prio7_reg_t prio7; // [240:239]
-    rv_plic_reg2hw_prio8_reg_t prio8; // [238:237]
-    rv_plic_reg2hw_prio9_reg_t prio9; // [236:235]
-    rv_plic_reg2hw_prio10_reg_t prio10; // [234:233]
-    rv_plic_reg2hw_prio11_reg_t prio11; // [232:231]
-    rv_plic_reg2hw_prio12_reg_t prio12; // [230:229]
-    rv_plic_reg2hw_prio13_reg_t prio13; // [228:227]
-    rv_plic_reg2hw_prio14_reg_t prio14; // [226:225]
-    rv_plic_reg2hw_prio15_reg_t prio15; // [224:223]
-    rv_plic_reg2hw_prio16_reg_t prio16; // [222:221]
-    rv_plic_reg2hw_prio17_reg_t prio17; // [220:219]
-    rv_plic_reg2hw_prio18_reg_t prio18; // [218:217]
-    rv_plic_reg2hw_prio19_reg_t prio19; // [216:215]
-    rv_plic_reg2hw_prio20_reg_t prio20; // [214:213]
-    rv_plic_reg2hw_prio21_reg_t prio21; // [212:211]
-    rv_plic_reg2hw_prio22_reg_t prio22; // [210:209]
-    rv_plic_reg2hw_prio23_reg_t prio23; // [208:207]
-    rv_plic_reg2hw_prio24_reg_t prio24; // [206:205]
-    rv_plic_reg2hw_prio25_reg_t prio25; // [204:203]
-    rv_plic_reg2hw_prio26_reg_t prio26; // [202:201]
-    rv_plic_reg2hw_prio27_reg_t prio27; // [200:199]
-    rv_plic_reg2hw_prio28_reg_t prio28; // [198:197]
-    rv_plic_reg2hw_prio29_reg_t prio29; // [196:195]
-    rv_plic_reg2hw_prio30_reg_t prio30; // [194:193]
-    rv_plic_reg2hw_prio31_reg_t prio31; // [192:191]
-    rv_plic_reg2hw_prio32_reg_t prio32; // [190:189]
-    rv_plic_reg2hw_prio33_reg_t prio33; // [188:187]
-    rv_plic_reg2hw_prio34_reg_t prio34; // [186:185]
-    rv_plic_reg2hw_prio35_reg_t prio35; // [184:183]
-    rv_plic_reg2hw_prio36_reg_t prio36; // [182:181]
-    rv_plic_reg2hw_prio37_reg_t prio37; // [180:179]
-    rv_plic_reg2hw_prio38_reg_t prio38; // [178:177]
-    rv_plic_reg2hw_prio39_reg_t prio39; // [176:175]
-    rv_plic_reg2hw_prio40_reg_t prio40; // [174:173]
-    rv_plic_reg2hw_prio41_reg_t prio41; // [172:171]
-    rv_plic_reg2hw_prio42_reg_t prio42; // [170:169]
-    rv_plic_reg2hw_prio43_reg_t prio43; // [168:167]
-    rv_plic_reg2hw_prio44_reg_t prio44; // [166:165]
-    rv_plic_reg2hw_prio45_reg_t prio45; // [164:163]
-    rv_plic_reg2hw_prio46_reg_t prio46; // [162:161]
-    rv_plic_reg2hw_prio47_reg_t prio47; // [160:159]
-    rv_plic_reg2hw_prio48_reg_t prio48; // [158:157]
-    rv_plic_reg2hw_prio49_reg_t prio49; // [156:155]
-    rv_plic_reg2hw_prio50_reg_t prio50; // [154:153]
-    rv_plic_reg2hw_prio51_reg_t prio51; // [152:151]
-    rv_plic_reg2hw_prio52_reg_t prio52; // [150:149]
-    rv_plic_reg2hw_prio53_reg_t prio53; // [148:147]
-    rv_plic_reg2hw_prio54_reg_t prio54; // [146:145]
-    rv_plic_reg2hw_prio55_reg_t prio55; // [144:143]
-    rv_plic_reg2hw_prio56_reg_t prio56; // [142:141]
-    rv_plic_reg2hw_prio57_reg_t prio57; // [140:139]
-    rv_plic_reg2hw_prio58_reg_t prio58; // [138:137]
-    rv_plic_reg2hw_prio59_reg_t prio59; // [136:135]
-    rv_plic_reg2hw_prio60_reg_t prio60; // [134:133]
-    rv_plic_reg2hw_prio61_reg_t prio61; // [132:131]
-    rv_plic_reg2hw_prio62_reg_t prio62; // [130:129]
-    rv_plic_reg2hw_prio63_reg_t prio63; // [128:127]
-    rv_plic_reg2hw_prio64_reg_t prio64; // [126:125]
-    rv_plic_reg2hw_prio65_reg_t prio65; // [124:123]
-    rv_plic_reg2hw_prio66_reg_t prio66; // [122:121]
-    rv_plic_reg2hw_prio67_reg_t prio67; // [120:119]
-    rv_plic_reg2hw_prio68_reg_t prio68; // [118:117]
-    rv_plic_reg2hw_prio69_reg_t prio69; // [116:115]
-    rv_plic_reg2hw_prio70_reg_t prio70; // [114:113]
-    rv_plic_reg2hw_prio71_reg_t prio71; // [112:111]
-    rv_plic_reg2hw_prio72_reg_t prio72; // [110:109]
-    rv_plic_reg2hw_prio73_reg_t prio73; // [108:107]
-    rv_plic_reg2hw_prio74_reg_t prio74; // [106:105]
-    rv_plic_reg2hw_prio75_reg_t prio75; // [104:103]
-    rv_plic_reg2hw_prio76_reg_t prio76; // [102:101]
-    rv_plic_reg2hw_prio77_reg_t prio77; // [100:99]
-    rv_plic_reg2hw_prio78_reg_t prio78; // [98:97]
-    rv_plic_reg2hw_prio79_reg_t prio79; // [96:95]
-    rv_plic_reg2hw_prio80_reg_t prio80; // [94:93]
-    rv_plic_reg2hw_ie0_mreg_t [80:0] ie0; // [92:12]
+    rv_plic_reg2hw_le_mreg_t [82:0] le; // [343:261]
+    rv_plic_reg2hw_prio0_reg_t prio0; // [260:259]
+    rv_plic_reg2hw_prio1_reg_t prio1; // [258:257]
+    rv_plic_reg2hw_prio2_reg_t prio2; // [256:255]
+    rv_plic_reg2hw_prio3_reg_t prio3; // [254:253]
+    rv_plic_reg2hw_prio4_reg_t prio4; // [252:251]
+    rv_plic_reg2hw_prio5_reg_t prio5; // [250:249]
+    rv_plic_reg2hw_prio6_reg_t prio6; // [248:247]
+    rv_plic_reg2hw_prio7_reg_t prio7; // [246:245]
+    rv_plic_reg2hw_prio8_reg_t prio8; // [244:243]
+    rv_plic_reg2hw_prio9_reg_t prio9; // [242:241]
+    rv_plic_reg2hw_prio10_reg_t prio10; // [240:239]
+    rv_plic_reg2hw_prio11_reg_t prio11; // [238:237]
+    rv_plic_reg2hw_prio12_reg_t prio12; // [236:235]
+    rv_plic_reg2hw_prio13_reg_t prio13; // [234:233]
+    rv_plic_reg2hw_prio14_reg_t prio14; // [232:231]
+    rv_plic_reg2hw_prio15_reg_t prio15; // [230:229]
+    rv_plic_reg2hw_prio16_reg_t prio16; // [228:227]
+    rv_plic_reg2hw_prio17_reg_t prio17; // [226:225]
+    rv_plic_reg2hw_prio18_reg_t prio18; // [224:223]
+    rv_plic_reg2hw_prio19_reg_t prio19; // [222:221]
+    rv_plic_reg2hw_prio20_reg_t prio20; // [220:219]
+    rv_plic_reg2hw_prio21_reg_t prio21; // [218:217]
+    rv_plic_reg2hw_prio22_reg_t prio22; // [216:215]
+    rv_plic_reg2hw_prio23_reg_t prio23; // [214:213]
+    rv_plic_reg2hw_prio24_reg_t prio24; // [212:211]
+    rv_plic_reg2hw_prio25_reg_t prio25; // [210:209]
+    rv_plic_reg2hw_prio26_reg_t prio26; // [208:207]
+    rv_plic_reg2hw_prio27_reg_t prio27; // [206:205]
+    rv_plic_reg2hw_prio28_reg_t prio28; // [204:203]
+    rv_plic_reg2hw_prio29_reg_t prio29; // [202:201]
+    rv_plic_reg2hw_prio30_reg_t prio30; // [200:199]
+    rv_plic_reg2hw_prio31_reg_t prio31; // [198:197]
+    rv_plic_reg2hw_prio32_reg_t prio32; // [196:195]
+    rv_plic_reg2hw_prio33_reg_t prio33; // [194:193]
+    rv_plic_reg2hw_prio34_reg_t prio34; // [192:191]
+    rv_plic_reg2hw_prio35_reg_t prio35; // [190:189]
+    rv_plic_reg2hw_prio36_reg_t prio36; // [188:187]
+    rv_plic_reg2hw_prio37_reg_t prio37; // [186:185]
+    rv_plic_reg2hw_prio38_reg_t prio38; // [184:183]
+    rv_plic_reg2hw_prio39_reg_t prio39; // [182:181]
+    rv_plic_reg2hw_prio40_reg_t prio40; // [180:179]
+    rv_plic_reg2hw_prio41_reg_t prio41; // [178:177]
+    rv_plic_reg2hw_prio42_reg_t prio42; // [176:175]
+    rv_plic_reg2hw_prio43_reg_t prio43; // [174:173]
+    rv_plic_reg2hw_prio44_reg_t prio44; // [172:171]
+    rv_plic_reg2hw_prio45_reg_t prio45; // [170:169]
+    rv_plic_reg2hw_prio46_reg_t prio46; // [168:167]
+    rv_plic_reg2hw_prio47_reg_t prio47; // [166:165]
+    rv_plic_reg2hw_prio48_reg_t prio48; // [164:163]
+    rv_plic_reg2hw_prio49_reg_t prio49; // [162:161]
+    rv_plic_reg2hw_prio50_reg_t prio50; // [160:159]
+    rv_plic_reg2hw_prio51_reg_t prio51; // [158:157]
+    rv_plic_reg2hw_prio52_reg_t prio52; // [156:155]
+    rv_plic_reg2hw_prio53_reg_t prio53; // [154:153]
+    rv_plic_reg2hw_prio54_reg_t prio54; // [152:151]
+    rv_plic_reg2hw_prio55_reg_t prio55; // [150:149]
+    rv_plic_reg2hw_prio56_reg_t prio56; // [148:147]
+    rv_plic_reg2hw_prio57_reg_t prio57; // [146:145]
+    rv_plic_reg2hw_prio58_reg_t prio58; // [144:143]
+    rv_plic_reg2hw_prio59_reg_t prio59; // [142:141]
+    rv_plic_reg2hw_prio60_reg_t prio60; // [140:139]
+    rv_plic_reg2hw_prio61_reg_t prio61; // [138:137]
+    rv_plic_reg2hw_prio62_reg_t prio62; // [136:135]
+    rv_plic_reg2hw_prio63_reg_t prio63; // [134:133]
+    rv_plic_reg2hw_prio64_reg_t prio64; // [132:131]
+    rv_plic_reg2hw_prio65_reg_t prio65; // [130:129]
+    rv_plic_reg2hw_prio66_reg_t prio66; // [128:127]
+    rv_plic_reg2hw_prio67_reg_t prio67; // [126:125]
+    rv_plic_reg2hw_prio68_reg_t prio68; // [124:123]
+    rv_plic_reg2hw_prio69_reg_t prio69; // [122:121]
+    rv_plic_reg2hw_prio70_reg_t prio70; // [120:119]
+    rv_plic_reg2hw_prio71_reg_t prio71; // [118:117]
+    rv_plic_reg2hw_prio72_reg_t prio72; // [116:115]
+    rv_plic_reg2hw_prio73_reg_t prio73; // [114:113]
+    rv_plic_reg2hw_prio74_reg_t prio74; // [112:111]
+    rv_plic_reg2hw_prio75_reg_t prio75; // [110:109]
+    rv_plic_reg2hw_prio76_reg_t prio76; // [108:107]
+    rv_plic_reg2hw_prio77_reg_t prio77; // [106:105]
+    rv_plic_reg2hw_prio78_reg_t prio78; // [104:103]
+    rv_plic_reg2hw_prio79_reg_t prio79; // [102:101]
+    rv_plic_reg2hw_prio80_reg_t prio80; // [100:99]
+    rv_plic_reg2hw_prio81_reg_t prio81; // [98:97]
+    rv_plic_reg2hw_prio82_reg_t prio82; // [96:95]
+    rv_plic_reg2hw_ie0_mreg_t [82:0] ie0; // [94: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]
@@ -466,7 +476,7 @@
   // Internal design logic to register //
   ///////////////////////////////////////
   typedef struct packed {
-    rv_plic_hw2reg_ip_mreg_t [80:0] ip; // [168:7]
+    rv_plic_hw2reg_ip_mreg_t [82:0] ip; // [172:7]
     rv_plic_hw2reg_cc0_reg_t cc0; // [6:-2]
   } rv_plic_hw2reg_t;
 
@@ -558,6 +568,8 @@
   parameter logic [9:0] RV_PLIC_PRIO78_OFFSET = 10'h 150;
   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_IE00_OFFSET = 10'h 200;
   parameter logic [9:0] RV_PLIC_IE01_OFFSET = 10'h 204;
   parameter logic [9:0] RV_PLIC_IE02_OFFSET = 10'h 208;
@@ -655,6 +667,8 @@
     RV_PLIC_PRIO78,
     RV_PLIC_PRIO79,
     RV_PLIC_PRIO80,
+    RV_PLIC_PRIO81,
+    RV_PLIC_PRIO82,
     RV_PLIC_IE00,
     RV_PLIC_IE01,
     RV_PLIC_IE02,
@@ -664,7 +678,7 @@
   } rv_plic_id_e;
 
   // Register width information to check illegal writes
-  parameter logic [3:0] RV_PLIC_PERMIT [93] = '{
+  parameter logic [3:0] RV_PLIC_PERMIT [95] = '{
     4'b 1111, // index[ 0] RV_PLIC_IP0
     4'b 1111, // index[ 1] RV_PLIC_IP1
     4'b 0111, // index[ 2] RV_PLIC_IP2
@@ -752,12 +766,14 @@
     4'b 0001, // index[84] RV_PLIC_PRIO78
     4'b 0001, // index[85] RV_PLIC_PRIO79
     4'b 0001, // index[86] RV_PLIC_PRIO80
-    4'b 1111, // index[87] RV_PLIC_IE00
-    4'b 1111, // index[88] RV_PLIC_IE01
-    4'b 0111, // index[89] RV_PLIC_IE02
-    4'b 0001, // index[90] RV_PLIC_THRESHOLD0
-    4'b 0001, // index[91] RV_PLIC_CC0
-    4'b 0001  // index[92] RV_PLIC_MSIP0
+    4'b 0001, // index[87] RV_PLIC_PRIO81
+    4'b 0001, // index[88] RV_PLIC_PRIO82
+    4'b 1111, // index[89] RV_PLIC_IE00
+    4'b 1111, // index[90] RV_PLIC_IE01
+    4'b 0111, // index[91] RV_PLIC_IE02
+    4'b 0001, // index[92] RV_PLIC_THRESHOLD0
+    4'b 0001, // index[93] RV_PLIC_CC0
+    4'b 0001  // index[94] 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 07f43be..64b2857 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
@@ -152,6 +152,8 @@
   logic ip2_p78_qs;
   logic ip2_p79_qs;
   logic ip2_p80_qs;
+  logic ip2_p81_qs;
+  logic ip2_p82_qs;
   logic le0_le0_qs;
   logic le0_le0_wd;
   logic le0_le0_we;
@@ -395,6 +397,12 @@
   logic le2_le80_qs;
   logic le2_le80_wd;
   logic le2_le80_we;
+  logic le2_le81_qs;
+  logic le2_le81_wd;
+  logic le2_le81_we;
+  logic le2_le82_qs;
+  logic le2_le82_wd;
+  logic le2_le82_we;
   logic [1:0] prio0_qs;
   logic [1:0] prio0_wd;
   logic prio0_we;
@@ -638,6 +646,12 @@
   logic [1:0] prio80_qs;
   logic [1:0] prio80_wd;
   logic prio80_we;
+  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 ie00_e0_qs;
   logic ie00_e0_wd;
   logic ie00_e0_we;
@@ -881,6 +895,12 @@
   logic ie02_e80_qs;
   logic ie02_e80_wd;
   logic ie02_e80_we;
+  logic ie02_e81_qs;
+  logic ie02_e81_wd;
+  logic ie02_e81_we;
+  logic ie02_e82_qs;
+  logic ie02_e82_wd;
+  logic ie02_e82_we;
   logic [1:0] threshold0_qs;
   logic [1:0] threshold0_wd;
   logic threshold0_we;
@@ -2928,6 +2948,56 @@
   );
 
 
+  // F[p81]: 17:17
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RO"),
+    .RESVAL  (1'h0)
+  ) u_ip2_p81 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    .we     (1'b0),
+    .wd     ('0  ),
+
+    // from internal hardware
+    .de     (hw2reg.ip[81].de),
+    .d      (hw2reg.ip[81].d ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (),
+
+    // to register interface (read)
+    .qs     (ip2_p81_qs)
+  );
+
+
+  // F[p82]: 18:18
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RO"),
+    .RESVAL  (1'h0)
+  ) u_ip2_p82 (
+    .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     (ip2_p82_qs)
+  );
+
+
 
 
   // Subregister 0 of Multireg le
@@ -5045,6 +5115,58 @@
   );
 
 
+  // F[le81]: 17:17
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_le2_le81 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (le2_le81_we),
+    .wd     (le2_le81_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.le[81].q ),
+
+    // to register interface (read)
+    .qs     (le2_le81_qs)
+  );
+
+
+  // F[le82]: 18:18
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_le2_le82 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (le2_le82_we),
+    .wd     (le2_le82_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.le[82].q ),
+
+    // to register interface (read)
+    .qs     (le2_le82_qs)
+  );
+
+
 
   // R[prio0]: V(False)
 
@@ -7233,6 +7355,60 @@
   );
 
 
+  // R[prio81]: V(False)
+
+  prim_subreg #(
+    .DW      (2),
+    .SWACCESS("RW"),
+    .RESVAL  (2'h0)
+  ) u_prio81 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (prio81_we),
+    .wd     (prio81_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.prio81.q ),
+
+    // to register interface (read)
+    .qs     (prio81_qs)
+  );
+
+
+  // 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)
+  );
+
+
 
   // Subregister 0 of Multireg ie0
   // R[ie00]: V(False)
@@ -9349,6 +9525,58 @@
   );
 
 
+  // F[e81]: 17:17
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_ie02_e81 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (ie02_e81_we),
+    .wd     (ie02_e81_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.ie0[81].q ),
+
+    // to register interface (read)
+    .qs     (ie02_e81_qs)
+  );
+
+
+  // F[e82]: 18:18
+  prim_subreg #(
+    .DW      (1),
+    .SWACCESS("RW"),
+    .RESVAL  (1'h0)
+  ) u_ie02_e82 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface
+    .we     (ie02_e82_we),
+    .wd     (ie02_e82_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.ie0[82].q ),
+
+    // to register interface (read)
+    .qs     (ie02_e82_qs)
+  );
+
+
 
   // R[threshold0]: V(False)
 
@@ -9422,7 +9650,7 @@
 
 
 
-  logic [92:0] addr_hit;
+  logic [94:0] addr_hit;
   always_comb begin
     addr_hit = '0;
     addr_hit[ 0] = (reg_addr == RV_PLIC_IP0_OFFSET);
@@ -9512,12 +9740,14 @@
     addr_hit[84] = (reg_addr == RV_PLIC_PRIO78_OFFSET);
     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_IE00_OFFSET);
-    addr_hit[88] = (reg_addr == RV_PLIC_IE01_OFFSET);
-    addr_hit[89] = (reg_addr == RV_PLIC_IE02_OFFSET);
-    addr_hit[90] = (reg_addr == RV_PLIC_THRESHOLD0_OFFSET);
-    addr_hit[91] = (reg_addr == RV_PLIC_CC0_OFFSET);
-    addr_hit[92] = (reg_addr == RV_PLIC_MSIP0_OFFSET);
+    addr_hit[87] = (reg_addr == RV_PLIC_PRIO81_OFFSET);
+    addr_hit[88] = (reg_addr == RV_PLIC_PRIO82_OFFSET);
+    addr_hit[89] = (reg_addr == RV_PLIC_IE00_OFFSET);
+    addr_hit[90] = (reg_addr == RV_PLIC_IE01_OFFSET);
+    addr_hit[91] = (reg_addr == RV_PLIC_IE02_OFFSET);
+    addr_hit[92] = (reg_addr == RV_PLIC_THRESHOLD0_OFFSET);
+    addr_hit[93] = (reg_addr == RV_PLIC_CC0_OFFSET);
+    addr_hit[94] = (reg_addr == RV_PLIC_MSIP0_OFFSET);
   end
 
   assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ;
@@ -9618,6 +9848,8 @@
     if (addr_hit[90] && reg_we && (RV_PLIC_PERMIT[90] != (RV_PLIC_PERMIT[90] & reg_be))) wr_err = 1'b1 ;
     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 ;
   end
 
 
@@ -9701,6 +9933,8 @@
 
 
 
+
+
   assign le0_le0_we = addr_hit[3] & reg_we & ~wr_err;
   assign le0_le0_wd = reg_wdata[0];
 
@@ -9944,6 +10178,12 @@
   assign le2_le80_we = addr_hit[5] & reg_we & ~wr_err;
   assign le2_le80_wd = reg_wdata[16];
 
+  assign le2_le81_we = addr_hit[5] & reg_we & ~wr_err;
+  assign le2_le81_wd = reg_wdata[17];
+
+  assign le2_le82_we = addr_hit[5] & reg_we & ~wr_err;
+  assign le2_le82_wd = reg_wdata[18];
+
   assign prio0_we = addr_hit[6] & reg_we & ~wr_err;
   assign prio0_wd = reg_wdata[1:0];
 
@@ -10187,257 +10427,269 @@
   assign prio80_we = addr_hit[86] & reg_we & ~wr_err;
   assign prio80_wd = reg_wdata[1:0];
 
-  assign ie00_e0_we = addr_hit[87] & reg_we & ~wr_err;
+  assign prio81_we = addr_hit[87] & reg_we & ~wr_err;
+  assign prio81_wd = reg_wdata[1:0];
+
+  assign prio82_we = addr_hit[88] & reg_we & ~wr_err;
+  assign prio82_wd = reg_wdata[1:0];
+
+  assign ie00_e0_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e0_wd = reg_wdata[0];
 
-  assign ie00_e1_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e1_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e1_wd = reg_wdata[1];
 
-  assign ie00_e2_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e2_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e2_wd = reg_wdata[2];
 
-  assign ie00_e3_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e3_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e3_wd = reg_wdata[3];
 
-  assign ie00_e4_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e4_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e4_wd = reg_wdata[4];
 
-  assign ie00_e5_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e5_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e5_wd = reg_wdata[5];
 
-  assign ie00_e6_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e6_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e6_wd = reg_wdata[6];
 
-  assign ie00_e7_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e7_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e7_wd = reg_wdata[7];
 
-  assign ie00_e8_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e8_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e8_wd = reg_wdata[8];
 
-  assign ie00_e9_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e9_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e9_wd = reg_wdata[9];
 
-  assign ie00_e10_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e10_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e10_wd = reg_wdata[10];
 
-  assign ie00_e11_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e11_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e11_wd = reg_wdata[11];
 
-  assign ie00_e12_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e12_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e12_wd = reg_wdata[12];
 
-  assign ie00_e13_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e13_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e13_wd = reg_wdata[13];
 
-  assign ie00_e14_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e14_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e14_wd = reg_wdata[14];
 
-  assign ie00_e15_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e15_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e15_wd = reg_wdata[15];
 
-  assign ie00_e16_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e16_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e16_wd = reg_wdata[16];
 
-  assign ie00_e17_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e17_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e17_wd = reg_wdata[17];
 
-  assign ie00_e18_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e18_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e18_wd = reg_wdata[18];
 
-  assign ie00_e19_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e19_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e19_wd = reg_wdata[19];
 
-  assign ie00_e20_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e20_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e20_wd = reg_wdata[20];
 
-  assign ie00_e21_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e21_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e21_wd = reg_wdata[21];
 
-  assign ie00_e22_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e22_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e22_wd = reg_wdata[22];
 
-  assign ie00_e23_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e23_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e23_wd = reg_wdata[23];
 
-  assign ie00_e24_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e24_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e24_wd = reg_wdata[24];
 
-  assign ie00_e25_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e25_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e25_wd = reg_wdata[25];
 
-  assign ie00_e26_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e26_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e26_wd = reg_wdata[26];
 
-  assign ie00_e27_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e27_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e27_wd = reg_wdata[27];
 
-  assign ie00_e28_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e28_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e28_wd = reg_wdata[28];
 
-  assign ie00_e29_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e29_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e29_wd = reg_wdata[29];
 
-  assign ie00_e30_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e30_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e30_wd = reg_wdata[30];
 
-  assign ie00_e31_we = addr_hit[87] & reg_we & ~wr_err;
+  assign ie00_e31_we = addr_hit[89] & reg_we & ~wr_err;
   assign ie00_e31_wd = reg_wdata[31];
 
-  assign ie01_e32_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e32_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e32_wd = reg_wdata[0];
 
-  assign ie01_e33_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e33_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e33_wd = reg_wdata[1];
 
-  assign ie01_e34_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e34_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e34_wd = reg_wdata[2];
 
-  assign ie01_e35_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e35_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e35_wd = reg_wdata[3];
 
-  assign ie01_e36_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e36_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e36_wd = reg_wdata[4];
 
-  assign ie01_e37_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e37_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e37_wd = reg_wdata[5];
 
-  assign ie01_e38_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e38_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e38_wd = reg_wdata[6];
 
-  assign ie01_e39_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e39_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e39_wd = reg_wdata[7];
 
-  assign ie01_e40_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e40_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e40_wd = reg_wdata[8];
 
-  assign ie01_e41_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e41_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e41_wd = reg_wdata[9];
 
-  assign ie01_e42_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e42_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e42_wd = reg_wdata[10];
 
-  assign ie01_e43_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e43_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e43_wd = reg_wdata[11];
 
-  assign ie01_e44_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e44_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e44_wd = reg_wdata[12];
 
-  assign ie01_e45_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e45_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e45_wd = reg_wdata[13];
 
-  assign ie01_e46_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e46_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e46_wd = reg_wdata[14];
 
-  assign ie01_e47_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e47_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e47_wd = reg_wdata[15];
 
-  assign ie01_e48_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e48_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e48_wd = reg_wdata[16];
 
-  assign ie01_e49_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e49_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e49_wd = reg_wdata[17];
 
-  assign ie01_e50_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e50_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e50_wd = reg_wdata[18];
 
-  assign ie01_e51_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e51_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e51_wd = reg_wdata[19];
 
-  assign ie01_e52_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e52_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e52_wd = reg_wdata[20];
 
-  assign ie01_e53_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e53_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e53_wd = reg_wdata[21];
 
-  assign ie01_e54_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e54_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e54_wd = reg_wdata[22];
 
-  assign ie01_e55_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e55_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e55_wd = reg_wdata[23];
 
-  assign ie01_e56_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e56_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e56_wd = reg_wdata[24];
 
-  assign ie01_e57_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e57_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e57_wd = reg_wdata[25];
 
-  assign ie01_e58_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e58_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e58_wd = reg_wdata[26];
 
-  assign ie01_e59_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e59_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e59_wd = reg_wdata[27];
 
-  assign ie01_e60_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e60_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e60_wd = reg_wdata[28];
 
-  assign ie01_e61_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e61_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e61_wd = reg_wdata[29];
 
-  assign ie01_e62_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e62_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e62_wd = reg_wdata[30];
 
-  assign ie01_e63_we = addr_hit[88] & reg_we & ~wr_err;
+  assign ie01_e63_we = addr_hit[90] & reg_we & ~wr_err;
   assign ie01_e63_wd = reg_wdata[31];
 
-  assign ie02_e64_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie02_e64_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie02_e64_wd = reg_wdata[0];
 
-  assign ie02_e65_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie02_e65_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie02_e65_wd = reg_wdata[1];
 
-  assign ie02_e66_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie02_e66_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie02_e66_wd = reg_wdata[2];
 
-  assign ie02_e67_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie02_e67_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie02_e67_wd = reg_wdata[3];
 
-  assign ie02_e68_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie02_e68_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie02_e68_wd = reg_wdata[4];
 
-  assign ie02_e69_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie02_e69_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie02_e69_wd = reg_wdata[5];
 
-  assign ie02_e70_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie02_e70_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie02_e70_wd = reg_wdata[6];
 
-  assign ie02_e71_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie02_e71_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie02_e71_wd = reg_wdata[7];
 
-  assign ie02_e72_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie02_e72_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie02_e72_wd = reg_wdata[8];
 
-  assign ie02_e73_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie02_e73_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie02_e73_wd = reg_wdata[9];
 
-  assign ie02_e74_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie02_e74_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie02_e74_wd = reg_wdata[10];
 
-  assign ie02_e75_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie02_e75_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie02_e75_wd = reg_wdata[11];
 
-  assign ie02_e76_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie02_e76_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie02_e76_wd = reg_wdata[12];
 
-  assign ie02_e77_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie02_e77_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie02_e77_wd = reg_wdata[13];
 
-  assign ie02_e78_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie02_e78_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie02_e78_wd = reg_wdata[14];
 
-  assign ie02_e79_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie02_e79_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie02_e79_wd = reg_wdata[15];
 
-  assign ie02_e80_we = addr_hit[89] & reg_we & ~wr_err;
+  assign ie02_e80_we = addr_hit[91] & reg_we & ~wr_err;
   assign ie02_e80_wd = reg_wdata[16];
 
-  assign threshold0_we = addr_hit[90] & reg_we & ~wr_err;
+  assign ie02_e81_we = addr_hit[91] & reg_we & ~wr_err;
+  assign ie02_e81_wd = reg_wdata[17];
+
+  assign ie02_e82_we = addr_hit[91] & reg_we & ~wr_err;
+  assign ie02_e82_wd = reg_wdata[18];
+
+  assign threshold0_we = addr_hit[92] & reg_we & ~wr_err;
   assign threshold0_wd = reg_wdata[1:0];
 
-  assign cc0_we = addr_hit[91] & reg_we & ~wr_err;
+  assign cc0_we = addr_hit[93] & reg_we & ~wr_err;
   assign cc0_wd = reg_wdata[6:0];
-  assign cc0_re = addr_hit[91] && reg_re;
+  assign cc0_re = addr_hit[93] && reg_re;
 
-  assign msip0_we = addr_hit[92] & reg_we & ~wr_err;
+  assign msip0_we = addr_hit[94] & reg_we & ~wr_err;
   assign msip0_wd = reg_wdata[0];
 
   // Read data return
@@ -10532,6 +10784,8 @@
         reg_rdata_next[14] = ip2_p78_qs;
         reg_rdata_next[15] = ip2_p79_qs;
         reg_rdata_next[16] = ip2_p80_qs;
+        reg_rdata_next[17] = ip2_p81_qs;
+        reg_rdata_next[18] = ip2_p82_qs;
       end
 
       addr_hit[3]: begin
@@ -10622,6 +10876,8 @@
         reg_rdata_next[14] = le2_le78_qs;
         reg_rdata_next[15] = le2_le79_qs;
         reg_rdata_next[16] = le2_le80_qs;
+        reg_rdata_next[17] = le2_le81_qs;
+        reg_rdata_next[18] = le2_le82_qs;
       end
 
       addr_hit[6]: begin
@@ -10949,6 +11205,14 @@
       end
 
       addr_hit[87]: begin
+        reg_rdata_next[1:0] = prio81_qs;
+      end
+
+      addr_hit[88]: begin
+        reg_rdata_next[1:0] = prio82_qs;
+      end
+
+      addr_hit[89]: begin
         reg_rdata_next[0] = ie00_e0_qs;
         reg_rdata_next[1] = ie00_e1_qs;
         reg_rdata_next[2] = ie00_e2_qs;
@@ -10983,7 +11247,7 @@
         reg_rdata_next[31] = ie00_e31_qs;
       end
 
-      addr_hit[88]: begin
+      addr_hit[90]: begin
         reg_rdata_next[0] = ie01_e32_qs;
         reg_rdata_next[1] = ie01_e33_qs;
         reg_rdata_next[2] = ie01_e34_qs;
@@ -11018,7 +11282,7 @@
         reg_rdata_next[31] = ie01_e63_qs;
       end
 
-      addr_hit[89]: begin
+      addr_hit[91]: begin
         reg_rdata_next[0] = ie02_e64_qs;
         reg_rdata_next[1] = ie02_e65_qs;
         reg_rdata_next[2] = ie02_e66_qs;
@@ -11036,17 +11300,19 @@
         reg_rdata_next[14] = ie02_e78_qs;
         reg_rdata_next[15] = ie02_e79_qs;
         reg_rdata_next[16] = ie02_e80_qs;
-      end
-
-      addr_hit[90]: begin
-        reg_rdata_next[1:0] = threshold0_qs;
-      end
-
-      addr_hit[91]: begin
-        reg_rdata_next[6:0] = cc0_qs;
+        reg_rdata_next[17] = ie02_e81_qs;
+        reg_rdata_next[18] = ie02_e82_qs;
       end
 
       addr_hit[92]: begin
+        reg_rdata_next[1:0] = threshold0_qs;
+      end
+
+      addr_hit[93]: begin
+        reg_rdata_next[6:0] = cc0_qs;
+      end
+
+      addr_hit[94]: 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 cdfb64b..170bb99 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
@@ -49,6 +49,7 @@
       padctrl
       alert_handler
       nmi_gen
+      otbn
     ]
     dm_sba:
     [
@@ -64,6 +65,7 @@
       padctrl
       alert_handler
       nmi_gen
+      otbn
     ]
   }
   nodes:
@@ -332,6 +334,23 @@
       xbar: false
       pipeline: "true"
     }
+    {
+      name: otbn
+      type: device
+      clock: clk_main_i
+      reset: rst_main_ni
+      pipeline_byp: "false"
+      inst_type: otbn
+      addr_range:
+      [
+        {
+          base_addr: 0x50000000
+          size_byte: 0x400000
+        }
+      ]
+      xbar: false
+      pipeline: "true"
+    }
   ]
   clock: clk_main_i
   type: xbar
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 e546525..0429508 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
@@ -35,3 +35,4 @@
 `CONNECT_TL_DEVICE_IF(padctrl, dut, clk_main_i, rst_n)
 `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)
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 5737c96..f3d7ce8 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
@@ -49,6 +49,9 @@
     }},
     '{"nmi_gen", '{
         '{32'h40140000, 32'h40140fff}
+    }},
+    '{"otbn", '{
+        '{32'h50000000, 32'h503fffff}
 }}};
 
   // List of Xbar hosts
@@ -72,7 +75,8 @@
         "pinmux",
         "padctrl",
         "alert_handler",
-        "nmi_gen"}}
+        "nmi_gen",
+        "otbn"}}
     ,
     '{"dm_sba", 2, '{
         "rom",
@@ -86,5 +90,6 @@
         "pinmux",
         "padctrl",
         "alert_handler",
-        "nmi_gen"}}
+        "nmi_gen",
+        "otbn"}}
 };
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 af713e1..10e0c6c 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
@@ -104,5 +104,11 @@
     .h2d    (tl_nmi_gen_o),
     .d2h    (tl_nmi_gen_i)
   );
+  bind xbar_main tlul_assert #(.EndpointType("Host")) tlul_assert_device_otbn (
+    .clk_i  (clk_main_i),
+    .rst_ni (rst_main_ni),
+    .h2d    (tl_otbn_o),
+    .d2h    (tl_otbn_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 4fc0400..77b9388 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
@@ -25,6 +25,7 @@
   localparam logic [31:0] ADDR_SPACE_PADCTRL       = 32'h 40160000;
   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_MASK_ROM           = 32'h 00003fff;
   localparam logic [31:0] ADDR_MASK_DEBUG_MEM     = 32'h 00000fff;
@@ -45,9 +46,10 @@
   localparam logic [31:0] ADDR_MASK_PADCTRL       = 32'h 00000fff;
   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 int N_HOST   = 3;
-  localparam int N_DEVICE = 13;
+  localparam int N_DEVICE = 14;
 
   typedef enum int {
     TlRom = 0,
@@ -62,7 +64,8 @@
     TlPinmux = 9,
     TlPadctrl = 10,
     TlAlertHandler = 11,
-    TlNmiGen = 12
+    TlNmiGen = 12,
+    TlOtbn = 13
   } 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 62e2c9b..5384a3b 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,71 +7,75 @@
 //
 // Interconnect
 // corei
-//   -> s1n_16
-//     -> sm1_17
-//       -> rom
+//   -> s1n_17
 //     -> sm1_18
-//       -> debug_mem
+//       -> rom
 //     -> sm1_19
-//       -> ram_main
+//       -> debug_mem
 //     -> sm1_20
+//       -> ram_main
+//     -> sm1_21
 //       -> eflash
 // cored
-//   -> s1n_21
-//     -> sm1_17
-//       -> rom
+//   -> s1n_22
 //     -> sm1_18
-//       -> debug_mem
-//     -> sm1_19
-//       -> ram_main
-//     -> sm1_20
-//       -> eflash
-//     -> sm1_23
-//       -> asf_22
-//         -> peri
-//     -> sm1_24
-//       -> flash_ctrl
-//     -> sm1_25
-//       -> aes
-//     -> sm1_26
-//       -> hmac
-//     -> sm1_27
-//       -> rv_plic
-//     -> sm1_28
-//       -> pinmux
-//     -> sm1_29
-//       -> padctrl
-//     -> sm1_30
-//       -> alert_handler
-//     -> sm1_31
-//       -> nmi_gen
-// dm_sba
-//   -> s1n_32
-//     -> sm1_17
 //       -> rom
 //     -> sm1_19
-//       -> ram_main
+//       -> debug_mem
 //     -> sm1_20
+//       -> ram_main
+//     -> sm1_21
 //       -> eflash
-//     -> sm1_23
-//       -> asf_22
-//         -> peri
 //     -> sm1_24
-//       -> flash_ctrl
+//       -> asf_23
+//         -> peri
 //     -> sm1_25
-//       -> aes
+//       -> flash_ctrl
 //     -> sm1_26
-//       -> hmac
+//       -> aes
 //     -> sm1_27
-//       -> rv_plic
+//       -> hmac
 //     -> sm1_28
-//       -> pinmux
+//       -> rv_plic
 //     -> sm1_29
-//       -> padctrl
+//       -> pinmux
 //     -> sm1_30
-//       -> alert_handler
+//       -> padctrl
 //     -> sm1_31
+//       -> alert_handler
+//     -> sm1_32
 //       -> nmi_gen
+//     -> sm1_33
+//       -> otbn
+// dm_sba
+//   -> s1n_34
+//     -> sm1_18
+//       -> rom
+//     -> 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
 
 module xbar_main (
   input clk_main_i,
@@ -114,6 +118,8 @@
   input  tlul_pkg::tl_d2h_t tl_alert_handler_i,
   output tlul_pkg::tl_h2d_t tl_nmi_gen_o,
   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,
 
   input scanmode_i
 );
@@ -126,33 +132,26 @@
   logic unused_scanmode;
   assign unused_scanmode = scanmode_i;
 
-  tl_h2d_t tl_s1n_16_us_h2d ;
-  tl_d2h_t tl_s1n_16_us_d2h ;
+  tl_h2d_t tl_s1n_17_us_h2d ;
+  tl_d2h_t tl_s1n_17_us_d2h ;
 
 
-  tl_h2d_t tl_s1n_16_ds_h2d [4];
-  tl_d2h_t tl_s1n_16_ds_d2h [4];
+  tl_h2d_t tl_s1n_17_ds_h2d [4];
+  tl_d2h_t tl_s1n_17_ds_d2h [4];
 
   // Create steering signal
-  logic [2:0] dev_sel_s1n_16;
+  logic [2:0] dev_sel_s1n_17;
 
 
-  tl_h2d_t tl_sm1_17_us_h2d [3];
-  tl_d2h_t tl_sm1_17_us_d2h [3];
-
-  tl_h2d_t tl_sm1_17_ds_h2d ;
-  tl_d2h_t tl_sm1_17_ds_d2h ;
-
-
-  tl_h2d_t tl_sm1_18_us_h2d [2];
-  tl_d2h_t tl_sm1_18_us_d2h [2];
+  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 [3];
-  tl_d2h_t tl_sm1_19_us_d2h [3];
+  tl_h2d_t tl_sm1_19_us_h2d [2];
+  tl_d2h_t tl_sm1_19_us_d2h [2];
 
   tl_h2d_t tl_sm1_19_ds_h2d ;
   tl_d2h_t tl_sm1_19_ds_d2h ;
@@ -164,27 +163,27 @@
   tl_h2d_t tl_sm1_20_ds_h2d ;
   tl_d2h_t tl_sm1_20_ds_d2h ;
 
-  tl_h2d_t tl_s1n_21_us_h2d ;
-  tl_d2h_t tl_s1n_21_us_d2h ;
+
+  tl_h2d_t tl_sm1_21_us_h2d [3];
+  tl_d2h_t tl_sm1_21_us_d2h [3];
+
+  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_s1n_21_ds_h2d [13];
-  tl_d2h_t tl_s1n_21_ds_d2h [13];
+  tl_h2d_t tl_s1n_22_ds_h2d [14];
+  tl_d2h_t tl_s1n_22_ds_d2h [14];
 
   // Create steering signal
-  logic [3:0] dev_sel_s1n_21;
+  logic [3:0] dev_sel_s1n_22;
 
-  tl_h2d_t tl_asf_22_us_h2d ;
-  tl_d2h_t tl_asf_22_us_d2h ;
-  tl_h2d_t tl_asf_22_ds_h2d ;
-  tl_d2h_t tl_asf_22_ds_d2h ;
-
-
-  tl_h2d_t tl_sm1_23_us_h2d [2];
-  tl_d2h_t tl_sm1_23_us_d2h [2];
-
-  tl_h2d_t tl_sm1_23_ds_h2d ;
-  tl_d2h_t tl_sm1_23_ds_d2h ;
+  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];
@@ -242,275 +241,304 @@
   tl_h2d_t tl_sm1_31_ds_h2d ;
   tl_d2h_t tl_sm1_31_ds_d2h ;
 
-  tl_h2d_t tl_s1n_32_us_h2d ;
-  tl_d2h_t tl_s1n_32_us_d2h ;
+
+  tl_h2d_t tl_sm1_32_us_h2d [2];
+  tl_d2h_t tl_sm1_32_us_d2h [2];
+
+  tl_h2d_t tl_sm1_32_ds_h2d ;
+  tl_d2h_t tl_sm1_32_ds_d2h ;
 
 
-  tl_h2d_t tl_s1n_32_ds_h2d [12];
-  tl_d2h_t tl_s1n_32_ds_d2h [12];
+  tl_h2d_t tl_sm1_33_us_h2d [2];
+  tl_d2h_t tl_sm1_33_us_d2h [2];
+
+  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_s1n_34_ds_h2d [13];
+  tl_d2h_t tl_s1n_34_ds_d2h [13];
 
   // Create steering signal
-  logic [3:0] dev_sel_s1n_32;
+  logic [3:0] dev_sel_s1n_34;
 
 
 
-  assign tl_sm1_17_us_h2d[0] = tl_s1n_16_ds_h2d[0];
-  assign tl_s1n_16_ds_d2h[0] = tl_sm1_17_us_d2h[0];
+  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_18_us_h2d[0] = tl_s1n_16_ds_h2d[1];
-  assign tl_s1n_16_ds_d2h[1] = tl_sm1_18_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_19_us_h2d[0] = tl_s1n_16_ds_h2d[2];
-  assign tl_s1n_16_ds_d2h[2] = tl_sm1_19_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_20_us_h2d[0] = tl_s1n_16_ds_h2d[3];
-  assign tl_s1n_16_ds_d2h[3] = tl_sm1_20_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_17_us_h2d[1] = tl_s1n_21_ds_h2d[0];
-  assign tl_s1n_21_ds_d2h[0] = tl_sm1_17_us_d2h[1];
+  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_18_us_h2d[1] = tl_s1n_21_ds_h2d[1];
-  assign tl_s1n_21_ds_d2h[1] = tl_sm1_18_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_19_us_h2d[1] = tl_s1n_21_ds_h2d[2];
-  assign tl_s1n_21_ds_d2h[2] = tl_sm1_19_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_20_us_h2d[1] = tl_s1n_21_ds_h2d[3];
-  assign tl_s1n_21_ds_d2h[3] = tl_sm1_20_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_23_us_h2d[0] = tl_s1n_21_ds_h2d[4];
-  assign tl_s1n_21_ds_d2h[4] = tl_sm1_23_us_d2h[0];
+  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_24_us_h2d[0] = tl_s1n_21_ds_h2d[5];
-  assign tl_s1n_21_ds_d2h[5] = tl_sm1_24_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_25_us_h2d[0] = tl_s1n_21_ds_h2d[6];
-  assign tl_s1n_21_ds_d2h[6] = tl_sm1_25_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_26_us_h2d[0] = tl_s1n_21_ds_h2d[7];
-  assign tl_s1n_21_ds_d2h[7] = tl_sm1_26_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_27_us_h2d[0] = tl_s1n_21_ds_h2d[8];
-  assign tl_s1n_21_ds_d2h[8] = tl_sm1_27_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_28_us_h2d[0] = tl_s1n_21_ds_h2d[9];
-  assign tl_s1n_21_ds_d2h[9] = tl_sm1_28_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_29_us_h2d[0] = tl_s1n_21_ds_h2d[10];
-  assign tl_s1n_21_ds_d2h[10] = tl_sm1_29_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_30_us_h2d[0] = tl_s1n_21_ds_h2d[11];
-  assign tl_s1n_21_ds_d2h[11] = tl_sm1_30_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_31_us_h2d[0] = tl_s1n_21_ds_h2d[12];
-  assign tl_s1n_21_ds_d2h[12] = tl_sm1_31_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_17_us_h2d[2] = tl_s1n_32_ds_h2d[0];
-  assign tl_s1n_32_ds_d2h[0] = tl_sm1_17_us_d2h[2];
+  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_19_us_h2d[2] = tl_s1n_32_ds_h2d[1];
-  assign tl_s1n_32_ds_d2h[1] = tl_sm1_19_us_d2h[2];
+  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_sm1_20_us_h2d[2] = tl_s1n_32_ds_h2d[2];
-  assign tl_s1n_32_ds_d2h[2] = tl_sm1_20_us_d2h[2];
+  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_23_us_h2d[1] = tl_s1n_32_ds_h2d[3];
-  assign tl_s1n_32_ds_d2h[3] = tl_sm1_23_us_d2h[1];
+  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_24_us_h2d[1] = tl_s1n_32_ds_h2d[4];
-  assign tl_s1n_32_ds_d2h[4] = tl_sm1_24_us_d2h[1];
+  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_25_us_h2d[1] = tl_s1n_32_ds_h2d[5];
-  assign tl_s1n_32_ds_d2h[5] = tl_sm1_25_us_d2h[1];
+  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_26_us_h2d[1] = tl_s1n_32_ds_h2d[6];
-  assign tl_s1n_32_ds_d2h[6] = tl_sm1_26_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_27_us_h2d[1] = tl_s1n_32_ds_h2d[7];
-  assign tl_s1n_32_ds_d2h[7] = tl_sm1_27_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_28_us_h2d[1] = tl_s1n_32_ds_h2d[8];
-  assign tl_s1n_32_ds_d2h[8] = tl_sm1_28_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_29_us_h2d[1] = tl_s1n_32_ds_h2d[9];
-  assign tl_s1n_32_ds_d2h[9] = tl_sm1_29_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_30_us_h2d[1] = tl_s1n_32_ds_h2d[10];
-  assign tl_s1n_32_ds_d2h[10] = tl_sm1_30_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_31_us_h2d[1] = tl_s1n_32_ds_h2d[11];
-  assign tl_s1n_32_ds_d2h[11] = tl_sm1_31_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_s1n_16_us_h2d = tl_corei_i;
-  assign tl_corei_o = tl_s1n_16_us_d2h;
+  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_rom_o = tl_sm1_17_ds_h2d;
-  assign tl_sm1_17_ds_d2h = tl_rom_i;
+  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_debug_mem_o = tl_sm1_18_ds_h2d;
-  assign tl_sm1_18_ds_d2h = tl_debug_mem_i;
+  assign tl_s1n_17_us_h2d = tl_corei_i;
+  assign tl_corei_o = tl_s1n_17_us_d2h;
 
-  assign tl_ram_main_o = tl_sm1_19_ds_h2d;
-  assign tl_sm1_19_ds_d2h = tl_ram_main_i;
+  assign tl_rom_o = tl_sm1_18_ds_h2d;
+  assign tl_sm1_18_ds_d2h = tl_rom_i;
 
-  assign tl_eflash_o = tl_sm1_20_ds_h2d;
-  assign tl_sm1_20_ds_d2h = tl_eflash_i;
+  assign tl_debug_mem_o = tl_sm1_19_ds_h2d;
+  assign tl_sm1_19_ds_d2h = tl_debug_mem_i;
 
-  assign tl_s1n_21_us_h2d = tl_cored_i;
-  assign tl_cored_o = tl_s1n_21_us_d2h;
+  assign tl_ram_main_o = tl_sm1_20_ds_h2d;
+  assign tl_sm1_20_ds_d2h = tl_ram_main_i;
 
-  assign tl_peri_o = tl_asf_22_ds_h2d;
-  assign tl_asf_22_ds_d2h = tl_peri_i;
+  assign tl_eflash_o = tl_sm1_21_ds_h2d;
+  assign tl_sm1_21_ds_d2h = tl_eflash_i;
 
-  assign tl_asf_22_us_h2d = tl_sm1_23_ds_h2d;
-  assign tl_sm1_23_ds_d2h = tl_asf_22_us_d2h;
+  assign tl_s1n_22_us_h2d = tl_cored_i;
+  assign tl_cored_o = tl_s1n_22_us_d2h;
 
-  assign tl_flash_ctrl_o = tl_sm1_24_ds_h2d;
-  assign tl_sm1_24_ds_d2h = tl_flash_ctrl_i;
+  assign tl_peri_o = tl_asf_23_ds_h2d;
+  assign tl_asf_23_ds_d2h = tl_peri_i;
 
-  assign tl_aes_o = tl_sm1_25_ds_h2d;
-  assign tl_sm1_25_ds_d2h = tl_aes_i;
+  assign tl_asf_23_us_h2d = tl_sm1_24_ds_h2d;
+  assign tl_sm1_24_ds_d2h = tl_asf_23_us_d2h;
 
-  assign tl_hmac_o = tl_sm1_26_ds_h2d;
-  assign tl_sm1_26_ds_d2h = tl_hmac_i;
+  assign tl_flash_ctrl_o = tl_sm1_25_ds_h2d;
+  assign tl_sm1_25_ds_d2h = tl_flash_ctrl_i;
 
-  assign tl_rv_plic_o = tl_sm1_27_ds_h2d;
-  assign tl_sm1_27_ds_d2h = tl_rv_plic_i;
+  assign tl_aes_o = tl_sm1_26_ds_h2d;
+  assign tl_sm1_26_ds_d2h = tl_aes_i;
 
-  assign tl_pinmux_o = tl_sm1_28_ds_h2d;
-  assign tl_sm1_28_ds_d2h = tl_pinmux_i;
+  assign tl_hmac_o = tl_sm1_27_ds_h2d;
+  assign tl_sm1_27_ds_d2h = tl_hmac_i;
 
-  assign tl_padctrl_o = tl_sm1_29_ds_h2d;
-  assign tl_sm1_29_ds_d2h = tl_padctrl_i;
+  assign tl_rv_plic_o = tl_sm1_28_ds_h2d;
+  assign tl_sm1_28_ds_d2h = tl_rv_plic_i;
 
-  assign tl_alert_handler_o = tl_sm1_30_ds_h2d;
-  assign tl_sm1_30_ds_d2h = tl_alert_handler_i;
+  assign tl_pinmux_o = tl_sm1_29_ds_h2d;
+  assign tl_sm1_29_ds_d2h = tl_pinmux_i;
 
-  assign tl_nmi_gen_o = tl_sm1_31_ds_h2d;
-  assign tl_sm1_31_ds_d2h = tl_nmi_gen_i;
+  assign tl_padctrl_o = tl_sm1_30_ds_h2d;
+  assign tl_sm1_30_ds_d2h = tl_padctrl_i;
 
-  assign tl_s1n_32_us_h2d = tl_dm_sba_i;
-  assign tl_dm_sba_o = tl_s1n_32_us_d2h;
+  assign tl_alert_handler_o = tl_sm1_31_ds_h2d;
+  assign tl_sm1_31_ds_d2h = tl_alert_handler_i;
+
+  assign tl_nmi_gen_o = tl_sm1_32_ds_h2d;
+  assign tl_sm1_32_ds_d2h = tl_nmi_gen_i;
+
+  assign tl_otbn_o = tl_sm1_33_ds_h2d;
+  assign tl_sm1_33_ds_d2h = tl_otbn_i;
+
+  assign tl_s1n_34_us_h2d = tl_dm_sba_i;
+  assign tl_dm_sba_o = tl_s1n_34_us_d2h;
 
   always_comb begin
     // default steering to generate error response if address is not within the range
-    dev_sel_s1n_16 = 3'd4;
-    if ((tl_s1n_16_us_h2d.a_address & ~(ADDR_MASK_ROM)) == ADDR_SPACE_ROM) begin
-      dev_sel_s1n_16 = 3'd0;
+    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;
 
-    end else if ((tl_s1n_16_us_h2d.a_address & ~(ADDR_MASK_DEBUG_MEM)) == ADDR_SPACE_DEBUG_MEM) begin
-      dev_sel_s1n_16 = 3'd1;
+    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_16_us_h2d.a_address & ~(ADDR_MASK_RAM_MAIN)) == ADDR_SPACE_RAM_MAIN) begin
-      dev_sel_s1n_16 = 3'd2;
+    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_16_us_h2d.a_address & ~(ADDR_MASK_EFLASH)) == ADDR_SPACE_EFLASH) begin
-      dev_sel_s1n_16 = 3'd3;
+    end else if ((tl_s1n_17_us_h2d.a_address & ~(ADDR_MASK_EFLASH)) == ADDR_SPACE_EFLASH) begin
+      dev_sel_s1n_17 = 3'd3;
 end
   end
 
   always_comb begin
     // default steering to generate error response if address is not within the range
-    dev_sel_s1n_21 = 4'd13;
-    if ((tl_s1n_21_us_h2d.a_address & ~(ADDR_MASK_ROM)) == ADDR_SPACE_ROM) begin
-      dev_sel_s1n_21 = 4'd0;
+    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;
 
-    end else if ((tl_s1n_21_us_h2d.a_address & ~(ADDR_MASK_DEBUG_MEM)) == ADDR_SPACE_DEBUG_MEM) begin
-      dev_sel_s1n_21 = 4'd1;
+    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_21_us_h2d.a_address & ~(ADDR_MASK_RAM_MAIN)) == ADDR_SPACE_RAM_MAIN) begin
-      dev_sel_s1n_21 = 4'd2;
+    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_21_us_h2d.a_address & ~(ADDR_MASK_EFLASH)) == ADDR_SPACE_EFLASH) begin
-      dev_sel_s1n_21 = 4'd3;
+    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_21_us_h2d.a_address & ~(ADDR_MASK_PERI[0])) == ADDR_SPACE_PERI[0]) ||
-      ((tl_s1n_21_us_h2d.a_address <= (ADDR_MASK_PERI[1] + ADDR_SPACE_PERI[1])) &&
-       (tl_s1n_21_us_h2d.a_address >= ADDR_SPACE_PERI[1])) ||
-      ((tl_s1n_21_us_h2d.a_address <= (ADDR_MASK_PERI[2] + ADDR_SPACE_PERI[2])) &&
-       (tl_s1n_21_us_h2d.a_address >= ADDR_SPACE_PERI[2])) ||
-      ((tl_s1n_21_us_h2d.a_address <= (ADDR_MASK_PERI[3] + ADDR_SPACE_PERI[3])) &&
-       (tl_s1n_21_us_h2d.a_address >= ADDR_SPACE_PERI[3])) ||
-      ((tl_s1n_21_us_h2d.a_address <= (ADDR_MASK_PERI[4] + ADDR_SPACE_PERI[4])) &&
-       (tl_s1n_21_us_h2d.a_address >= ADDR_SPACE_PERI[4]))
+      ((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]))
     ) begin
-      dev_sel_s1n_21 = 4'd4;
+      dev_sel_s1n_22 = 4'd4;
 
-    end else if ((tl_s1n_21_us_h2d.a_address & ~(ADDR_MASK_FLASH_CTRL)) == ADDR_SPACE_FLASH_CTRL) begin
-      dev_sel_s1n_21 = 4'd5;
+    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_21_us_h2d.a_address & ~(ADDR_MASK_AES)) == ADDR_SPACE_AES) begin
-      dev_sel_s1n_21 = 4'd6;
+    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_21_us_h2d.a_address & ~(ADDR_MASK_HMAC)) == ADDR_SPACE_HMAC) begin
-      dev_sel_s1n_21 = 4'd7;
+    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_21_us_h2d.a_address & ~(ADDR_MASK_RV_PLIC)) == ADDR_SPACE_RV_PLIC) begin
-      dev_sel_s1n_21 = 4'd8;
+    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_21_us_h2d.a_address & ~(ADDR_MASK_PINMUX)) == ADDR_SPACE_PINMUX) begin
-      dev_sel_s1n_21 = 4'd9;
+    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_21_us_h2d.a_address & ~(ADDR_MASK_PADCTRL)) == ADDR_SPACE_PADCTRL) begin
-      dev_sel_s1n_21 = 4'd10;
+    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_21_us_h2d.a_address & ~(ADDR_MASK_ALERT_HANDLER)) == ADDR_SPACE_ALERT_HANDLER) begin
-      dev_sel_s1n_21 = 4'd11;
+    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_21_us_h2d.a_address & ~(ADDR_MASK_NMI_GEN)) == ADDR_SPACE_NMI_GEN) begin
-      dev_sel_s1n_21 = 4'd12;
+    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_22_us_h2d.a_address & ~(ADDR_MASK_OTBN)) == ADDR_SPACE_OTBN) begin
+      dev_sel_s1n_22 = 4'd13;
 end
   end
 
   always_comb begin
     // default steering to generate error response if address is not within the range
-    dev_sel_s1n_32 = 4'd12;
-    if ((tl_s1n_32_us_h2d.a_address & ~(ADDR_MASK_ROM)) == ADDR_SPACE_ROM) begin
-      dev_sel_s1n_32 = 4'd0;
+    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;
 
-    end else if ((tl_s1n_32_us_h2d.a_address & ~(ADDR_MASK_RAM_MAIN)) == ADDR_SPACE_RAM_MAIN) begin
-      dev_sel_s1n_32 = 4'd1;
+    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_32_us_h2d.a_address & ~(ADDR_MASK_EFLASH)) == ADDR_SPACE_EFLASH) begin
-      dev_sel_s1n_32 = 4'd2;
+    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_32_us_h2d.a_address & ~(ADDR_MASK_PERI[0])) == ADDR_SPACE_PERI[0]) ||
-      ((tl_s1n_32_us_h2d.a_address <= (ADDR_MASK_PERI[1] + ADDR_SPACE_PERI[1])) &&
-       (tl_s1n_32_us_h2d.a_address >= ADDR_SPACE_PERI[1])) ||
-      ((tl_s1n_32_us_h2d.a_address <= (ADDR_MASK_PERI[2] + ADDR_SPACE_PERI[2])) &&
-       (tl_s1n_32_us_h2d.a_address >= ADDR_SPACE_PERI[2])) ||
-      ((tl_s1n_32_us_h2d.a_address <= (ADDR_MASK_PERI[3] + ADDR_SPACE_PERI[3])) &&
-       (tl_s1n_32_us_h2d.a_address >= ADDR_SPACE_PERI[3])) ||
-      ((tl_s1n_32_us_h2d.a_address <= (ADDR_MASK_PERI[4] + ADDR_SPACE_PERI[4])) &&
-       (tl_s1n_32_us_h2d.a_address >= ADDR_SPACE_PERI[4]))
+      ((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]))
     ) begin
-      dev_sel_s1n_32 = 4'd3;
+      dev_sel_s1n_34 = 4'd3;
 
-    end else if ((tl_s1n_32_us_h2d.a_address & ~(ADDR_MASK_FLASH_CTRL)) == ADDR_SPACE_FLASH_CTRL) begin
-      dev_sel_s1n_32 = 4'd4;
+    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_32_us_h2d.a_address & ~(ADDR_MASK_AES)) == ADDR_SPACE_AES) begin
-      dev_sel_s1n_32 = 4'd5;
+    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_32_us_h2d.a_address & ~(ADDR_MASK_HMAC)) == ADDR_SPACE_HMAC) begin
-      dev_sel_s1n_32 = 4'd6;
+    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_32_us_h2d.a_address & ~(ADDR_MASK_RV_PLIC)) == ADDR_SPACE_RV_PLIC) begin
-      dev_sel_s1n_32 = 4'd7;
+    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_32_us_h2d.a_address & ~(ADDR_MASK_PINMUX)) == ADDR_SPACE_PINMUX) begin
-      dev_sel_s1n_32 = 4'd8;
+    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_32_us_h2d.a_address & ~(ADDR_MASK_PADCTRL)) == ADDR_SPACE_PADCTRL) begin
-      dev_sel_s1n_32 = 4'd9;
+    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_32_us_h2d.a_address & ~(ADDR_MASK_ALERT_HANDLER)) == ADDR_SPACE_ALERT_HANDLER) begin
-      dev_sel_s1n_32 = 4'd10;
+    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_32_us_h2d.a_address & ~(ADDR_MASK_NMI_GEN)) == ADDR_SPACE_NMI_GEN) begin
-      dev_sel_s1n_32 = 4'd11;
+    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_34_us_h2d.a_address & ~(ADDR_MASK_OTBN)) == ADDR_SPACE_OTBN) begin
+      dev_sel_s1n_34 = 4'd12;
 end
   end
 
@@ -522,14 +550,14 @@
     .DReqDepth (16'h0),
     .DRspDepth (16'h0),
     .N         (4)
-  ) u_s1n_16 (
+  ) u_s1n_17 (
     .clk_i        (clk_main_i),
     .rst_ni       (rst_main_ni),
-    .tl_h_i       (tl_s1n_16_us_h2d),
-    .tl_h_o       (tl_s1n_16_us_d2h),
-    .tl_d_o       (tl_s1n_16_ds_h2d),
-    .tl_d_i       (tl_s1n_16_ds_d2h),
-    .dev_select   (dev_sel_s1n_16)
+    .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   (dev_sel_s1n_17)
   );
   tlul_socket_m1 #(
     .HReqDepth (12'h0),
@@ -537,20 +565,6 @@
     .DReqDepth (4'h0),
     .DRspDepth (4'h0),
     .M         (3)
-  ) u_sm1_17 (
-    .clk_i        (clk_main_i),
-    .rst_ni       (rst_main_ni),
-    .tl_h_i       (tl_sm1_17_us_h2d),
-    .tl_h_o       (tl_sm1_17_us_d2h),
-    .tl_d_o       (tl_sm1_17_ds_h2d),
-    .tl_d_i       (tl_sm1_17_ds_d2h)
-  );
-  tlul_socket_m1 #(
-    .HReqDepth (8'h0),
-    .HRspDepth (8'h0),
-    .DReqPass  (1'b0),
-    .DRspPass  (1'b0),
-    .M         (2)
   ) u_sm1_18 (
     .clk_i        (clk_main_i),
     .rst_ni       (rst_main_ni),
@@ -560,11 +574,11 @@
     .tl_d_i       (tl_sm1_18_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_19 (
     .clk_i        (clk_main_i),
     .rst_ni       (rst_main_ni),
@@ -587,33 +601,47 @@
     .tl_d_o       (tl_sm1_20_ds_h2d),
     .tl_d_i       (tl_sm1_20_ds_d2h)
   );
+  tlul_socket_m1 #(
+    .HReqDepth (12'h0),
+    .HRspDepth (12'h0),
+    .DReqDepth (4'h0),
+    .DRspDepth (4'h0),
+    .M         (3)
+  ) u_sm1_21 (
+    .clk_i        (clk_main_i),
+    .rst_ni       (rst_main_ni),
+    .tl_h_i       (tl_sm1_21_us_h2d),
+    .tl_h_o       (tl_sm1_21_us_d2h),
+    .tl_d_o       (tl_sm1_21_ds_h2d),
+    .tl_d_i       (tl_sm1_21_ds_d2h)
+  );
   tlul_socket_1n #(
     .HReqDepth (4'h0),
     .HRspDepth (4'h0),
-    .DReqDepth (52'h0),
-    .DRspDepth (52'h0),
-    .N         (13)
-  ) u_s1n_21 (
+    .DReqDepth (56'h0),
+    .DRspDepth (56'h0),
+    .N         (14)
+  ) u_s1n_22 (
     .clk_i        (clk_main_i),
     .rst_ni       (rst_main_ni),
-    .tl_h_i       (tl_s1n_21_us_h2d),
-    .tl_h_o       (tl_s1n_21_us_d2h),
-    .tl_d_o       (tl_s1n_21_ds_h2d),
-    .tl_d_i       (tl_s1n_21_ds_d2h),
-    .dev_select   (dev_sel_s1n_21)
+    .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   (dev_sel_s1n_22)
   );
   tlul_fifo_async #(
     .ReqDepth        (3),// At least 3 to make async work
     .RspDepth        (3) // At least 3 to make async work
-  ) u_asf_22 (
+  ) u_asf_23 (
     .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_22_us_h2d),
-    .tl_h_o       (tl_asf_22_us_d2h),
-    .tl_d_o       (tl_asf_22_ds_h2d),
-    .tl_d_i       (tl_asf_22_ds_d2h)
+    .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)
   );
   tlul_socket_m1 #(
     .HReqDepth (8'h0),
@@ -621,20 +649,6 @@
     .DReqDepth (4'h0),
     .DRspDepth (4'h0),
     .M         (2)
-  ) u_sm1_23 (
-    .clk_i        (clk_main_i),
-    .rst_ni       (rst_main_ni),
-    .tl_h_i       (tl_sm1_23_us_h2d),
-    .tl_h_o       (tl_sm1_23_us_d2h),
-    .tl_d_o       (tl_sm1_23_ds_h2d),
-    .tl_d_i       (tl_sm1_23_ds_d2h)
-  );
-  tlul_socket_m1 #(
-    .HReqDepth (8'h0),
-    .HRspDepth (8'h0),
-    .DReqPass  (1'b0),
-    .DRspPass  (1'b0),
-    .M         (2)
   ) u_sm1_24 (
     .clk_i        (clk_main_i),
     .rst_ni       (rst_main_ni),
@@ -741,20 +755,48 @@
     .tl_d_o       (tl_sm1_31_ds_h2d),
     .tl_d_i       (tl_sm1_31_ds_d2h)
   );
+  tlul_socket_m1 #(
+    .HReqDepth (8'h0),
+    .HRspDepth (8'h0),
+    .DReqPass  (1'b0),
+    .DRspPass  (1'b0),
+    .M         (2)
+  ) u_sm1_32 (
+    .clk_i        (clk_main_i),
+    .rst_ni       (rst_main_ni),
+    .tl_h_i       (tl_sm1_32_us_h2d),
+    .tl_h_o       (tl_sm1_32_us_d2h),
+    .tl_d_o       (tl_sm1_32_ds_h2d),
+    .tl_d_i       (tl_sm1_32_ds_d2h)
+  );
+  tlul_socket_m1 #(
+    .HReqDepth (8'h0),
+    .HRspDepth (8'h0),
+    .DReqPass  (1'b0),
+    .DRspPass  (1'b0),
+    .M         (2)
+  ) u_sm1_33 (
+    .clk_i        (clk_main_i),
+    .rst_ni       (rst_main_ni),
+    .tl_h_i       (tl_sm1_33_us_h2d),
+    .tl_h_o       (tl_sm1_33_us_d2h),
+    .tl_d_o       (tl_sm1_33_ds_h2d),
+    .tl_d_i       (tl_sm1_33_ds_d2h)
+  );
   tlul_socket_1n #(
     .HReqPass  (1'b0),
     .HRspPass  (1'b0),
-    .DReqDepth (48'h0),
-    .DRspDepth (48'h0),
-    .N         (12)
-  ) u_s1n_32 (
+    .DReqDepth (52'h0),
+    .DRspDepth (52'h0),
+    .N         (13)
+  ) u_s1n_34 (
     .clk_i        (clk_main_i),
     .rst_ni       (rst_main_ni),
-    .tl_h_i       (tl_s1n_32_us_h2d),
-    .tl_h_o       (tl_s1n_32_us_d2h),
-    .tl_d_o       (tl_s1n_32_ds_h2d),
-    .tl_d_i       (tl_s1n_32_ds_d2h),
-    .dev_select   (dev_sel_s1n_32)
+    .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   (dev_sel_s1n_34)
   );
 
 endmodule
diff --git a/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv b/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
index 5394348..3ff1689 100644
--- a/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
+++ b/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
@@ -105,6 +105,8 @@
   tl_d2h_t  tl_nmi_gen_d_d2h;
   tl_h2d_t  tl_usbdev_d_h2d;
   tl_d2h_t  tl_usbdev_d_d2h;
+  tl_h2d_t  tl_otbn_d_h2d;
+  tl_d2h_t  tl_otbn_d_d2h;
 
   tl_h2d_t tl_rom_d_h2d;
   tl_d2h_t tl_rom_d_d2h;
@@ -172,9 +174,10 @@
   logic        cio_usbdev_dp_en_d2p;
   logic        cio_usbdev_dn_d2p;
   logic        cio_usbdev_dn_en_d2p;
+  // otbn
 
 
-  logic [80:0]  intr_vector;
+  logic [82:0]  intr_vector;
   // Interrupt source list
   logic intr_uart_tx_watermark;
   logic intr_uart_rx_watermark;
@@ -226,6 +229,8 @@
   logic intr_usbdev_rx_bitstuff_err;
   logic intr_usbdev_frame;
   logic intr_usbdev_connected;
+  logic intr_otbn_done;
+  logic intr_otbn_err;
 
 
 
@@ -886,8 +891,31 @@
       .rst_usb_48mhz_ni (rstmgr_resets.rst_usb_n)
   );
 
+  otbn u_otbn (
+      .tl_i (tl_otbn_d_h2d),
+      .tl_o (tl_otbn_d_d2h),
+
+      // Interrupt
+      .intr_done_o (intr_otbn_done),
+      .intr_err_o  (intr_otbn_err),
+
+      // [1]: imem_uncorrectable
+      // [2]: dmem_uncorrectable
+      // [3]: reg_uncorrectable
+      .alert_tx_o  ( alert_tx[3:1] ),
+      .alert_rx_i  ( alert_rx[3:1] ),
+
+      // Inter-module signals
+      .idle_o(),
+
+      .clk_i (clkmgr_clocks.clk_main_otbn),
+      .rst_ni (rstmgr_resets.rst_sys_n)
+  );
+
   // interrupt assignments
   assign intr_vector = {
+      intr_otbn_err,
+      intr_otbn_done,
       intr_pwrmgr_wakeup,
       intr_usbdev_connected,
       intr_usbdev_frame,
@@ -978,6 +1006,8 @@
     .tl_alert_handler_i (tl_alert_handler_d_d2h),
     .tl_nmi_gen_o       (tl_nmi_gen_d_h2d),
     .tl_nmi_gen_i       (tl_nmi_gen_d_d2h),
+    .tl_otbn_o          (tl_otbn_d_h2d),
+    .tl_otbn_i          (tl_otbn_d_d2h),
 
     .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 d19f839..40f2d68 100644
--- a/hw/top_earlgrey/rtl/autogen/top_earlgrey_pkg.sv
+++ b/hw/top_earlgrey/rtl/autogen/top_earlgrey_pkg.sv
@@ -21,6 +21,7 @@
   parameter TOP_EARLGREY_CLKMGR_BASE_ADDR = 32'h400C0000;
   parameter TOP_EARLGREY_NMI_GEN_BASE_ADDR = 32'h40140000;
   parameter TOP_EARLGREY_USBDEV_BASE_ADDR = 32'h40150000;
+  parameter TOP_EARLGREY_OTBN_BASE_ADDR = 32'h50000000;
 
   // Enumeration for DIO pins.
   typedef enum {
diff --git a/hw/top_earlgrey/sw/autogen/top_earlgrey.c b/hw/top_earlgrey/sw/autogen/top_earlgrey.c
index 3233e65..522fcdf 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[81] = {
+    top_earlgrey_plic_interrupt_for_peripheral[83] = {
   [kTopEarlgreyPlicIrqIdNone] = kTopEarlgreyPlicPeripheralUnknown,
   [kTopEarlgreyPlicIrqIdGpioGpio0] = kTopEarlgreyPlicPeripheralGpio,
   [kTopEarlgreyPlicIrqIdGpioGpio1] = kTopEarlgreyPlicPeripheralGpio,
@@ -93,4 +93,6 @@
   [kTopEarlgreyPlicIrqIdUsbdevFrame] = kTopEarlgreyPlicPeripheralUsbdev,
   [kTopEarlgreyPlicIrqIdUsbdevConnected] = kTopEarlgreyPlicPeripheralUsbdev,
   [kTopEarlgreyPlicIrqIdPwrmgrWakeup] = kTopEarlgreyPlicPeripheralPwrmgr,
+  [kTopEarlgreyPlicIrqIdOtbnDone] = kTopEarlgreyPlicPeripheralOtbn,
+  [kTopEarlgreyPlicIrqIdOtbnErr] = kTopEarlgreyPlicPeripheralOtbn,
 };
diff --git a/hw/top_earlgrey/sw/autogen/top_earlgrey.h b/hw/top_earlgrey/sw/autogen/top_earlgrey.h
index d4b438f..e9db51f 100644
--- a/hw/top_earlgrey/sw/autogen/top_earlgrey.h
+++ b/hw/top_earlgrey/sw/autogen/top_earlgrey.h
@@ -379,6 +379,24 @@
  */
 #define TOP_EARLGREY_USBDEV_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
+ * registers associated with the peripheral (usually via a DIF).
+ */
+#define TOP_EARLGREY_OTBN_BASE_ADDR 0x50000000u
+
+/**
+ * Peripheral size for otbn 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_OTBN_BASE_ADDR and
+ * `TOP_EARLGREY_OTBN_BASE_ADDR + TOP_EARLGREY_OTBN_SIZE_BYTES`.
+ */
+#define TOP_EARLGREY_OTBN_SIZE_BYTES 0x400000u
+
 
 /**
  * Memory base address for rom in top earlgrey.
@@ -438,7 +456,8 @@
   kTopEarlgreyPlicPeripheralNmiGen = 7, /**< nmi_gen */
   kTopEarlgreyPlicPeripheralUsbdev = 8, /**< usbdev */
   kTopEarlgreyPlicPeripheralPwrmgr = 9, /**< pwrmgr */
-  kTopEarlgreyPlicPeripheralLast = 9, /**< \internal Final PLIC peripheral */
+  kTopEarlgreyPlicPeripheralOtbn = 10, /**< otbn */
+  kTopEarlgreyPlicPeripheralLast = 10, /**< \internal Final PLIC peripheral */
 } top_earlgrey_plic_peripheral_t;
 
 /**
@@ -529,7 +548,9 @@
   kTopEarlgreyPlicIrqIdUsbdevFrame = 78, /**< usbdev_frame */
   kTopEarlgreyPlicIrqIdUsbdevConnected = 79, /**< usbdev_connected */
   kTopEarlgreyPlicIrqIdPwrmgrWakeup = 80, /**< pwrmgr_wakeup */
-  kTopEarlgreyPlicIrqIdLast = 80, /**< \internal The Last Valid Interrupt ID. */
+  kTopEarlgreyPlicIrqIdOtbnDone = 81, /**< otbn_done */
+  kTopEarlgreyPlicIrqIdOtbnErr = 82, /**< otbn_err */
+  kTopEarlgreyPlicIrqIdLast = 82, /**< \internal The Last Valid Interrupt ID. */
 } top_earlgrey_plic_irq_id_t;
 
 /**
@@ -539,7 +560,7 @@
  * `top_earlgrey_plic_peripheral_t`.
  */
 extern const top_earlgrey_plic_peripheral_t
-    top_earlgrey_plic_interrupt_for_peripheral[81];
+    top_earlgrey_plic_interrupt_for_peripheral[83];
 
 /**
  * PLIC external interrupt target.
diff --git a/hw/top_earlgrey/top_earlgrey.core b/hw/top_earlgrey/top_earlgrey.core
index fa47f83..faa6232 100644
--- a/hw/top_earlgrey/top_earlgrey.core
+++ b/hw/top_earlgrey/top_earlgrey.core
@@ -24,6 +24,7 @@
       - lowrisc:ip:spi_device
       - lowrisc:ip:aes
       - lowrisc:ip:hmac
+      - lowrisc:ip:otbn
       - lowrisc:prim:ram_1p_adv
       - lowrisc:prim:rom_adv
       - lowrisc:ip:rstmgr
diff --git a/sw/device/lib/dif/dif_plic.c b/sw/device/lib/dif/dif_plic.c
index 59cc251..6355332 100644
--- a/sw/device/lib/dif/dif_plic.c
+++ b/sw/device/lib/dif/dif_plic.c
@@ -14,7 +14,7 @@
 // If either of these static assertions fail, then the assumptions in this DIF
 // implementation should be revisited. In particular, `plic_target_reg_offsets`
 // may need updating,
-_Static_assert(RV_PLIC_PARAM_NUMSRC == 81,
+_Static_assert(RV_PLIC_PARAM_NUMSRC == 83,
                "PLIC instantiation parameters have changed.");
 _Static_assert(RV_PLIC_PARAM_NUMTARGET == 1,
                "PLIC instantiation parameters have changed.");
diff --git a/sw/device/tests/dif/dif_plic_unittest.cc b/sw/device/tests/dif/dif_plic_unittest.cc
index 0c6f279..a8b732b 100644
--- a/sw/device/tests/dif/dif_plic_unittest.cc
+++ b/sw/device/tests/dif/dif_plic_unittest.cc
@@ -116,7 +116,7 @@
           RV_PLIC_IE01_REG_OFFSET, RV_PLIC_IE01_E63,
       },
       {
-          RV_PLIC_IE02_REG_OFFSET, RV_PLIC_IE02_E80,
+          RV_PLIC_IE02_REG_OFFSET, RV_PLIC_IE02_E82,
       },
   };
 };
@@ -164,7 +164,7 @@
           RV_PLIC_LE1_REG_OFFSET, RV_PLIC_LE1_LE63,
       },
       {
-          RV_PLIC_LE2_REG_OFFSET, RV_PLIC_LE2_LE80,
+          RV_PLIC_LE2_REG_OFFSET, RV_PLIC_LE2_LE82,
       },
   };
 };
@@ -265,7 +265,7 @@
           RV_PLIC_IP1_REG_OFFSET, RV_PLIC_IP1_P63,
       },
       {
-          RV_PLIC_IP2_REG_OFFSET, RV_PLIC_IP2_P80,
+          RV_PLIC_IP2_REG_OFFSET, RV_PLIC_IP2_P82,
       },
   };
 };