[keymgr] Actually increase salt / sw binding sizes

Signed-off-by: Timothy Chen <timothytim@google.com>
diff --git a/hw/ip/keymgr/data/keymgr.hjson b/hw/ip/keymgr/data/keymgr.hjson
index d819842..e6647cc 100644
--- a/hw/ip/keymgr/data/keymgr.hjson
+++ b/hw/ip/keymgr/data/keymgr.hjson
@@ -180,13 +180,13 @@
     { name: "NumSaltReg",
       desc: "Number of Registers for SW inputs (Salt)",
       type: "int",
-      default: "4",
+      default: "8",
       local: "true"
     },
     { name: "NumSwBindingReg",
       desc: "Number of Registers for SW inputs (SW binding)",
       type: "int",
-      default: "4",
+      default: "8",
       local: "true"
     },
     { name: "NumOutReg",
diff --git a/hw/ip/keymgr/dv/env/keymgr_scoreboard.sv b/hw/ip/keymgr/dv/env/keymgr_scoreboard.sv
index 6bdc473..e155362 100644
--- a/hw/ip/keymgr/dv/env/keymgr_scoreboard.sv
+++ b/hw/ip/keymgr/dv/env/keymgr_scoreboard.sv
@@ -21,20 +21,20 @@
 
   typedef struct packed {
     // some portions are unused, which are 0s
-    bit [keymgr_pkg::AdvDataWidth-keymgr_pkg::KeyWidth-TL_DW*4-1:0]  unused;
-    bit [3:0][TL_DW-1:0] SoftwareBinding;
+    bit [keymgr_pkg::AdvDataWidth-keymgr_pkg::KeyWidth-keymgr_pkg::SwBindingWidth-1:0] unused;
+    bit [keymgr_reg_pkg::NumSwBindingReg-1:0][TL_DW-1:0] SoftwareBinding;
     bit [keymgr_pkg::KeyWidth-1:0] OwnerRootSecret;
   } adv_owner_int_data_t;
 
   typedef struct packed {
     // some portions are unused, which are 0s
-    bit [keymgr_pkg::AdvDataWidth-TL_DW*4-1:0]  unused;
-    bit [3:0][TL_DW-1:0] SoftwareBinding;
+    bit [keymgr_pkg::AdvDataWidth-keymgr_pkg::SwBindingWidth-1:0]  unused;
+    bit [keymgr_reg_pkg::NumSwBindingReg-1:0][TL_DW-1:0] SoftwareBinding;
   } adv_owner_data_t;
 
   typedef struct packed {
     bit [TL_DW-1:0]      KeyVersion;
-    bit [3:0][TL_DW-1:0] Salt;
+    bit [keymgr_reg_pkg::NumSaltReg-1:0][TL_DW-1:0] Salt;
     keymgr_pkg::seed_t   KeyID;
     keymgr_pkg::seed_t   SoftwareExportConstant;
   } gen_out_data_t;
@@ -704,6 +704,10 @@
     act = {<<8{byte_data_q}};
 
     exp.OwnerRootSecret = cfg.keymgr_vif.flash.seeds[flash_ctrl_pkg::OwnerSeedIdx];
+    exp.SoftwareBinding[7] = `gmv(ral.sw_binding_7);
+    exp.SoftwareBinding[6] = `gmv(ral.sw_binding_6);
+    exp.SoftwareBinding[5] = `gmv(ral.sw_binding_5);
+    exp.SoftwareBinding[4] = `gmv(ral.sw_binding_4);
     exp.SoftwareBinding[3] = `gmv(ral.sw_binding_3);
     exp.SoftwareBinding[2] = `gmv(ral.sw_binding_2);
     exp.SoftwareBinding[1] = `gmv(ral.sw_binding_1);
@@ -711,10 +715,9 @@
 
     `CREATE_CMP_STR(unused)
     `CREATE_CMP_STR(OwnerRootSecret)
-    `CREATE_CMP_STR(SoftwareBinding[3])
-    `CREATE_CMP_STR(SoftwareBinding[2])
-    `CREATE_CMP_STR(SoftwareBinding[1])
-    `CREATE_CMP_STR(SoftwareBinding[0])
+    for (int i=0; i < keymgr_reg_pkg::NumSwBindingReg; i++) begin
+      `CREATE_CMP_STR(SoftwareBinding[i])
+    end
 
     if (exp_match) begin
       `DV_CHECK_EQ(act, exp, str)
@@ -731,16 +734,19 @@
 
     act = {<<8{byte_data_q}};
 
+    exp.SoftwareBinding[7] = `gmv(ral.sw_binding_7);
+    exp.SoftwareBinding[6] = `gmv(ral.sw_binding_6);
+    exp.SoftwareBinding[5] = `gmv(ral.sw_binding_5);
+    exp.SoftwareBinding[4] = `gmv(ral.sw_binding_4);
     exp.SoftwareBinding[3] = `gmv(ral.sw_binding_3);
     exp.SoftwareBinding[2] = `gmv(ral.sw_binding_2);
     exp.SoftwareBinding[1] = `gmv(ral.sw_binding_1);
     exp.SoftwareBinding[0] = `gmv(ral.sw_binding_0);
 
     `CREATE_CMP_STR(unused)
-    `CREATE_CMP_STR(SoftwareBinding[3])
-    `CREATE_CMP_STR(SoftwareBinding[2])
-    `CREATE_CMP_STR(SoftwareBinding[1])
-    `CREATE_CMP_STR(SoftwareBinding[0])
+    for (int i=0; i < keymgr_reg_pkg::NumSwBindingReg; i++) begin
+      `CREATE_CMP_STR(SoftwareBinding[i])
+    end
 
     `DV_CHECK_EQ(act, exp, str)
 
@@ -801,6 +807,10 @@
     exp.Salt[1]    = `gmv(ral.salt_1);
     exp.Salt[2]    = `gmv(ral.salt_2);
     exp.Salt[3]    = `gmv(ral.salt_3);
+    exp.Salt[4]    = `gmv(ral.salt_4);
+    exp.Salt[5]    = `gmv(ral.salt_5);
+    exp.Salt[6]    = `gmv(ral.salt_6);
+    exp.Salt[7]    = `gmv(ral.salt_7);
     case (dest)
       keymgr_pkg::Kmac: exp.KeyID = keymgr_pkg::RndCnstKmacSeedDefault;
       keymgr_pkg::Hmac: exp.KeyID = keymgr_pkg::RndCnstHmacSeedDefault;
diff --git a/hw/ip/keymgr/rtl/keymgr_pkg.sv b/hw/ip/keymgr/rtl/keymgr_pkg.sv
index 7577e4a..58ce0a6 100644
--- a/hw/ip/keymgr/rtl/keymgr_pkg.sv
+++ b/hw/ip/keymgr/rtl/keymgr_pkg.sv
@@ -76,9 +76,10 @@
   parameter int StageWidth = $clog2(KeyMgrStages);
 
   // Max Payload Width to derivation function
-  // This should be decomposed to 1600 - security_strength*2
   // see security strength description https://keccak.team/keccak.html
-  parameter int KDFMaxWidth = 1088;
+  // The max width here is chosen arbitrarily to ensure we do not get out of hand.
+  // Since KMAC is a MAC operation, the data can be as long as we need.
+  parameter int KDFMaxWidth = 1600;
 
   // Enumeration for operations
   typedef enum logic [2:0] {
diff --git a/hw/ip/keymgr/rtl/keymgr_reg_pkg.sv b/hw/ip/keymgr/rtl/keymgr_reg_pkg.sv
index 2146f9a..44383c7 100644
--- a/hw/ip/keymgr/rtl/keymgr_reg_pkg.sv
+++ b/hw/ip/keymgr/rtl/keymgr_reg_pkg.sv
@@ -7,8 +7,8 @@
 package keymgr_reg_pkg;
 
   // Param list
-  parameter int NumSaltReg = 4;
-  parameter int NumSwBindingReg = 4;
+  parameter int NumSaltReg = 8;
+  parameter int NumSwBindingReg = 8;
   parameter int NumOutReg = 8;
   parameter int NumKeyVersion = 1;
   parameter int NumAlerts = 2;
@@ -169,16 +169,16 @@
 
   // Register -> HW type
   typedef struct packed {
-    keymgr_reg2hw_intr_state_reg_t intr_state; // [420:420]
-    keymgr_reg2hw_intr_enable_reg_t intr_enable; // [419:419]
-    keymgr_reg2hw_intr_test_reg_t intr_test; // [418:417]
-    keymgr_reg2hw_alert_test_reg_t alert_test; // [416:413]
-    keymgr_reg2hw_control_reg_t control; // [412:407]
-    keymgr_reg2hw_sideload_clear_reg_t sideload_clear; // [406:406]
-    keymgr_reg2hw_reseed_interval_reg_t reseed_interval; // [405:390]
-    keymgr_reg2hw_sw_binding_regwen_reg_t sw_binding_regwen; // [389:388]
-    keymgr_reg2hw_sw_binding_mreg_t [3:0] sw_binding; // [387:260]
-    keymgr_reg2hw_salt_mreg_t [3:0] salt; // [259:132]
+    keymgr_reg2hw_intr_state_reg_t intr_state; // [676:676]
+    keymgr_reg2hw_intr_enable_reg_t intr_enable; // [675:675]
+    keymgr_reg2hw_intr_test_reg_t intr_test; // [674:673]
+    keymgr_reg2hw_alert_test_reg_t alert_test; // [672:669]
+    keymgr_reg2hw_control_reg_t control; // [668:663]
+    keymgr_reg2hw_sideload_clear_reg_t sideload_clear; // [662:662]
+    keymgr_reg2hw_reseed_interval_reg_t reseed_interval; // [661:646]
+    keymgr_reg2hw_sw_binding_regwen_reg_t sw_binding_regwen; // [645:644]
+    keymgr_reg2hw_sw_binding_mreg_t [7:0] sw_binding; // [643:388]
+    keymgr_reg2hw_salt_mreg_t [7:0] salt; // [387:132]
     keymgr_reg2hw_key_version_mreg_t [0:0] key_version; // [131:100]
     keymgr_reg2hw_max_creator_key_ver_reg_t max_creator_key_ver; // [99:68]
     keymgr_reg2hw_max_owner_int_key_ver_reg_t max_owner_int_key_ver; // [67:36]
@@ -213,36 +213,44 @@
   parameter logic [BlockAw-1:0] KEYMGR_SW_BINDING_1_OFFSET = 8'h 28;
   parameter logic [BlockAw-1:0] KEYMGR_SW_BINDING_2_OFFSET = 8'h 2c;
   parameter logic [BlockAw-1:0] KEYMGR_SW_BINDING_3_OFFSET = 8'h 30;
-  parameter logic [BlockAw-1:0] KEYMGR_SALT_0_OFFSET = 8'h 34;
-  parameter logic [BlockAw-1:0] KEYMGR_SALT_1_OFFSET = 8'h 38;
-  parameter logic [BlockAw-1:0] KEYMGR_SALT_2_OFFSET = 8'h 3c;
-  parameter logic [BlockAw-1:0] KEYMGR_SALT_3_OFFSET = 8'h 40;
-  parameter logic [BlockAw-1:0] KEYMGR_KEY_VERSION_OFFSET = 8'h 44;
-  parameter logic [BlockAw-1:0] KEYMGR_MAX_CREATOR_KEY_VER_REGWEN_OFFSET = 8'h 48;
-  parameter logic [BlockAw-1:0] KEYMGR_MAX_CREATOR_KEY_VER_OFFSET = 8'h 4c;
-  parameter logic [BlockAw-1:0] KEYMGR_MAX_OWNER_INT_KEY_VER_REGWEN_OFFSET = 8'h 50;
-  parameter logic [BlockAw-1:0] KEYMGR_MAX_OWNER_INT_KEY_VER_OFFSET = 8'h 54;
-  parameter logic [BlockAw-1:0] KEYMGR_MAX_OWNER_KEY_VER_REGWEN_OFFSET = 8'h 58;
-  parameter logic [BlockAw-1:0] KEYMGR_MAX_OWNER_KEY_VER_OFFSET = 8'h 5c;
-  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE0_OUTPUT_0_OFFSET = 8'h 60;
-  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE0_OUTPUT_1_OFFSET = 8'h 64;
-  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE0_OUTPUT_2_OFFSET = 8'h 68;
-  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE0_OUTPUT_3_OFFSET = 8'h 6c;
-  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE0_OUTPUT_4_OFFSET = 8'h 70;
-  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE0_OUTPUT_5_OFFSET = 8'h 74;
-  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE0_OUTPUT_6_OFFSET = 8'h 78;
-  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE0_OUTPUT_7_OFFSET = 8'h 7c;
-  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE1_OUTPUT_0_OFFSET = 8'h 80;
-  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE1_OUTPUT_1_OFFSET = 8'h 84;
-  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE1_OUTPUT_2_OFFSET = 8'h 88;
-  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE1_OUTPUT_3_OFFSET = 8'h 8c;
-  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE1_OUTPUT_4_OFFSET = 8'h 90;
-  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE1_OUTPUT_5_OFFSET = 8'h 94;
-  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE1_OUTPUT_6_OFFSET = 8'h 98;
-  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE1_OUTPUT_7_OFFSET = 8'h 9c;
-  parameter logic [BlockAw-1:0] KEYMGR_WORKING_STATE_OFFSET = 8'h a0;
-  parameter logic [BlockAw-1:0] KEYMGR_OP_STATUS_OFFSET = 8'h a4;
-  parameter logic [BlockAw-1:0] KEYMGR_ERR_CODE_OFFSET = 8'h a8;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_BINDING_4_OFFSET = 8'h 34;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_BINDING_5_OFFSET = 8'h 38;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_BINDING_6_OFFSET = 8'h 3c;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_BINDING_7_OFFSET = 8'h 40;
+  parameter logic [BlockAw-1:0] KEYMGR_SALT_0_OFFSET = 8'h 44;
+  parameter logic [BlockAw-1:0] KEYMGR_SALT_1_OFFSET = 8'h 48;
+  parameter logic [BlockAw-1:0] KEYMGR_SALT_2_OFFSET = 8'h 4c;
+  parameter logic [BlockAw-1:0] KEYMGR_SALT_3_OFFSET = 8'h 50;
+  parameter logic [BlockAw-1:0] KEYMGR_SALT_4_OFFSET = 8'h 54;
+  parameter logic [BlockAw-1:0] KEYMGR_SALT_5_OFFSET = 8'h 58;
+  parameter logic [BlockAw-1:0] KEYMGR_SALT_6_OFFSET = 8'h 5c;
+  parameter logic [BlockAw-1:0] KEYMGR_SALT_7_OFFSET = 8'h 60;
+  parameter logic [BlockAw-1:0] KEYMGR_KEY_VERSION_OFFSET = 8'h 64;
+  parameter logic [BlockAw-1:0] KEYMGR_MAX_CREATOR_KEY_VER_REGWEN_OFFSET = 8'h 68;
+  parameter logic [BlockAw-1:0] KEYMGR_MAX_CREATOR_KEY_VER_OFFSET = 8'h 6c;
+  parameter logic [BlockAw-1:0] KEYMGR_MAX_OWNER_INT_KEY_VER_REGWEN_OFFSET = 8'h 70;
+  parameter logic [BlockAw-1:0] KEYMGR_MAX_OWNER_INT_KEY_VER_OFFSET = 8'h 74;
+  parameter logic [BlockAw-1:0] KEYMGR_MAX_OWNER_KEY_VER_REGWEN_OFFSET = 8'h 78;
+  parameter logic [BlockAw-1:0] KEYMGR_MAX_OWNER_KEY_VER_OFFSET = 8'h 7c;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE0_OUTPUT_0_OFFSET = 8'h 80;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE0_OUTPUT_1_OFFSET = 8'h 84;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE0_OUTPUT_2_OFFSET = 8'h 88;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE0_OUTPUT_3_OFFSET = 8'h 8c;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE0_OUTPUT_4_OFFSET = 8'h 90;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE0_OUTPUT_5_OFFSET = 8'h 94;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE0_OUTPUT_6_OFFSET = 8'h 98;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE0_OUTPUT_7_OFFSET = 8'h 9c;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE1_OUTPUT_0_OFFSET = 8'h a0;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE1_OUTPUT_1_OFFSET = 8'h a4;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE1_OUTPUT_2_OFFSET = 8'h a8;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE1_OUTPUT_3_OFFSET = 8'h ac;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE1_OUTPUT_4_OFFSET = 8'h b0;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE1_OUTPUT_5_OFFSET = 8'h b4;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE1_OUTPUT_6_OFFSET = 8'h b8;
+  parameter logic [BlockAw-1:0] KEYMGR_SW_SHARE1_OUTPUT_7_OFFSET = 8'h bc;
+  parameter logic [BlockAw-1:0] KEYMGR_WORKING_STATE_OFFSET = 8'h c0;
+  parameter logic [BlockAw-1:0] KEYMGR_OP_STATUS_OFFSET = 8'h c4;
+  parameter logic [BlockAw-1:0] KEYMGR_ERR_CODE_OFFSET = 8'h c8;
 
   // Reset values for hwext registers and their fields
   parameter logic [0:0] KEYMGR_INTR_TEST_RESVAL = 1'h 0;
@@ -270,10 +278,18 @@
     KEYMGR_SW_BINDING_1,
     KEYMGR_SW_BINDING_2,
     KEYMGR_SW_BINDING_3,
+    KEYMGR_SW_BINDING_4,
+    KEYMGR_SW_BINDING_5,
+    KEYMGR_SW_BINDING_6,
+    KEYMGR_SW_BINDING_7,
     KEYMGR_SALT_0,
     KEYMGR_SALT_1,
     KEYMGR_SALT_2,
     KEYMGR_SALT_3,
+    KEYMGR_SALT_4,
+    KEYMGR_SALT_5,
+    KEYMGR_SALT_6,
+    KEYMGR_SALT_7,
     KEYMGR_KEY_VERSION,
     KEYMGR_MAX_CREATOR_KEY_VER_REGWEN,
     KEYMGR_MAX_CREATOR_KEY_VER,
@@ -303,7 +319,7 @@
   } keymgr_id_e;
 
   // Register width information to check illegal writes
-  parameter logic [3:0] KEYMGR_PERMIT [43] = '{
+  parameter logic [3:0] KEYMGR_PERMIT [51] = '{
     4'b 0001, // index[ 0] KEYMGR_INTR_STATE
     4'b 0001, // index[ 1] KEYMGR_INTR_ENABLE
     4'b 0001, // index[ 2] KEYMGR_INTR_TEST
@@ -317,36 +333,44 @@
     4'b 1111, // index[10] KEYMGR_SW_BINDING_1
     4'b 1111, // index[11] KEYMGR_SW_BINDING_2
     4'b 1111, // index[12] KEYMGR_SW_BINDING_3
-    4'b 1111, // index[13] KEYMGR_SALT_0
-    4'b 1111, // index[14] KEYMGR_SALT_1
-    4'b 1111, // index[15] KEYMGR_SALT_2
-    4'b 1111, // index[16] KEYMGR_SALT_3
-    4'b 1111, // index[17] KEYMGR_KEY_VERSION
-    4'b 0001, // index[18] KEYMGR_MAX_CREATOR_KEY_VER_REGWEN
-    4'b 1111, // index[19] KEYMGR_MAX_CREATOR_KEY_VER
-    4'b 0001, // index[20] KEYMGR_MAX_OWNER_INT_KEY_VER_REGWEN
-    4'b 1111, // index[21] KEYMGR_MAX_OWNER_INT_KEY_VER
-    4'b 0001, // index[22] KEYMGR_MAX_OWNER_KEY_VER_REGWEN
-    4'b 1111, // index[23] KEYMGR_MAX_OWNER_KEY_VER
-    4'b 1111, // index[24] KEYMGR_SW_SHARE0_OUTPUT_0
-    4'b 1111, // index[25] KEYMGR_SW_SHARE0_OUTPUT_1
-    4'b 1111, // index[26] KEYMGR_SW_SHARE0_OUTPUT_2
-    4'b 1111, // index[27] KEYMGR_SW_SHARE0_OUTPUT_3
-    4'b 1111, // index[28] KEYMGR_SW_SHARE0_OUTPUT_4
-    4'b 1111, // index[29] KEYMGR_SW_SHARE0_OUTPUT_5
-    4'b 1111, // index[30] KEYMGR_SW_SHARE0_OUTPUT_6
-    4'b 1111, // index[31] KEYMGR_SW_SHARE0_OUTPUT_7
-    4'b 1111, // index[32] KEYMGR_SW_SHARE1_OUTPUT_0
-    4'b 1111, // index[33] KEYMGR_SW_SHARE1_OUTPUT_1
-    4'b 1111, // index[34] KEYMGR_SW_SHARE1_OUTPUT_2
-    4'b 1111, // index[35] KEYMGR_SW_SHARE1_OUTPUT_3
-    4'b 1111, // index[36] KEYMGR_SW_SHARE1_OUTPUT_4
-    4'b 1111, // index[37] KEYMGR_SW_SHARE1_OUTPUT_5
-    4'b 1111, // index[38] KEYMGR_SW_SHARE1_OUTPUT_6
-    4'b 1111, // index[39] KEYMGR_SW_SHARE1_OUTPUT_7
-    4'b 0001, // index[40] KEYMGR_WORKING_STATE
-    4'b 0001, // index[41] KEYMGR_OP_STATUS
-    4'b 0001  // index[42] KEYMGR_ERR_CODE
+    4'b 1111, // index[13] KEYMGR_SW_BINDING_4
+    4'b 1111, // index[14] KEYMGR_SW_BINDING_5
+    4'b 1111, // index[15] KEYMGR_SW_BINDING_6
+    4'b 1111, // index[16] KEYMGR_SW_BINDING_7
+    4'b 1111, // index[17] KEYMGR_SALT_0
+    4'b 1111, // index[18] KEYMGR_SALT_1
+    4'b 1111, // index[19] KEYMGR_SALT_2
+    4'b 1111, // index[20] KEYMGR_SALT_3
+    4'b 1111, // index[21] KEYMGR_SALT_4
+    4'b 1111, // index[22] KEYMGR_SALT_5
+    4'b 1111, // index[23] KEYMGR_SALT_6
+    4'b 1111, // index[24] KEYMGR_SALT_7
+    4'b 1111, // index[25] KEYMGR_KEY_VERSION
+    4'b 0001, // index[26] KEYMGR_MAX_CREATOR_KEY_VER_REGWEN
+    4'b 1111, // index[27] KEYMGR_MAX_CREATOR_KEY_VER
+    4'b 0001, // index[28] KEYMGR_MAX_OWNER_INT_KEY_VER_REGWEN
+    4'b 1111, // index[29] KEYMGR_MAX_OWNER_INT_KEY_VER
+    4'b 0001, // index[30] KEYMGR_MAX_OWNER_KEY_VER_REGWEN
+    4'b 1111, // index[31] KEYMGR_MAX_OWNER_KEY_VER
+    4'b 1111, // index[32] KEYMGR_SW_SHARE0_OUTPUT_0
+    4'b 1111, // index[33] KEYMGR_SW_SHARE0_OUTPUT_1
+    4'b 1111, // index[34] KEYMGR_SW_SHARE0_OUTPUT_2
+    4'b 1111, // index[35] KEYMGR_SW_SHARE0_OUTPUT_3
+    4'b 1111, // index[36] KEYMGR_SW_SHARE0_OUTPUT_4
+    4'b 1111, // index[37] KEYMGR_SW_SHARE0_OUTPUT_5
+    4'b 1111, // index[38] KEYMGR_SW_SHARE0_OUTPUT_6
+    4'b 1111, // index[39] KEYMGR_SW_SHARE0_OUTPUT_7
+    4'b 1111, // index[40] KEYMGR_SW_SHARE1_OUTPUT_0
+    4'b 1111, // index[41] KEYMGR_SW_SHARE1_OUTPUT_1
+    4'b 1111, // index[42] KEYMGR_SW_SHARE1_OUTPUT_2
+    4'b 1111, // index[43] KEYMGR_SW_SHARE1_OUTPUT_3
+    4'b 1111, // index[44] KEYMGR_SW_SHARE1_OUTPUT_4
+    4'b 1111, // index[45] KEYMGR_SW_SHARE1_OUTPUT_5
+    4'b 1111, // index[46] KEYMGR_SW_SHARE1_OUTPUT_6
+    4'b 1111, // index[47] KEYMGR_SW_SHARE1_OUTPUT_7
+    4'b 0001, // index[48] KEYMGR_WORKING_STATE
+    4'b 0001, // index[49] KEYMGR_OP_STATUS
+    4'b 0001  // index[50] KEYMGR_ERR_CODE
   };
 
 endpackage
diff --git a/hw/ip/keymgr/rtl/keymgr_reg_top.sv b/hw/ip/keymgr/rtl/keymgr_reg_top.sv
index 7cb6268..6d0e2e1 100644
--- a/hw/ip/keymgr/rtl/keymgr_reg_top.sv
+++ b/hw/ip/keymgr/rtl/keymgr_reg_top.sv
@@ -145,6 +145,18 @@
   logic [31:0] sw_binding_3_qs;
   logic [31:0] sw_binding_3_wd;
   logic sw_binding_3_we;
+  logic [31:0] sw_binding_4_qs;
+  logic [31:0] sw_binding_4_wd;
+  logic sw_binding_4_we;
+  logic [31:0] sw_binding_5_qs;
+  logic [31:0] sw_binding_5_wd;
+  logic sw_binding_5_we;
+  logic [31:0] sw_binding_6_qs;
+  logic [31:0] sw_binding_6_wd;
+  logic sw_binding_6_we;
+  logic [31:0] sw_binding_7_qs;
+  logic [31:0] sw_binding_7_wd;
+  logic sw_binding_7_we;
   logic [31:0] salt_0_qs;
   logic [31:0] salt_0_wd;
   logic salt_0_we;
@@ -157,6 +169,18 @@
   logic [31:0] salt_3_qs;
   logic [31:0] salt_3_wd;
   logic salt_3_we;
+  logic [31:0] salt_4_qs;
+  logic [31:0] salt_4_wd;
+  logic salt_4_we;
+  logic [31:0] salt_5_qs;
+  logic [31:0] salt_5_wd;
+  logic salt_5_we;
+  logic [31:0] salt_6_qs;
+  logic [31:0] salt_6_wd;
+  logic salt_6_we;
+  logic [31:0] salt_7_qs;
+  logic [31:0] salt_7_wd;
+  logic salt_7_we;
   logic [31:0] key_version_qs;
   logic [31:0] key_version_wd;
   logic key_version_we;
@@ -621,6 +645,114 @@
     .qs     (sw_binding_3_qs)
   );
 
+  // Subregister 4 of Multireg sw_binding
+  // R[sw_binding_4]: V(False)
+
+  prim_subreg #(
+    .DW      (32),
+    .SWACCESS("RW"),
+    .RESVAL  (32'h0)
+  ) u_sw_binding_4 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (sw_binding_4_we & sw_binding_regwen_qs),
+    .wd     (sw_binding_4_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.sw_binding[4].q ),
+
+    // to register interface (read)
+    .qs     (sw_binding_4_qs)
+  );
+
+  // Subregister 5 of Multireg sw_binding
+  // R[sw_binding_5]: V(False)
+
+  prim_subreg #(
+    .DW      (32),
+    .SWACCESS("RW"),
+    .RESVAL  (32'h0)
+  ) u_sw_binding_5 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (sw_binding_5_we & sw_binding_regwen_qs),
+    .wd     (sw_binding_5_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.sw_binding[5].q ),
+
+    // to register interface (read)
+    .qs     (sw_binding_5_qs)
+  );
+
+  // Subregister 6 of Multireg sw_binding
+  // R[sw_binding_6]: V(False)
+
+  prim_subreg #(
+    .DW      (32),
+    .SWACCESS("RW"),
+    .RESVAL  (32'h0)
+  ) u_sw_binding_6 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (sw_binding_6_we & sw_binding_regwen_qs),
+    .wd     (sw_binding_6_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.sw_binding[6].q ),
+
+    // to register interface (read)
+    .qs     (sw_binding_6_qs)
+  );
+
+  // Subregister 7 of Multireg sw_binding
+  // R[sw_binding_7]: V(False)
+
+  prim_subreg #(
+    .DW      (32),
+    .SWACCESS("RW"),
+    .RESVAL  (32'h0)
+  ) u_sw_binding_7 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (sw_binding_7_we & sw_binding_regwen_qs),
+    .wd     (sw_binding_7_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.sw_binding[7].q ),
+
+    // to register interface (read)
+    .qs     (sw_binding_7_qs)
+  );
+
 
 
   // Subregister 0 of Multireg salt
@@ -731,6 +863,114 @@
     .qs     (salt_3_qs)
   );
 
+  // Subregister 4 of Multireg salt
+  // R[salt_4]: V(False)
+
+  prim_subreg #(
+    .DW      (32),
+    .SWACCESS("RW"),
+    .RESVAL  (32'h0)
+  ) u_salt_4 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (salt_4_we & cfg_regwen_qs),
+    .wd     (salt_4_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.salt[4].q ),
+
+    // to register interface (read)
+    .qs     (salt_4_qs)
+  );
+
+  // Subregister 5 of Multireg salt
+  // R[salt_5]: V(False)
+
+  prim_subreg #(
+    .DW      (32),
+    .SWACCESS("RW"),
+    .RESVAL  (32'h0)
+  ) u_salt_5 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (salt_5_we & cfg_regwen_qs),
+    .wd     (salt_5_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.salt[5].q ),
+
+    // to register interface (read)
+    .qs     (salt_5_qs)
+  );
+
+  // Subregister 6 of Multireg salt
+  // R[salt_6]: V(False)
+
+  prim_subreg #(
+    .DW      (32),
+    .SWACCESS("RW"),
+    .RESVAL  (32'h0)
+  ) u_salt_6 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (salt_6_we & cfg_regwen_qs),
+    .wd     (salt_6_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.salt[6].q ),
+
+    // to register interface (read)
+    .qs     (salt_6_qs)
+  );
+
+  // Subregister 7 of Multireg salt
+  // R[salt_7]: V(False)
+
+  prim_subreg #(
+    .DW      (32),
+    .SWACCESS("RW"),
+    .RESVAL  (32'h0)
+  ) u_salt_7 (
+    .clk_i   (clk_i    ),
+    .rst_ni  (rst_ni  ),
+
+    // from register interface (qualified with register enable)
+    .we     (salt_7_we & cfg_regwen_qs),
+    .wd     (salt_7_wd),
+
+    // from internal hardware
+    .de     (1'b0),
+    .d      ('0  ),
+
+    // to internal hardware
+    .qe     (),
+    .q      (reg2hw.salt[7].q ),
+
+    // to register interface (read)
+    .qs     (salt_7_qs)
+  );
+
 
 
   // Subregister 0 of Multireg key_version
@@ -1520,7 +1760,7 @@
 
 
 
-  logic [42:0] addr_hit;
+  logic [50:0] addr_hit;
   always_comb begin
     addr_hit = '0;
     addr_hit[ 0] = (reg_addr == KEYMGR_INTR_STATE_OFFSET);
@@ -1536,36 +1776,44 @@
     addr_hit[10] = (reg_addr == KEYMGR_SW_BINDING_1_OFFSET);
     addr_hit[11] = (reg_addr == KEYMGR_SW_BINDING_2_OFFSET);
     addr_hit[12] = (reg_addr == KEYMGR_SW_BINDING_3_OFFSET);
-    addr_hit[13] = (reg_addr == KEYMGR_SALT_0_OFFSET);
-    addr_hit[14] = (reg_addr == KEYMGR_SALT_1_OFFSET);
-    addr_hit[15] = (reg_addr == KEYMGR_SALT_2_OFFSET);
-    addr_hit[16] = (reg_addr == KEYMGR_SALT_3_OFFSET);
-    addr_hit[17] = (reg_addr == KEYMGR_KEY_VERSION_OFFSET);
-    addr_hit[18] = (reg_addr == KEYMGR_MAX_CREATOR_KEY_VER_REGWEN_OFFSET);
-    addr_hit[19] = (reg_addr == KEYMGR_MAX_CREATOR_KEY_VER_OFFSET);
-    addr_hit[20] = (reg_addr == KEYMGR_MAX_OWNER_INT_KEY_VER_REGWEN_OFFSET);
-    addr_hit[21] = (reg_addr == KEYMGR_MAX_OWNER_INT_KEY_VER_OFFSET);
-    addr_hit[22] = (reg_addr == KEYMGR_MAX_OWNER_KEY_VER_REGWEN_OFFSET);
-    addr_hit[23] = (reg_addr == KEYMGR_MAX_OWNER_KEY_VER_OFFSET);
-    addr_hit[24] = (reg_addr == KEYMGR_SW_SHARE0_OUTPUT_0_OFFSET);
-    addr_hit[25] = (reg_addr == KEYMGR_SW_SHARE0_OUTPUT_1_OFFSET);
-    addr_hit[26] = (reg_addr == KEYMGR_SW_SHARE0_OUTPUT_2_OFFSET);
-    addr_hit[27] = (reg_addr == KEYMGR_SW_SHARE0_OUTPUT_3_OFFSET);
-    addr_hit[28] = (reg_addr == KEYMGR_SW_SHARE0_OUTPUT_4_OFFSET);
-    addr_hit[29] = (reg_addr == KEYMGR_SW_SHARE0_OUTPUT_5_OFFSET);
-    addr_hit[30] = (reg_addr == KEYMGR_SW_SHARE0_OUTPUT_6_OFFSET);
-    addr_hit[31] = (reg_addr == KEYMGR_SW_SHARE0_OUTPUT_7_OFFSET);
-    addr_hit[32] = (reg_addr == KEYMGR_SW_SHARE1_OUTPUT_0_OFFSET);
-    addr_hit[33] = (reg_addr == KEYMGR_SW_SHARE1_OUTPUT_1_OFFSET);
-    addr_hit[34] = (reg_addr == KEYMGR_SW_SHARE1_OUTPUT_2_OFFSET);
-    addr_hit[35] = (reg_addr == KEYMGR_SW_SHARE1_OUTPUT_3_OFFSET);
-    addr_hit[36] = (reg_addr == KEYMGR_SW_SHARE1_OUTPUT_4_OFFSET);
-    addr_hit[37] = (reg_addr == KEYMGR_SW_SHARE1_OUTPUT_5_OFFSET);
-    addr_hit[38] = (reg_addr == KEYMGR_SW_SHARE1_OUTPUT_6_OFFSET);
-    addr_hit[39] = (reg_addr == KEYMGR_SW_SHARE1_OUTPUT_7_OFFSET);
-    addr_hit[40] = (reg_addr == KEYMGR_WORKING_STATE_OFFSET);
-    addr_hit[41] = (reg_addr == KEYMGR_OP_STATUS_OFFSET);
-    addr_hit[42] = (reg_addr == KEYMGR_ERR_CODE_OFFSET);
+    addr_hit[13] = (reg_addr == KEYMGR_SW_BINDING_4_OFFSET);
+    addr_hit[14] = (reg_addr == KEYMGR_SW_BINDING_5_OFFSET);
+    addr_hit[15] = (reg_addr == KEYMGR_SW_BINDING_6_OFFSET);
+    addr_hit[16] = (reg_addr == KEYMGR_SW_BINDING_7_OFFSET);
+    addr_hit[17] = (reg_addr == KEYMGR_SALT_0_OFFSET);
+    addr_hit[18] = (reg_addr == KEYMGR_SALT_1_OFFSET);
+    addr_hit[19] = (reg_addr == KEYMGR_SALT_2_OFFSET);
+    addr_hit[20] = (reg_addr == KEYMGR_SALT_3_OFFSET);
+    addr_hit[21] = (reg_addr == KEYMGR_SALT_4_OFFSET);
+    addr_hit[22] = (reg_addr == KEYMGR_SALT_5_OFFSET);
+    addr_hit[23] = (reg_addr == KEYMGR_SALT_6_OFFSET);
+    addr_hit[24] = (reg_addr == KEYMGR_SALT_7_OFFSET);
+    addr_hit[25] = (reg_addr == KEYMGR_KEY_VERSION_OFFSET);
+    addr_hit[26] = (reg_addr == KEYMGR_MAX_CREATOR_KEY_VER_REGWEN_OFFSET);
+    addr_hit[27] = (reg_addr == KEYMGR_MAX_CREATOR_KEY_VER_OFFSET);
+    addr_hit[28] = (reg_addr == KEYMGR_MAX_OWNER_INT_KEY_VER_REGWEN_OFFSET);
+    addr_hit[29] = (reg_addr == KEYMGR_MAX_OWNER_INT_KEY_VER_OFFSET);
+    addr_hit[30] = (reg_addr == KEYMGR_MAX_OWNER_KEY_VER_REGWEN_OFFSET);
+    addr_hit[31] = (reg_addr == KEYMGR_MAX_OWNER_KEY_VER_OFFSET);
+    addr_hit[32] = (reg_addr == KEYMGR_SW_SHARE0_OUTPUT_0_OFFSET);
+    addr_hit[33] = (reg_addr == KEYMGR_SW_SHARE0_OUTPUT_1_OFFSET);
+    addr_hit[34] = (reg_addr == KEYMGR_SW_SHARE0_OUTPUT_2_OFFSET);
+    addr_hit[35] = (reg_addr == KEYMGR_SW_SHARE0_OUTPUT_3_OFFSET);
+    addr_hit[36] = (reg_addr == KEYMGR_SW_SHARE0_OUTPUT_4_OFFSET);
+    addr_hit[37] = (reg_addr == KEYMGR_SW_SHARE0_OUTPUT_5_OFFSET);
+    addr_hit[38] = (reg_addr == KEYMGR_SW_SHARE0_OUTPUT_6_OFFSET);
+    addr_hit[39] = (reg_addr == KEYMGR_SW_SHARE0_OUTPUT_7_OFFSET);
+    addr_hit[40] = (reg_addr == KEYMGR_SW_SHARE1_OUTPUT_0_OFFSET);
+    addr_hit[41] = (reg_addr == KEYMGR_SW_SHARE1_OUTPUT_1_OFFSET);
+    addr_hit[42] = (reg_addr == KEYMGR_SW_SHARE1_OUTPUT_2_OFFSET);
+    addr_hit[43] = (reg_addr == KEYMGR_SW_SHARE1_OUTPUT_3_OFFSET);
+    addr_hit[44] = (reg_addr == KEYMGR_SW_SHARE1_OUTPUT_4_OFFSET);
+    addr_hit[45] = (reg_addr == KEYMGR_SW_SHARE1_OUTPUT_5_OFFSET);
+    addr_hit[46] = (reg_addr == KEYMGR_SW_SHARE1_OUTPUT_6_OFFSET);
+    addr_hit[47] = (reg_addr == KEYMGR_SW_SHARE1_OUTPUT_7_OFFSET);
+    addr_hit[48] = (reg_addr == KEYMGR_WORKING_STATE_OFFSET);
+    addr_hit[49] = (reg_addr == KEYMGR_OP_STATUS_OFFSET);
+    addr_hit[50] = (reg_addr == KEYMGR_ERR_CODE_OFFSET);
   end
 
   assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ;
@@ -1616,6 +1864,14 @@
     if (addr_hit[40] && reg_we && (KEYMGR_PERMIT[40] != (KEYMGR_PERMIT[40] & reg_be))) wr_err = 1'b1 ;
     if (addr_hit[41] && reg_we && (KEYMGR_PERMIT[41] != (KEYMGR_PERMIT[41] & reg_be))) wr_err = 1'b1 ;
     if (addr_hit[42] && reg_we && (KEYMGR_PERMIT[42] != (KEYMGR_PERMIT[42] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[43] && reg_we && (KEYMGR_PERMIT[43] != (KEYMGR_PERMIT[43] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[44] && reg_we && (KEYMGR_PERMIT[44] != (KEYMGR_PERMIT[44] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[45] && reg_we && (KEYMGR_PERMIT[45] != (KEYMGR_PERMIT[45] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[46] && reg_we && (KEYMGR_PERMIT[46] != (KEYMGR_PERMIT[46] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[47] && reg_we && (KEYMGR_PERMIT[47] != (KEYMGR_PERMIT[47] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[48] && reg_we && (KEYMGR_PERMIT[48] != (KEYMGR_PERMIT[48] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[49] && reg_we && (KEYMGR_PERMIT[49] != (KEYMGR_PERMIT[49] & reg_be))) wr_err = 1'b1 ;
+    if (addr_hit[50] && reg_we && (KEYMGR_PERMIT[50] != (KEYMGR_PERMIT[50] & reg_be))) wr_err = 1'b1 ;
   end
 
   assign intr_state_we = addr_hit[0] & reg_we & !reg_error;
@@ -1666,100 +1922,124 @@
   assign sw_binding_3_we = addr_hit[12] & reg_we & !reg_error;
   assign sw_binding_3_wd = reg_wdata[31:0];
 
-  assign salt_0_we = addr_hit[13] & reg_we & !reg_error;
+  assign sw_binding_4_we = addr_hit[13] & reg_we & !reg_error;
+  assign sw_binding_4_wd = reg_wdata[31:0];
+
+  assign sw_binding_5_we = addr_hit[14] & reg_we & !reg_error;
+  assign sw_binding_5_wd = reg_wdata[31:0];
+
+  assign sw_binding_6_we = addr_hit[15] & reg_we & !reg_error;
+  assign sw_binding_6_wd = reg_wdata[31:0];
+
+  assign sw_binding_7_we = addr_hit[16] & reg_we & !reg_error;
+  assign sw_binding_7_wd = reg_wdata[31:0];
+
+  assign salt_0_we = addr_hit[17] & reg_we & !reg_error;
   assign salt_0_wd = reg_wdata[31:0];
 
-  assign salt_1_we = addr_hit[14] & reg_we & !reg_error;
+  assign salt_1_we = addr_hit[18] & reg_we & !reg_error;
   assign salt_1_wd = reg_wdata[31:0];
 
-  assign salt_2_we = addr_hit[15] & reg_we & !reg_error;
+  assign salt_2_we = addr_hit[19] & reg_we & !reg_error;
   assign salt_2_wd = reg_wdata[31:0];
 
-  assign salt_3_we = addr_hit[16] & reg_we & !reg_error;
+  assign salt_3_we = addr_hit[20] & reg_we & !reg_error;
   assign salt_3_wd = reg_wdata[31:0];
 
-  assign key_version_we = addr_hit[17] & reg_we & !reg_error;
+  assign salt_4_we = addr_hit[21] & reg_we & !reg_error;
+  assign salt_4_wd = reg_wdata[31:0];
+
+  assign salt_5_we = addr_hit[22] & reg_we & !reg_error;
+  assign salt_5_wd = reg_wdata[31:0];
+
+  assign salt_6_we = addr_hit[23] & reg_we & !reg_error;
+  assign salt_6_wd = reg_wdata[31:0];
+
+  assign salt_7_we = addr_hit[24] & reg_we & !reg_error;
+  assign salt_7_wd = reg_wdata[31:0];
+
+  assign key_version_we = addr_hit[25] & reg_we & !reg_error;
   assign key_version_wd = reg_wdata[31:0];
 
-  assign max_creator_key_ver_regwen_we = addr_hit[18] & reg_we & !reg_error;
+  assign max_creator_key_ver_regwen_we = addr_hit[26] & reg_we & !reg_error;
   assign max_creator_key_ver_regwen_wd = reg_wdata[0];
 
-  assign max_creator_key_ver_we = addr_hit[19] & reg_we & !reg_error;
+  assign max_creator_key_ver_we = addr_hit[27] & reg_we & !reg_error;
   assign max_creator_key_ver_wd = reg_wdata[31:0];
 
-  assign max_owner_int_key_ver_regwen_we = addr_hit[20] & reg_we & !reg_error;
+  assign max_owner_int_key_ver_regwen_we = addr_hit[28] & reg_we & !reg_error;
   assign max_owner_int_key_ver_regwen_wd = reg_wdata[0];
 
-  assign max_owner_int_key_ver_we = addr_hit[21] & reg_we & !reg_error;
+  assign max_owner_int_key_ver_we = addr_hit[29] & reg_we & !reg_error;
   assign max_owner_int_key_ver_wd = reg_wdata[31:0];
 
-  assign max_owner_key_ver_regwen_we = addr_hit[22] & reg_we & !reg_error;
+  assign max_owner_key_ver_regwen_we = addr_hit[30] & reg_we & !reg_error;
   assign max_owner_key_ver_regwen_wd = reg_wdata[0];
 
-  assign max_owner_key_ver_we = addr_hit[23] & reg_we & !reg_error;
+  assign max_owner_key_ver_we = addr_hit[31] & reg_we & !reg_error;
   assign max_owner_key_ver_wd = reg_wdata[31:0];
 
-  assign sw_share0_output_0_we = addr_hit[24] & reg_re & !reg_error;
+  assign sw_share0_output_0_we = addr_hit[32] & reg_re & !reg_error;
   assign sw_share0_output_0_wd = '1;
 
-  assign sw_share0_output_1_we = addr_hit[25] & reg_re & !reg_error;
+  assign sw_share0_output_1_we = addr_hit[33] & reg_re & !reg_error;
   assign sw_share0_output_1_wd = '1;
 
-  assign sw_share0_output_2_we = addr_hit[26] & reg_re & !reg_error;
+  assign sw_share0_output_2_we = addr_hit[34] & reg_re & !reg_error;
   assign sw_share0_output_2_wd = '1;
 
-  assign sw_share0_output_3_we = addr_hit[27] & reg_re & !reg_error;
+  assign sw_share0_output_3_we = addr_hit[35] & reg_re & !reg_error;
   assign sw_share0_output_3_wd = '1;
 
-  assign sw_share0_output_4_we = addr_hit[28] & reg_re & !reg_error;
+  assign sw_share0_output_4_we = addr_hit[36] & reg_re & !reg_error;
   assign sw_share0_output_4_wd = '1;
 
-  assign sw_share0_output_5_we = addr_hit[29] & reg_re & !reg_error;
+  assign sw_share0_output_5_we = addr_hit[37] & reg_re & !reg_error;
   assign sw_share0_output_5_wd = '1;
 
-  assign sw_share0_output_6_we = addr_hit[30] & reg_re & !reg_error;
+  assign sw_share0_output_6_we = addr_hit[38] & reg_re & !reg_error;
   assign sw_share0_output_6_wd = '1;
 
-  assign sw_share0_output_7_we = addr_hit[31] & reg_re & !reg_error;
+  assign sw_share0_output_7_we = addr_hit[39] & reg_re & !reg_error;
   assign sw_share0_output_7_wd = '1;
 
-  assign sw_share1_output_0_we = addr_hit[32] & reg_re & !reg_error;
+  assign sw_share1_output_0_we = addr_hit[40] & reg_re & !reg_error;
   assign sw_share1_output_0_wd = '1;
 
-  assign sw_share1_output_1_we = addr_hit[33] & reg_re & !reg_error;
+  assign sw_share1_output_1_we = addr_hit[41] & reg_re & !reg_error;
   assign sw_share1_output_1_wd = '1;
 
-  assign sw_share1_output_2_we = addr_hit[34] & reg_re & !reg_error;
+  assign sw_share1_output_2_we = addr_hit[42] & reg_re & !reg_error;
   assign sw_share1_output_2_wd = '1;
 
-  assign sw_share1_output_3_we = addr_hit[35] & reg_re & !reg_error;
+  assign sw_share1_output_3_we = addr_hit[43] & reg_re & !reg_error;
   assign sw_share1_output_3_wd = '1;
 
-  assign sw_share1_output_4_we = addr_hit[36] & reg_re & !reg_error;
+  assign sw_share1_output_4_we = addr_hit[44] & reg_re & !reg_error;
   assign sw_share1_output_4_wd = '1;
 
-  assign sw_share1_output_5_we = addr_hit[37] & reg_re & !reg_error;
+  assign sw_share1_output_5_we = addr_hit[45] & reg_re & !reg_error;
   assign sw_share1_output_5_wd = '1;
 
-  assign sw_share1_output_6_we = addr_hit[38] & reg_re & !reg_error;
+  assign sw_share1_output_6_we = addr_hit[46] & reg_re & !reg_error;
   assign sw_share1_output_6_wd = '1;
 
-  assign sw_share1_output_7_we = addr_hit[39] & reg_re & !reg_error;
+  assign sw_share1_output_7_we = addr_hit[47] & reg_re & !reg_error;
   assign sw_share1_output_7_wd = '1;
 
-  assign op_status_we = addr_hit[41] & reg_we & !reg_error;
+  assign op_status_we = addr_hit[49] & reg_we & !reg_error;
   assign op_status_wd = reg_wdata[1:0];
 
-  assign err_code_invalid_op_we = addr_hit[42] & reg_we & !reg_error;
+  assign err_code_invalid_op_we = addr_hit[50] & reg_we & !reg_error;
   assign err_code_invalid_op_wd = reg_wdata[0];
 
-  assign err_code_invalid_cmd_we = addr_hit[42] & reg_we & !reg_error;
+  assign err_code_invalid_cmd_we = addr_hit[50] & reg_we & !reg_error;
   assign err_code_invalid_cmd_wd = reg_wdata[1];
 
-  assign err_code_invalid_kmac_input_we = addr_hit[42] & reg_we & !reg_error;
+  assign err_code_invalid_kmac_input_we = addr_hit[50] & reg_we & !reg_error;
   assign err_code_invalid_kmac_input_wd = reg_wdata[2];
 
-  assign err_code_invalid_kmac_data_we = addr_hit[42] & reg_we & !reg_error;
+  assign err_code_invalid_kmac_data_we = addr_hit[50] & reg_we & !reg_error;
   assign err_code_invalid_kmac_data_wd = reg_wdata[3];
 
   // Read data return
@@ -1822,122 +2102,154 @@
       end
 
       addr_hit[13]: begin
-        reg_rdata_next[31:0] = salt_0_qs;
+        reg_rdata_next[31:0] = sw_binding_4_qs;
       end
 
       addr_hit[14]: begin
-        reg_rdata_next[31:0] = salt_1_qs;
+        reg_rdata_next[31:0] = sw_binding_5_qs;
       end
 
       addr_hit[15]: begin
-        reg_rdata_next[31:0] = salt_2_qs;
+        reg_rdata_next[31:0] = sw_binding_6_qs;
       end
 
       addr_hit[16]: begin
-        reg_rdata_next[31:0] = salt_3_qs;
+        reg_rdata_next[31:0] = sw_binding_7_qs;
       end
 
       addr_hit[17]: begin
-        reg_rdata_next[31:0] = key_version_qs;
+        reg_rdata_next[31:0] = salt_0_qs;
       end
 
       addr_hit[18]: begin
-        reg_rdata_next[0] = max_creator_key_ver_regwen_qs;
+        reg_rdata_next[31:0] = salt_1_qs;
       end
 
       addr_hit[19]: begin
-        reg_rdata_next[31:0] = max_creator_key_ver_qs;
+        reg_rdata_next[31:0] = salt_2_qs;
       end
 
       addr_hit[20]: begin
-        reg_rdata_next[0] = max_owner_int_key_ver_regwen_qs;
+        reg_rdata_next[31:0] = salt_3_qs;
       end
 
       addr_hit[21]: begin
-        reg_rdata_next[31:0] = max_owner_int_key_ver_qs;
+        reg_rdata_next[31:0] = salt_4_qs;
       end
 
       addr_hit[22]: begin
-        reg_rdata_next[0] = max_owner_key_ver_regwen_qs;
+        reg_rdata_next[31:0] = salt_5_qs;
       end
 
       addr_hit[23]: begin
-        reg_rdata_next[31:0] = max_owner_key_ver_qs;
+        reg_rdata_next[31:0] = salt_6_qs;
       end
 
       addr_hit[24]: begin
-        reg_rdata_next[31:0] = sw_share0_output_0_qs;
+        reg_rdata_next[31:0] = salt_7_qs;
       end
 
       addr_hit[25]: begin
-        reg_rdata_next[31:0] = sw_share0_output_1_qs;
+        reg_rdata_next[31:0] = key_version_qs;
       end
 
       addr_hit[26]: begin
-        reg_rdata_next[31:0] = sw_share0_output_2_qs;
+        reg_rdata_next[0] = max_creator_key_ver_regwen_qs;
       end
 
       addr_hit[27]: begin
-        reg_rdata_next[31:0] = sw_share0_output_3_qs;
+        reg_rdata_next[31:0] = max_creator_key_ver_qs;
       end
 
       addr_hit[28]: begin
-        reg_rdata_next[31:0] = sw_share0_output_4_qs;
+        reg_rdata_next[0] = max_owner_int_key_ver_regwen_qs;
       end
 
       addr_hit[29]: begin
-        reg_rdata_next[31:0] = sw_share0_output_5_qs;
+        reg_rdata_next[31:0] = max_owner_int_key_ver_qs;
       end
 
       addr_hit[30]: begin
-        reg_rdata_next[31:0] = sw_share0_output_6_qs;
+        reg_rdata_next[0] = max_owner_key_ver_regwen_qs;
       end
 
       addr_hit[31]: begin
-        reg_rdata_next[31:0] = sw_share0_output_7_qs;
+        reg_rdata_next[31:0] = max_owner_key_ver_qs;
       end
 
       addr_hit[32]: begin
-        reg_rdata_next[31:0] = sw_share1_output_0_qs;
+        reg_rdata_next[31:0] = sw_share0_output_0_qs;
       end
 
       addr_hit[33]: begin
-        reg_rdata_next[31:0] = sw_share1_output_1_qs;
+        reg_rdata_next[31:0] = sw_share0_output_1_qs;
       end
 
       addr_hit[34]: begin
-        reg_rdata_next[31:0] = sw_share1_output_2_qs;
+        reg_rdata_next[31:0] = sw_share0_output_2_qs;
       end
 
       addr_hit[35]: begin
-        reg_rdata_next[31:0] = sw_share1_output_3_qs;
+        reg_rdata_next[31:0] = sw_share0_output_3_qs;
       end
 
       addr_hit[36]: begin
-        reg_rdata_next[31:0] = sw_share1_output_4_qs;
+        reg_rdata_next[31:0] = sw_share0_output_4_qs;
       end
 
       addr_hit[37]: begin
-        reg_rdata_next[31:0] = sw_share1_output_5_qs;
+        reg_rdata_next[31:0] = sw_share0_output_5_qs;
       end
 
       addr_hit[38]: begin
-        reg_rdata_next[31:0] = sw_share1_output_6_qs;
+        reg_rdata_next[31:0] = sw_share0_output_6_qs;
       end
 
       addr_hit[39]: begin
-        reg_rdata_next[31:0] = sw_share1_output_7_qs;
+        reg_rdata_next[31:0] = sw_share0_output_7_qs;
       end
 
       addr_hit[40]: begin
-        reg_rdata_next[2:0] = working_state_qs;
+        reg_rdata_next[31:0] = sw_share1_output_0_qs;
       end
 
       addr_hit[41]: begin
-        reg_rdata_next[1:0] = op_status_qs;
+        reg_rdata_next[31:0] = sw_share1_output_1_qs;
       end
 
       addr_hit[42]: begin
+        reg_rdata_next[31:0] = sw_share1_output_2_qs;
+      end
+
+      addr_hit[43]: begin
+        reg_rdata_next[31:0] = sw_share1_output_3_qs;
+      end
+
+      addr_hit[44]: begin
+        reg_rdata_next[31:0] = sw_share1_output_4_qs;
+      end
+
+      addr_hit[45]: begin
+        reg_rdata_next[31:0] = sw_share1_output_5_qs;
+      end
+
+      addr_hit[46]: begin
+        reg_rdata_next[31:0] = sw_share1_output_6_qs;
+      end
+
+      addr_hit[47]: begin
+        reg_rdata_next[31:0] = sw_share1_output_7_qs;
+      end
+
+      addr_hit[48]: begin
+        reg_rdata_next[2:0] = working_state_qs;
+      end
+
+      addr_hit[49]: begin
+        reg_rdata_next[1:0] = op_status_qs;
+      end
+
+      addr_hit[50]: begin
         reg_rdata_next[0] = err_code_invalid_op_qs;
         reg_rdata_next[1] = err_code_invalid_cmd_qs;
         reg_rdata_next[2] = err_code_invalid_kmac_input_qs;