[otp_ctrl/hjson] Align CSR window sizes with powers of 2
Signed-off-by: Michael Schaffner <msf@opentitan.org>
diff --git a/hw/ip/otp_ctrl/data/otp_ctrl.hjson b/hw/ip/otp_ctrl/data/otp_ctrl.hjson
index e2ad5a6..7acef8c 100644
--- a/hw/ip/otp_ctrl/data/otp_ctrl.hjson
+++ b/hw/ip/otp_ctrl/data/otp_ctrl.hjson
@@ -692,7 +692,7 @@
}
}
- { skipto: "0x600" }
+ { skipto: "0x700" }
{ window: {
name: "OWNER_SW_CFG"
@@ -709,7 +709,7 @@
//////////////////////
// Test Access Port //
//////////////////////
- { skipto: "0xA00" }
+ { skipto: "0xB00" }
// TODO: may have to update description, once it is known how RAW unlock is handled.
{ window: {
diff --git a/hw/ip/otp_ctrl/rtl/otp_ctrl_reg_pkg.sv b/hw/ip/otp_ctrl/rtl/otp_ctrl_reg_pkg.sv
index e33e7ab..b1048a3 100644
--- a/hw/ip/otp_ctrl/rtl/otp_ctrl_reg_pkg.sv
+++ b/hw/ip/otp_ctrl/rtl/otp_ctrl_reg_pkg.sv
@@ -7,16 +7,16 @@
package otp_ctrl_reg_pkg;
// Param list
- parameter int NumLcPartitionWords = 4;
- parameter int NumSecretPartitionWords = 32;
- parameter int NumHwCfgWords = 8;
- parameter int NumHwCfgReservedRegs = 6;
- parameter int NumSwCfgPartitionWords = 212;
- parameter int NumSwCfgWindowWords = 256;
+ parameter int OtpByteAddressWidth = 11;
+ parameter int NumCreatorSwCfgPartitionWords = 192;
+ parameter int NumOwnerSwCfgPartitionWords = 192;
+ parameter int NumHwCfgWords = 16;
+ parameter int NumLcPartitionWords = 56;
+ parameter int NumSecretPartitionWords = 56;
parameter int NumDebugWindowWords = 500;
parameter int DIRECT_ACCESS_WDATA = 2;
parameter int DIRECT_ACCESS_RDATA = 2;
- parameter int LC_STATE = 6;
+ parameter int LC_STATE = 9;
////////////////////////////
// Typedefs for registers //
@@ -24,30 +24,30 @@
typedef struct packed {
struct packed {
logic q;
- } otp_access_done;
+ } otp_operation_done;
struct packed {
logic q;
- } otp_ctrl_err;
+ } otp_error;
} otp_ctrl_reg2hw_intr_state_reg_t;
typedef struct packed {
struct packed {
logic q;
- } otp_access_done;
+ } otp_operation_done;
struct packed {
logic q;
- } otp_ctrl_err;
+ } otp_error;
} otp_ctrl_reg2hw_intr_enable_reg_t;
typedef struct packed {
struct packed {
logic q;
logic qe;
- } otp_access_done;
+ } otp_operation_done;
struct packed {
logic q;
logic qe;
- } otp_ctrl_err;
+ } otp_error;
} otp_ctrl_reg2hw_intr_test_reg_t;
typedef struct packed {
@@ -62,49 +62,61 @@
} otp_ctrl_reg2hw_direct_access_cmd_reg_t;
typedef struct packed {
- logic [9:0] q;
+ logic [10:0] q;
} otp_ctrl_reg2hw_direct_access_address_reg_t;
typedef struct packed {
- logic [1:0] q;
- } otp_ctrl_reg2hw_direct_access_size_reg_t;
-
- typedef struct packed {
logic [31:0] q;
logic qe;
} otp_ctrl_reg2hw_direct_access_wdata_mreg_t;
typedef struct packed {
logic q;
- } otp_ctrl_reg2hw_secret_integrity_digest_calc_reg_t;
+ } otp_ctrl_reg2hw_check_period_regen_reg_t;
+
+ typedef struct packed {
+ logic [5:0] q;
+ } otp_ctrl_reg2hw_integrity_check_period_msb_reg_t;
+
+ typedef struct packed {
+ logic [5:0] q;
+ } otp_ctrl_reg2hw_consistency_check_period_msb_reg_t;
typedef struct packed {
logic q;
- } otp_ctrl_reg2hw_hw_cfg_integrity_digest_calc_reg_t;
+ } otp_ctrl_reg2hw_creator_sw_cfg_read_lock_reg_t;
typedef struct packed {
logic q;
- } otp_ctrl_reg2hw_sw_cfg_integrity_digest_calc_reg_t;
+ } otp_ctrl_reg2hw_owner_sw_cfg_read_lock_reg_t;
+
+ typedef struct packed {
+ logic q;
+ } otp_ctrl_reg2hw_hw_cfg_digest_calc_reg_t;
+
+ typedef struct packed {
+ logic q;
+ } otp_ctrl_reg2hw_secret_digest_calc_reg_t;
typedef struct packed {
struct packed {
logic d;
logic de;
- } otp_access_done;
+ } otp_operation_done;
struct packed {
logic d;
logic de;
- } otp_ctrl_err;
+ } otp_error;
} otp_ctrl_hw2reg_intr_state_reg_t;
typedef struct packed {
- logic [31:0] d;
+ logic [2:0] d;
logic de;
} otp_ctrl_hw2reg_status_reg_t;
typedef struct packed {
- logic [31:0] d;
+ logic [2:0] d;
logic de;
} otp_ctrl_hw2reg_err_code_reg_t;
@@ -115,15 +127,39 @@
typedef struct packed {
logic [31:0] d;
- } otp_ctrl_hw2reg_secret_integrity_digest_reg_t;
+ } otp_ctrl_hw2reg_creator_sw_cfg_digest_reg_t;
typedef struct packed {
logic [31:0] d;
- } otp_ctrl_hw2reg_hw_cfg_integrity_digest_reg_t;
+ } otp_ctrl_hw2reg_owner_sw_cfg_digest_reg_t;
typedef struct packed {
logic [31:0] d;
- } otp_ctrl_hw2reg_sw_cfg_integrity_digest_reg_t;
+ } otp_ctrl_hw2reg_hw_cfg_digest_reg_t;
+
+ typedef struct packed {
+ logic [31:0] d;
+ } otp_ctrl_hw2reg_secret_digest_reg_t;
+
+ typedef struct packed {
+ logic [31:0] d;
+ } otp_ctrl_hw2reg_test_tokens_lock_reg_t;
+
+ typedef struct packed {
+ logic [31:0] d;
+ } otp_ctrl_hw2reg_rma_token_lock_reg_t;
+
+ typedef struct packed {
+ logic [31:0] d;
+ } otp_ctrl_hw2reg_flash_keys_lock_reg_t;
+
+ typedef struct packed {
+ logic [31:0] d;
+ } otp_ctrl_hw2reg_sram_key_lock_reg_t;
+
+ typedef struct packed {
+ logic [31:0] d;
+ } otp_ctrl_hw2reg_creator_key_lock_reg_t;
typedef struct packed {
logic [7:0] d;
@@ -131,121 +167,91 @@
} otp_ctrl_hw2reg_lc_state_mreg_t;
typedef struct packed {
- logic [7:0] d;
- logic de;
- } otp_ctrl_hw2reg_id_state_reg_t;
-
- typedef struct packed {
- struct packed {
- logic [7:0] d;
- logic de;
- } test_state_cnt;
- struct packed {
- logic [7:0] d;
- logic de;
- } test_unlock_cnt;
- struct packed {
- logic [7:0] d;
- logic de;
- } test_exit_cnt;
- struct packed {
- logic [7:0] d;
- logic de;
- } xxx_unlock_cnt;
- } otp_ctrl_hw2reg_test_xxx_cnt_reg_t;
-
- typedef struct packed {
- logic [15:0] d;
- logic de;
- } otp_ctrl_hw2reg_transition_cnt_reg_t;
-
- typedef struct packed {
- struct packed {
- logic [2:0] d;
- } test_tokens_lock;
- struct packed {
- logic [4:0] d;
- } xxx_token_lock;
- } otp_ctrl_hw2reg_hw_cfg_lock_reg_t;
-
- typedef struct packed {
logic [31:0] d;
logic de;
- } otp_ctrl_hw2reg_hw_cfg_mreg_t;
+ } otp_ctrl_hw2reg_transition_cnt_reg_t;
///////////////////////////////////////
// Register to internal design logic //
///////////////////////////////////////
typedef struct packed {
- otp_ctrl_reg2hw_intr_state_reg_t intr_state; // [92:91]
- otp_ctrl_reg2hw_intr_enable_reg_t intr_enable; // [90:89]
- otp_ctrl_reg2hw_intr_test_reg_t intr_test; // [88:85]
- otp_ctrl_reg2hw_direct_access_cmd_reg_t direct_access_cmd; // [84:81]
- otp_ctrl_reg2hw_direct_access_address_reg_t direct_access_address; // [80:71]
- otp_ctrl_reg2hw_direct_access_size_reg_t direct_access_size; // [70:69]
- otp_ctrl_reg2hw_direct_access_wdata_mreg_t [1:0] direct_access_wdata; // [68:3]
- otp_ctrl_reg2hw_secret_integrity_digest_calc_reg_t secret_integrity_digest_calc; // [2:2]
- otp_ctrl_reg2hw_hw_cfg_integrity_digest_calc_reg_t hw_cfg_integrity_digest_calc; // [1:1]
- otp_ctrl_reg2hw_sw_cfg_integrity_digest_calc_reg_t sw_cfg_integrity_digest_calc; // [0:0]
+ otp_ctrl_reg2hw_intr_state_reg_t intr_state; // [105:104]
+ otp_ctrl_reg2hw_intr_enable_reg_t intr_enable; // [103:102]
+ otp_ctrl_reg2hw_intr_test_reg_t intr_test; // [101:98]
+ otp_ctrl_reg2hw_direct_access_cmd_reg_t direct_access_cmd; // [97:94]
+ otp_ctrl_reg2hw_direct_access_address_reg_t direct_access_address; // [93:83]
+ otp_ctrl_reg2hw_direct_access_wdata_mreg_t [1:0] direct_access_wdata; // [82:17]
+ otp_ctrl_reg2hw_check_period_regen_reg_t check_period_regen; // [16:16]
+ otp_ctrl_reg2hw_integrity_check_period_msb_reg_t integrity_check_period_msb; // [15:10]
+ otp_ctrl_reg2hw_consistency_check_period_msb_reg_t consistency_check_period_msb; // [9:4]
+ otp_ctrl_reg2hw_creator_sw_cfg_read_lock_reg_t creator_sw_cfg_read_lock; // [3:3]
+ otp_ctrl_reg2hw_owner_sw_cfg_read_lock_reg_t owner_sw_cfg_read_lock; // [2:2]
+ otp_ctrl_reg2hw_hw_cfg_digest_calc_reg_t hw_cfg_digest_calc; // [1:1]
+ otp_ctrl_reg2hw_secret_digest_calc_reg_t secret_digest_calc; // [0:0]
} otp_ctrl_reg2hw_t;
///////////////////////////////////////
// Internal design logic to register //
///////////////////////////////////////
typedef struct packed {
- otp_ctrl_hw2reg_intr_state_reg_t intr_state; // [553:552]
- otp_ctrl_hw2reg_status_reg_t status; // [551:552]
- otp_ctrl_hw2reg_err_code_reg_t err_code; // [551:552]
- otp_ctrl_hw2reg_direct_access_rdata_mreg_t [1:0] direct_access_rdata; // [551:486]
- otp_ctrl_hw2reg_secret_integrity_digest_reg_t secret_integrity_digest; // [485:486]
- otp_ctrl_hw2reg_hw_cfg_integrity_digest_reg_t hw_cfg_integrity_digest; // [485:486]
- otp_ctrl_hw2reg_sw_cfg_integrity_digest_reg_t sw_cfg_integrity_digest; // [485:486]
- otp_ctrl_hw2reg_lc_state_mreg_t [5:0] lc_state; // [485:432]
- otp_ctrl_hw2reg_id_state_reg_t id_state; // [431:432]
- otp_ctrl_hw2reg_test_xxx_cnt_reg_t test_xxx_cnt; // [431:432]
- otp_ctrl_hw2reg_transition_cnt_reg_t transition_cnt; // [431:432]
- otp_ctrl_hw2reg_hw_cfg_lock_reg_t hw_cfg_lock; // [431:432]
- otp_ctrl_hw2reg_hw_cfg_mreg_t [5:0] hw_cfg; // [431:234]
+ otp_ctrl_hw2reg_intr_state_reg_t intr_state; // [479:478]
+ otp_ctrl_hw2reg_status_reg_t status; // [477:478]
+ otp_ctrl_hw2reg_err_code_reg_t err_code; // [477:478]
+ otp_ctrl_hw2reg_direct_access_rdata_mreg_t [1:0] direct_access_rdata; // [477:412]
+ otp_ctrl_hw2reg_creator_sw_cfg_digest_reg_t creator_sw_cfg_digest; // [411:412]
+ otp_ctrl_hw2reg_owner_sw_cfg_digest_reg_t owner_sw_cfg_digest; // [411:412]
+ otp_ctrl_hw2reg_hw_cfg_digest_reg_t hw_cfg_digest; // [411:412]
+ otp_ctrl_hw2reg_secret_digest_reg_t secret_digest; // [411:412]
+ otp_ctrl_hw2reg_test_tokens_lock_reg_t test_tokens_lock; // [411:412]
+ otp_ctrl_hw2reg_rma_token_lock_reg_t rma_token_lock; // [411:412]
+ otp_ctrl_hw2reg_flash_keys_lock_reg_t flash_keys_lock; // [411:412]
+ otp_ctrl_hw2reg_sram_key_lock_reg_t sram_key_lock; // [411:412]
+ otp_ctrl_hw2reg_creator_key_lock_reg_t creator_key_lock; // [411:412]
+ otp_ctrl_hw2reg_lc_state_mreg_t [8:0] lc_state; // [411:331]
+ otp_ctrl_hw2reg_transition_cnt_reg_t transition_cnt; // [330:331]
} otp_ctrl_hw2reg_t;
// Register Address
- parameter logic [11:0] OTP_CTRL_INTR_STATE_OFFSET = 12'h 0;
- parameter logic [11:0] OTP_CTRL_INTR_ENABLE_OFFSET = 12'h 4;
- parameter logic [11:0] OTP_CTRL_INTR_TEST_OFFSET = 12'h 8;
- parameter logic [11:0] OTP_CTRL_STATUS_OFFSET = 12'h c;
- parameter logic [11:0] OTP_CTRL_ERR_CODE_OFFSET = 12'h 10;
- parameter logic [11:0] OTP_CTRL_DIRECT_ACCESS_CMD_OFFSET = 12'h 14;
- parameter logic [11:0] OTP_CTRL_DIRECT_ACCESS_ADDRESS_OFFSET = 12'h 18;
- parameter logic [11:0] OTP_CTRL_DIRECT_ACCESS_SIZE_OFFSET = 12'h 1c;
- parameter logic [11:0] OTP_CTRL_DIRECT_ACCESS_WDATA_0_OFFSET = 12'h 20;
- parameter logic [11:0] OTP_CTRL_DIRECT_ACCESS_WDATA_1_OFFSET = 12'h 24;
- parameter logic [11:0] OTP_CTRL_DIRECT_ACCESS_RDATA_0_OFFSET = 12'h 28;
- parameter logic [11:0] OTP_CTRL_DIRECT_ACCESS_RDATA_1_OFFSET = 12'h 2c;
- parameter logic [11:0] OTP_CTRL_SECRET_INTEGRITY_DIGEST_CALC_OFFSET = 12'h 50;
- parameter logic [11:0] OTP_CTRL_HW_CFG_INTEGRITY_DIGEST_CALC_OFFSET = 12'h 54;
- parameter logic [11:0] OTP_CTRL_SW_CFG_INTEGRITY_DIGEST_CALC_OFFSET = 12'h 58;
- parameter logic [11:0] OTP_CTRL_SECRET_INTEGRITY_DIGEST_OFFSET = 12'h 5c;
- parameter logic [11:0] OTP_CTRL_HW_CFG_INTEGRITY_DIGEST_OFFSET = 12'h 60;
- parameter logic [11:0] OTP_CTRL_SW_CFG_INTEGRITY_DIGEST_OFFSET = 12'h 64;
- parameter logic [11:0] OTP_CTRL_LC_STATE_0_OFFSET = 12'h 100;
- parameter logic [11:0] OTP_CTRL_LC_STATE_1_OFFSET = 12'h 104;
- parameter logic [11:0] OTP_CTRL_ID_STATE_OFFSET = 12'h 108;
- parameter logic [11:0] OTP_CTRL_TEST_XXX_CNT_OFFSET = 12'h 10c;
- parameter logic [11:0] OTP_CTRL_TRANSITION_CNT_OFFSET = 12'h 110;
- parameter logic [11:0] OTP_CTRL_HW_CFG_LOCK_OFFSET = 12'h 200;
- parameter logic [11:0] OTP_CTRL_HW_CFG_0_OFFSET = 12'h 204;
- parameter logic [11:0] OTP_CTRL_HW_CFG_1_OFFSET = 12'h 208;
- parameter logic [11:0] OTP_CTRL_HW_CFG_2_OFFSET = 12'h 20c;
- parameter logic [11:0] OTP_CTRL_HW_CFG_3_OFFSET = 12'h 210;
- parameter logic [11:0] OTP_CTRL_HW_CFG_4_OFFSET = 12'h 214;
- parameter logic [11:0] OTP_CTRL_HW_CFG_5_OFFSET = 12'h 218;
+ parameter logic [12:0] OTP_CTRL_INTR_STATE_OFFSET = 13'h 0;
+ parameter logic [12:0] OTP_CTRL_INTR_ENABLE_OFFSET = 13'h 4;
+ parameter logic [12:0] OTP_CTRL_INTR_TEST_OFFSET = 13'h 8;
+ parameter logic [12:0] OTP_CTRL_STATUS_OFFSET = 13'h c;
+ parameter logic [12:0] OTP_CTRL_ERR_CODE_OFFSET = 13'h 10;
+ parameter logic [12:0] OTP_CTRL_DIRECT_ACCESS_CMD_OFFSET = 13'h 14;
+ parameter logic [12:0] OTP_CTRL_DIRECT_ACCESS_ADDRESS_OFFSET = 13'h 18;
+ parameter logic [12:0] OTP_CTRL_DIRECT_ACCESS_WDATA_0_OFFSET = 13'h 1c;
+ parameter logic [12:0] OTP_CTRL_DIRECT_ACCESS_WDATA_1_OFFSET = 13'h 20;
+ parameter logic [12:0] OTP_CTRL_DIRECT_ACCESS_RDATA_0_OFFSET = 13'h 24;
+ parameter logic [12:0] OTP_CTRL_DIRECT_ACCESS_RDATA_1_OFFSET = 13'h 28;
+ parameter logic [12:0] OTP_CTRL_CHECK_PERIOD_REGEN_OFFSET = 13'h 2c;
+ parameter logic [12:0] OTP_CTRL_INTEGRITY_CHECK_PERIOD_MSB_OFFSET = 13'h 30;
+ parameter logic [12:0] OTP_CTRL_CONSISTENCY_CHECK_PERIOD_MSB_OFFSET = 13'h 34;
+ parameter logic [12:0] OTP_CTRL_CREATOR_SW_CFG_READ_LOCK_OFFSET = 13'h 38;
+ parameter logic [12:0] OTP_CTRL_OWNER_SW_CFG_READ_LOCK_OFFSET = 13'h 3c;
+ parameter logic [12:0] OTP_CTRL_HW_CFG_DIGEST_CALC_OFFSET = 13'h 40;
+ parameter logic [12:0] OTP_CTRL_SECRET_DIGEST_CALC_OFFSET = 13'h 44;
+ parameter logic [12:0] OTP_CTRL_CREATOR_SW_CFG_DIGEST_OFFSET = 13'h 48;
+ parameter logic [12:0] OTP_CTRL_OWNER_SW_CFG_DIGEST_OFFSET = 13'h 4c;
+ parameter logic [12:0] OTP_CTRL_HW_CFG_DIGEST_OFFSET = 13'h 50;
+ parameter logic [12:0] OTP_CTRL_SECRET_DIGEST_OFFSET = 13'h 54;
+ parameter logic [12:0] OTP_CTRL_TEST_TOKENS_LOCK_OFFSET = 13'h 100;
+ parameter logic [12:0] OTP_CTRL_RMA_TOKEN_LOCK_OFFSET = 13'h 104;
+ parameter logic [12:0] OTP_CTRL_FLASH_KEYS_LOCK_OFFSET = 13'h 108;
+ parameter logic [12:0] OTP_CTRL_SRAM_KEY_LOCK_OFFSET = 13'h 10c;
+ parameter logic [12:0] OTP_CTRL_CREATOR_KEY_LOCK_OFFSET = 13'h 110;
+ parameter logic [12:0] OTP_CTRL_LC_STATE_0_OFFSET = 13'h 200;
+ parameter logic [12:0] OTP_CTRL_LC_STATE_1_OFFSET = 13'h 204;
+ parameter logic [12:0] OTP_CTRL_LC_STATE_2_OFFSET = 13'h 208;
+ parameter logic [12:0] OTP_CTRL_TRANSITION_CNT_OFFSET = 13'h 20c;
// Window parameter
- parameter logic [11:0] OTP_CTRL_SW_CFG_OFFSET = 12'h 400;
- parameter logic [11:0] OTP_CTRL_SW_CFG_SIZE = 12'h 400;
- parameter logic [11:0] OTP_CTRL_TEST_ACCESS_OFFSET = 12'h 800;
- parameter logic [11:0] OTP_CTRL_TEST_ACCESS_SIZE = 12'h 7d0;
+ parameter logic [12:0] OTP_CTRL_CREATOR_SW_CFG_OFFSET = 13'h 400;
+ parameter logic [12:0] OTP_CTRL_CREATOR_SW_CFG_SIZE = 13'h 300;
+ parameter logic [12:0] OTP_CTRL_OWNER_SW_CFG_OFFSET = 13'h 800;
+ parameter logic [12:0] OTP_CTRL_OWNER_SW_CFG_SIZE = 13'h 300;
+ parameter logic [12:0] OTP_CTRL_TEST_ACCESS_OFFSET = 13'h 1000;
+ parameter logic [12:0] OTP_CTRL_TEST_ACCESS_SIZE = 13'h 7d0;
// Register Index
typedef enum int {
@@ -256,63 +262,65 @@
OTP_CTRL_ERR_CODE,
OTP_CTRL_DIRECT_ACCESS_CMD,
OTP_CTRL_DIRECT_ACCESS_ADDRESS,
- OTP_CTRL_DIRECT_ACCESS_SIZE,
OTP_CTRL_DIRECT_ACCESS_WDATA_0,
OTP_CTRL_DIRECT_ACCESS_WDATA_1,
OTP_CTRL_DIRECT_ACCESS_RDATA_0,
OTP_CTRL_DIRECT_ACCESS_RDATA_1,
- OTP_CTRL_SECRET_INTEGRITY_DIGEST_CALC,
- OTP_CTRL_HW_CFG_INTEGRITY_DIGEST_CALC,
- OTP_CTRL_SW_CFG_INTEGRITY_DIGEST_CALC,
- OTP_CTRL_SECRET_INTEGRITY_DIGEST,
- OTP_CTRL_HW_CFG_INTEGRITY_DIGEST,
- OTP_CTRL_SW_CFG_INTEGRITY_DIGEST,
+ OTP_CTRL_CHECK_PERIOD_REGEN,
+ OTP_CTRL_INTEGRITY_CHECK_PERIOD_MSB,
+ OTP_CTRL_CONSISTENCY_CHECK_PERIOD_MSB,
+ OTP_CTRL_CREATOR_SW_CFG_READ_LOCK,
+ OTP_CTRL_OWNER_SW_CFG_READ_LOCK,
+ OTP_CTRL_HW_CFG_DIGEST_CALC,
+ OTP_CTRL_SECRET_DIGEST_CALC,
+ OTP_CTRL_CREATOR_SW_CFG_DIGEST,
+ OTP_CTRL_OWNER_SW_CFG_DIGEST,
+ OTP_CTRL_HW_CFG_DIGEST,
+ OTP_CTRL_SECRET_DIGEST,
+ OTP_CTRL_TEST_TOKENS_LOCK,
+ OTP_CTRL_RMA_TOKEN_LOCK,
+ OTP_CTRL_FLASH_KEYS_LOCK,
+ OTP_CTRL_SRAM_KEY_LOCK,
+ OTP_CTRL_CREATOR_KEY_LOCK,
OTP_CTRL_LC_STATE_0,
OTP_CTRL_LC_STATE_1,
- OTP_CTRL_ID_STATE,
- OTP_CTRL_TEST_XXX_CNT,
- OTP_CTRL_TRANSITION_CNT,
- OTP_CTRL_HW_CFG_LOCK,
- OTP_CTRL_HW_CFG_0,
- OTP_CTRL_HW_CFG_1,
- OTP_CTRL_HW_CFG_2,
- OTP_CTRL_HW_CFG_3,
- OTP_CTRL_HW_CFG_4,
- OTP_CTRL_HW_CFG_5
+ OTP_CTRL_LC_STATE_2,
+ OTP_CTRL_TRANSITION_CNT
} otp_ctrl_id_e;
// Register width information to check illegal writes
- parameter logic [3:0] OTP_CTRL_PERMIT [30] = '{
+ parameter logic [3:0] OTP_CTRL_PERMIT [31] = '{
4'b 0001, // index[ 0] OTP_CTRL_INTR_STATE
4'b 0001, // index[ 1] OTP_CTRL_INTR_ENABLE
4'b 0001, // index[ 2] OTP_CTRL_INTR_TEST
- 4'b 1111, // index[ 3] OTP_CTRL_STATUS
- 4'b 1111, // index[ 4] OTP_CTRL_ERR_CODE
+ 4'b 0001, // index[ 3] OTP_CTRL_STATUS
+ 4'b 0001, // index[ 4] OTP_CTRL_ERR_CODE
4'b 0001, // index[ 5] OTP_CTRL_DIRECT_ACCESS_CMD
4'b 0011, // index[ 6] OTP_CTRL_DIRECT_ACCESS_ADDRESS
- 4'b 0001, // index[ 7] OTP_CTRL_DIRECT_ACCESS_SIZE
- 4'b 1111, // index[ 8] OTP_CTRL_DIRECT_ACCESS_WDATA_0
- 4'b 1111, // index[ 9] OTP_CTRL_DIRECT_ACCESS_WDATA_1
- 4'b 1111, // index[10] OTP_CTRL_DIRECT_ACCESS_RDATA_0
- 4'b 1111, // index[11] OTP_CTRL_DIRECT_ACCESS_RDATA_1
- 4'b 0001, // index[12] OTP_CTRL_SECRET_INTEGRITY_DIGEST_CALC
- 4'b 0001, // index[13] OTP_CTRL_HW_CFG_INTEGRITY_DIGEST_CALC
- 4'b 0001, // index[14] OTP_CTRL_SW_CFG_INTEGRITY_DIGEST_CALC
- 4'b 1111, // index[15] OTP_CTRL_SECRET_INTEGRITY_DIGEST
- 4'b 1111, // index[16] OTP_CTRL_HW_CFG_INTEGRITY_DIGEST
- 4'b 1111, // index[17] OTP_CTRL_SW_CFG_INTEGRITY_DIGEST
- 4'b 1111, // index[18] OTP_CTRL_LC_STATE_0
- 4'b 0011, // index[19] OTP_CTRL_LC_STATE_1
- 4'b 0001, // index[20] OTP_CTRL_ID_STATE
- 4'b 1111, // index[21] OTP_CTRL_TEST_XXX_CNT
- 4'b 0011, // index[22] OTP_CTRL_TRANSITION_CNT
- 4'b 0001, // index[23] OTP_CTRL_HW_CFG_LOCK
- 4'b 1111, // index[24] OTP_CTRL_HW_CFG_0
- 4'b 1111, // index[25] OTP_CTRL_HW_CFG_1
- 4'b 1111, // index[26] OTP_CTRL_HW_CFG_2
- 4'b 1111, // index[27] OTP_CTRL_HW_CFG_3
- 4'b 1111, // index[28] OTP_CTRL_HW_CFG_4
- 4'b 1111 // index[29] OTP_CTRL_HW_CFG_5
+ 4'b 1111, // index[ 7] OTP_CTRL_DIRECT_ACCESS_WDATA_0
+ 4'b 1111, // index[ 8] OTP_CTRL_DIRECT_ACCESS_WDATA_1
+ 4'b 1111, // index[ 9] OTP_CTRL_DIRECT_ACCESS_RDATA_0
+ 4'b 1111, // index[10] OTP_CTRL_DIRECT_ACCESS_RDATA_1
+ 4'b 0001, // index[11] OTP_CTRL_CHECK_PERIOD_REGEN
+ 4'b 0001, // index[12] OTP_CTRL_INTEGRITY_CHECK_PERIOD_MSB
+ 4'b 0001, // index[13] OTP_CTRL_CONSISTENCY_CHECK_PERIOD_MSB
+ 4'b 0001, // index[14] OTP_CTRL_CREATOR_SW_CFG_READ_LOCK
+ 4'b 0001, // index[15] OTP_CTRL_OWNER_SW_CFG_READ_LOCK
+ 4'b 0001, // index[16] OTP_CTRL_HW_CFG_DIGEST_CALC
+ 4'b 0001, // index[17] OTP_CTRL_SECRET_DIGEST_CALC
+ 4'b 1111, // index[18] OTP_CTRL_CREATOR_SW_CFG_DIGEST
+ 4'b 1111, // index[19] OTP_CTRL_OWNER_SW_CFG_DIGEST
+ 4'b 1111, // index[20] OTP_CTRL_HW_CFG_DIGEST
+ 4'b 1111, // index[21] OTP_CTRL_SECRET_DIGEST
+ 4'b 1111, // index[22] OTP_CTRL_TEST_TOKENS_LOCK
+ 4'b 1111, // index[23] OTP_CTRL_RMA_TOKEN_LOCK
+ 4'b 1111, // index[24] OTP_CTRL_FLASH_KEYS_LOCK
+ 4'b 1111, // index[25] OTP_CTRL_SRAM_KEY_LOCK
+ 4'b 1111, // index[26] OTP_CTRL_CREATOR_KEY_LOCK
+ 4'b 1111, // index[27] OTP_CTRL_LC_STATE_0
+ 4'b 1111, // index[28] OTP_CTRL_LC_STATE_1
+ 4'b 0001, // index[29] OTP_CTRL_LC_STATE_2
+ 4'b 1111 // index[30] OTP_CTRL_TRANSITION_CNT
};
endpackage
diff --git a/hw/ip/otp_ctrl/rtl/otp_ctrl_reg_top.sv b/hw/ip/otp_ctrl/rtl/otp_ctrl_reg_top.sv
index 701ff8d..32e2af7 100644
--- a/hw/ip/otp_ctrl/rtl/otp_ctrl_reg_top.sv
+++ b/hw/ip/otp_ctrl/rtl/otp_ctrl_reg_top.sv
@@ -15,8 +15,8 @@
output tlul_pkg::tl_d2h_t tl_o,
// Output port for window
- output tlul_pkg::tl_h2d_t tl_win_o [2],
- input tlul_pkg::tl_d2h_t tl_win_i [2],
+ output tlul_pkg::tl_h2d_t tl_win_o [3],
+ input tlul_pkg::tl_d2h_t tl_win_i [3],
// To HW
output otp_ctrl_reg_pkg::otp_ctrl_reg2hw_t reg2hw, // Write
@@ -28,7 +28,7 @@
import otp_ctrl_reg_pkg::* ;
- localparam int AW = 12;
+ localparam int AW = 13;
localparam int DW = 32;
localparam int DBW = DW/8; // Byte Width
@@ -48,31 +48,33 @@
tlul_pkg::tl_h2d_t tl_reg_h2d;
tlul_pkg::tl_d2h_t tl_reg_d2h;
- tlul_pkg::tl_h2d_t tl_socket_h2d [3];
- tlul_pkg::tl_d2h_t tl_socket_d2h [3];
+ tlul_pkg::tl_h2d_t tl_socket_h2d [4];
+ tlul_pkg::tl_d2h_t tl_socket_d2h [4];
- logic [1:0] reg_steer;
+ logic [2:0] reg_steer;
// socket_1n connection
- assign tl_reg_h2d = tl_socket_h2d[2];
- assign tl_socket_d2h[2] = tl_reg_d2h;
+ assign tl_reg_h2d = tl_socket_h2d[3];
+ assign tl_socket_d2h[3] = tl_reg_d2h;
assign tl_win_o[0] = tl_socket_h2d[0];
assign tl_socket_d2h[0] = tl_win_i[0];
assign tl_win_o[1] = tl_socket_h2d[1];
assign tl_socket_d2h[1] = tl_win_i[1];
+ assign tl_win_o[2] = tl_socket_h2d[2];
+ assign tl_socket_d2h[2] = tl_win_i[2];
// Create Socket_1n
tlul_socket_1n #(
- .N (3),
+ .N (4),
.HReqPass (1'b1),
.HRspPass (1'b1),
- .DReqPass ({3{1'b1}}),
- .DRspPass ({3{1'b1}}),
+ .DReqPass ({4{1'b1}}),
+ .DRspPass ({4{1'b1}}),
.HReqDepth (4'h0),
.HRspDepth (4'h0),
- .DReqDepth ({3{4'h0}}),
- .DRspDepth ({3{4'h0}})
+ .DReqDepth ({4{4'h0}}),
+ .DRspDepth ({4{4'h0}})
) u_socket (
.clk_i,
.rst_ni,
@@ -85,15 +87,18 @@
// Create steering logic
always_comb begin
- reg_steer = 2; // Default set to register
+ reg_steer = 3; // Default set to register
// TODO: Can below codes be unique case () inside ?
- if (tl_i.a_address[AW-1:0] >= 1024 && tl_i.a_address[AW-1:0] < 2048) begin
+ if (tl_i.a_address[AW-1:0] >= 1024 && tl_i.a_address[AW-1:0] < 1792) begin
reg_steer = 0;
end
- if (tl_i.a_address[AW-1:0] >= 2048 && tl_i.a_address[AW-1:0] < 4048) begin
+ if (tl_i.a_address[AW-1:0] >= 2048 && tl_i.a_address[AW-1:0] < 2816) begin
reg_steer = 1;
end
+ if (tl_i.a_address[AW-1:0] >= 4096 && tl_i.a_address[AW-1:0] < 6096) begin
+ reg_steer = 2;
+ end
end
tlul_adapter_reg #(
@@ -121,34 +126,31 @@
// Define SW related signals
// Format: <reg>_<field>_{wd|we|qs}
// or <reg>_{wd|we|qs} if field == 1 or 0
- logic intr_state_otp_access_done_qs;
- logic intr_state_otp_access_done_wd;
- logic intr_state_otp_access_done_we;
- logic intr_state_otp_ctrl_err_qs;
- logic intr_state_otp_ctrl_err_wd;
- logic intr_state_otp_ctrl_err_we;
- logic intr_enable_otp_access_done_qs;
- logic intr_enable_otp_access_done_wd;
- logic intr_enable_otp_access_done_we;
- logic intr_enable_otp_ctrl_err_qs;
- logic intr_enable_otp_ctrl_err_wd;
- logic intr_enable_otp_ctrl_err_we;
- logic intr_test_otp_access_done_wd;
- logic intr_test_otp_access_done_we;
- logic intr_test_otp_ctrl_err_wd;
- logic intr_test_otp_ctrl_err_we;
- logic [31:0] status_qs;
- logic [31:0] err_code_qs;
+ logic intr_state_otp_operation_done_qs;
+ logic intr_state_otp_operation_done_wd;
+ logic intr_state_otp_operation_done_we;
+ logic intr_state_otp_error_qs;
+ logic intr_state_otp_error_wd;
+ logic intr_state_otp_error_we;
+ logic intr_enable_otp_operation_done_qs;
+ logic intr_enable_otp_operation_done_wd;
+ logic intr_enable_otp_operation_done_we;
+ logic intr_enable_otp_error_qs;
+ logic intr_enable_otp_error_wd;
+ logic intr_enable_otp_error_we;
+ logic intr_test_otp_operation_done_wd;
+ logic intr_test_otp_operation_done_we;
+ logic intr_test_otp_error_wd;
+ logic intr_test_otp_error_we;
+ logic [2:0] status_qs;
+ logic [2:0] err_code_qs;
logic direct_access_cmd_read_wd;
logic direct_access_cmd_read_we;
logic direct_access_cmd_write_wd;
logic direct_access_cmd_write_we;
- logic [9:0] direct_access_address_qs;
- logic [9:0] direct_access_address_wd;
+ logic [10:0] direct_access_address_qs;
+ logic [10:0] direct_access_address_wd;
logic direct_access_address_we;
- logic [1:0] direct_access_size_qs;
- logic [1:0] direct_access_size_wd;
- logic direct_access_size_we;
logic [31:0] direct_access_wdata_0_qs;
logic [31:0] direct_access_wdata_0_wd;
logic direct_access_wdata_0_we;
@@ -157,110 +159,123 @@
logic direct_access_wdata_1_we;
logic [31:0] direct_access_rdata_0_qs;
logic [31:0] direct_access_rdata_1_qs;
- logic secret_integrity_digest_calc_wd;
- logic secret_integrity_digest_calc_we;
- logic hw_cfg_integrity_digest_calc_wd;
- logic hw_cfg_integrity_digest_calc_we;
- logic sw_cfg_integrity_digest_calc_wd;
- logic sw_cfg_integrity_digest_calc_we;
- logic [31:0] secret_integrity_digest_qs;
- logic secret_integrity_digest_re;
- logic [31:0] hw_cfg_integrity_digest_qs;
- logic hw_cfg_integrity_digest_re;
- logic [31:0] sw_cfg_integrity_digest_qs;
- logic sw_cfg_integrity_digest_re;
+ logic check_period_regen_qs;
+ logic check_period_regen_wd;
+ logic check_period_regen_we;
+ logic [5:0] integrity_check_period_msb_qs;
+ logic [5:0] integrity_check_period_msb_wd;
+ logic integrity_check_period_msb_we;
+ logic [5:0] consistency_check_period_msb_qs;
+ logic [5:0] consistency_check_period_msb_wd;
+ logic consistency_check_period_msb_we;
+ logic creator_sw_cfg_read_lock_qs;
+ logic creator_sw_cfg_read_lock_wd;
+ logic creator_sw_cfg_read_lock_we;
+ logic owner_sw_cfg_read_lock_qs;
+ logic owner_sw_cfg_read_lock_wd;
+ logic owner_sw_cfg_read_lock_we;
+ logic hw_cfg_digest_calc_wd;
+ logic hw_cfg_digest_calc_we;
+ logic secret_digest_calc_wd;
+ logic secret_digest_calc_we;
+ logic [31:0] creator_sw_cfg_digest_qs;
+ logic creator_sw_cfg_digest_re;
+ logic [31:0] owner_sw_cfg_digest_qs;
+ logic owner_sw_cfg_digest_re;
+ logic [31:0] hw_cfg_digest_qs;
+ logic hw_cfg_digest_re;
+ logic [31:0] secret_digest_qs;
+ logic secret_digest_re;
+ logic [31:0] test_tokens_lock_qs;
+ logic test_tokens_lock_re;
+ logic [31:0] rma_token_lock_qs;
+ logic rma_token_lock_re;
+ logic [31:0] flash_keys_lock_qs;
+ logic flash_keys_lock_re;
+ logic [31:0] sram_key_lock_qs;
+ logic sram_key_lock_re;
+ logic [31:0] creator_key_lock_qs;
+ logic creator_key_lock_re;
logic [7:0] lc_state_0_lc_state_0_qs;
logic [7:0] lc_state_0_lc_state_1_qs;
logic [7:0] lc_state_0_lc_state_2_qs;
logic [7:0] lc_state_0_lc_state_3_qs;
logic [7:0] lc_state_1_lc_state_4_qs;
logic [7:0] lc_state_1_lc_state_5_qs;
- logic [7:0] id_state_qs;
- logic [7:0] test_xxx_cnt_test_state_cnt_qs;
- logic [7:0] test_xxx_cnt_test_unlock_cnt_qs;
- logic [7:0] test_xxx_cnt_test_exit_cnt_qs;
- logic [7:0] test_xxx_cnt_xxx_unlock_cnt_qs;
- logic [15:0] transition_cnt_qs;
- logic [2:0] hw_cfg_lock_test_tokens_lock_qs;
- logic hw_cfg_lock_test_tokens_lock_re;
- logic [4:0] hw_cfg_lock_xxx_token_lock_qs;
- logic hw_cfg_lock_xxx_token_lock_re;
- logic [31:0] hw_cfg_0_qs;
- logic [31:0] hw_cfg_1_qs;
- logic [31:0] hw_cfg_2_qs;
- logic [31:0] hw_cfg_3_qs;
- logic [31:0] hw_cfg_4_qs;
- logic [31:0] hw_cfg_5_qs;
+ logic [7:0] lc_state_1_lc_state_6_qs;
+ logic [7:0] lc_state_1_lc_state_7_qs;
+ logic [7:0] lc_state_2_qs;
+ logic [31:0] transition_cnt_qs;
// Register instances
// R[intr_state]: V(False)
- // F[otp_access_done]: 0:0
+ // F[otp_operation_done]: 0:0
prim_subreg #(
.DW (1),
.SWACCESS("W1C"),
.RESVAL (1'h0)
- ) u_intr_state_otp_access_done (
+ ) u_intr_state_otp_operation_done (
.clk_i (clk_i ),
.rst_ni (rst_ni ),
// from register interface
- .we (intr_state_otp_access_done_we),
- .wd (intr_state_otp_access_done_wd),
+ .we (intr_state_otp_operation_done_we),
+ .wd (intr_state_otp_operation_done_wd),
// from internal hardware
- .de (hw2reg.intr_state.otp_access_done.de),
- .d (hw2reg.intr_state.otp_access_done.d ),
+ .de (hw2reg.intr_state.otp_operation_done.de),
+ .d (hw2reg.intr_state.otp_operation_done.d ),
// to internal hardware
.qe (),
- .q (reg2hw.intr_state.otp_access_done.q ),
+ .q (reg2hw.intr_state.otp_operation_done.q ),
// to register interface (read)
- .qs (intr_state_otp_access_done_qs)
+ .qs (intr_state_otp_operation_done_qs)
);
- // F[otp_ctrl_err]: 1:1
+ // F[otp_error]: 1:1
prim_subreg #(
.DW (1),
.SWACCESS("W1C"),
.RESVAL (1'h0)
- ) u_intr_state_otp_ctrl_err (
+ ) u_intr_state_otp_error (
.clk_i (clk_i ),
.rst_ni (rst_ni ),
// from register interface
- .we (intr_state_otp_ctrl_err_we),
- .wd (intr_state_otp_ctrl_err_wd),
+ .we (intr_state_otp_error_we),
+ .wd (intr_state_otp_error_wd),
// from internal hardware
- .de (hw2reg.intr_state.otp_ctrl_err.de),
- .d (hw2reg.intr_state.otp_ctrl_err.d ),
+ .de (hw2reg.intr_state.otp_error.de),
+ .d (hw2reg.intr_state.otp_error.d ),
// to internal hardware
.qe (),
- .q (reg2hw.intr_state.otp_ctrl_err.q ),
+ .q (reg2hw.intr_state.otp_error.q ),
// to register interface (read)
- .qs (intr_state_otp_ctrl_err_qs)
+ .qs (intr_state_otp_error_qs)
);
// R[intr_enable]: V(False)
- // F[otp_access_done]: 0:0
+ // F[otp_operation_done]: 0:0
prim_subreg #(
.DW (1),
.SWACCESS("RW"),
.RESVAL (1'h0)
- ) u_intr_enable_otp_access_done (
+ ) u_intr_enable_otp_operation_done (
.clk_i (clk_i ),
.rst_ni (rst_ni ),
// from register interface
- .we (intr_enable_otp_access_done_we),
- .wd (intr_enable_otp_access_done_wd),
+ .we (intr_enable_otp_operation_done_we),
+ .wd (intr_enable_otp_operation_done_wd),
// from internal hardware
.de (1'b0),
@@ -268,25 +283,25 @@
// to internal hardware
.qe (),
- .q (reg2hw.intr_enable.otp_access_done.q ),
+ .q (reg2hw.intr_enable.otp_operation_done.q ),
// to register interface (read)
- .qs (intr_enable_otp_access_done_qs)
+ .qs (intr_enable_otp_operation_done_qs)
);
- // F[otp_ctrl_err]: 1:1
+ // F[otp_error]: 1:1
prim_subreg #(
.DW (1),
.SWACCESS("RW"),
.RESVAL (1'h0)
- ) u_intr_enable_otp_ctrl_err (
+ ) u_intr_enable_otp_error (
.clk_i (clk_i ),
.rst_ni (rst_ni ),
// from register interface
- .we (intr_enable_otp_ctrl_err_we),
- .wd (intr_enable_otp_ctrl_err_wd),
+ .we (intr_enable_otp_error_we),
+ .wd (intr_enable_otp_error_wd),
// from internal hardware
.de (1'b0),
@@ -294,41 +309,41 @@
// to internal hardware
.qe (),
- .q (reg2hw.intr_enable.otp_ctrl_err.q ),
+ .q (reg2hw.intr_enable.otp_error.q ),
// to register interface (read)
- .qs (intr_enable_otp_ctrl_err_qs)
+ .qs (intr_enable_otp_error_qs)
);
// R[intr_test]: V(True)
- // F[otp_access_done]: 0:0
+ // F[otp_operation_done]: 0:0
prim_subreg_ext #(
.DW (1)
- ) u_intr_test_otp_access_done (
+ ) u_intr_test_otp_operation_done (
.re (1'b0),
- .we (intr_test_otp_access_done_we),
- .wd (intr_test_otp_access_done_wd),
+ .we (intr_test_otp_operation_done_we),
+ .wd (intr_test_otp_operation_done_wd),
.d ('0),
.qre (),
- .qe (reg2hw.intr_test.otp_access_done.qe),
- .q (reg2hw.intr_test.otp_access_done.q ),
+ .qe (reg2hw.intr_test.otp_operation_done.qe),
+ .q (reg2hw.intr_test.otp_operation_done.q ),
.qs ()
);
- // F[otp_ctrl_err]: 1:1
+ // F[otp_error]: 1:1
prim_subreg_ext #(
.DW (1)
- ) u_intr_test_otp_ctrl_err (
+ ) u_intr_test_otp_error (
.re (1'b0),
- .we (intr_test_otp_ctrl_err_we),
- .wd (intr_test_otp_ctrl_err_wd),
+ .we (intr_test_otp_error_we),
+ .wd (intr_test_otp_error_wd),
.d ('0),
.qre (),
- .qe (reg2hw.intr_test.otp_ctrl_err.qe),
- .q (reg2hw.intr_test.otp_ctrl_err.q ),
+ .qe (reg2hw.intr_test.otp_error.qe),
+ .q (reg2hw.intr_test.otp_error.q ),
.qs ()
);
@@ -336,9 +351,9 @@
// R[status]: V(False)
prim_subreg #(
- .DW (32),
+ .DW (3),
.SWACCESS("RO"),
- .RESVAL (32'h0)
+ .RESVAL (3'h0)
) u_status (
.clk_i (clk_i ),
.rst_ni (rst_ni ),
@@ -362,9 +377,9 @@
// R[err_code]: V(False)
prim_subreg #(
- .DW (32),
+ .DW (3),
.SWACCESS("RO"),
- .RESVAL (32'h0)
+ .RESVAL (3'h0)
) u_err_code (
.clk_i (clk_i ),
.rst_ni (rst_ni ),
@@ -420,9 +435,9 @@
// R[direct_access_address]: V(False)
prim_subreg #(
- .DW (10),
+ .DW (11),
.SWACCESS("RW"),
- .RESVAL (10'h0)
+ .RESVAL (11'h0)
) u_direct_access_address (
.clk_i (clk_i ),
.rst_ni (rst_ni ),
@@ -444,33 +459,6 @@
);
- // R[direct_access_size]: V(False)
-
- prim_subreg #(
- .DW (2),
- .SWACCESS("RW"),
- .RESVAL (2'h0)
- ) u_direct_access_size (
- .clk_i (clk_i ),
- .rst_ni (rst_ni ),
-
- // from register interface
- .we (direct_access_size_we),
- .wd (direct_access_size_wd),
-
- // from internal hardware
- .de (1'b0),
- .d ('0 ),
-
- // to internal hardware
- .qe (),
- .q (reg2hw.direct_access_size.q ),
-
- // to register interface (read)
- .qs (direct_access_size_qs)
- );
-
-
// Subregister 0 of Multireg direct_access_wdata
// R[direct_access_wdata_0]: V(False)
@@ -581,19 +569,19 @@
);
- // R[secret_integrity_digest_calc]: V(False)
+ // R[check_period_regen]: V(False)
prim_subreg #(
.DW (1),
.SWACCESS("W1C"),
- .RESVAL (1'h0)
- ) u_secret_integrity_digest_calc (
+ .RESVAL (1'h1)
+ ) u_check_period_regen (
.clk_i (clk_i ),
.rst_ni (rst_ni ),
// from register interface
- .we (secret_integrity_digest_calc_we),
- .wd (secret_integrity_digest_calc_wd),
+ .we (check_period_regen_we),
+ .wd (check_period_regen_wd),
// from internal hardware
.de (1'b0),
@@ -601,25 +589,26 @@
// to internal hardware
.qe (),
- .q (reg2hw.secret_integrity_digest_calc.q ),
+ .q (reg2hw.check_period_regen.q ),
- .qs ()
+ // to register interface (read)
+ .qs (check_period_regen_qs)
);
- // R[hw_cfg_integrity_digest_calc]: V(False)
+ // R[integrity_check_period_msb]: V(False)
prim_subreg #(
- .DW (1),
- .SWACCESS("W1C"),
- .RESVAL (1'h0)
- ) u_hw_cfg_integrity_digest_calc (
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h1b)
+ ) u_integrity_check_period_msb (
.clk_i (clk_i ),
.rst_ni (rst_ni ),
- // from register interface
- .we (hw_cfg_integrity_digest_calc_we),
- .wd (hw_cfg_integrity_digest_calc_wd),
+ // from register interface (qualified with register enable)
+ .we (integrity_check_period_msb_we & check_period_regen_qs),
+ .wd (integrity_check_period_msb_wd),
// from internal hardware
.de (1'b0),
@@ -627,25 +616,26 @@
// to internal hardware
.qe (),
- .q (reg2hw.hw_cfg_integrity_digest_calc.q ),
+ .q (reg2hw.integrity_check_period_msb.q ),
- .qs ()
+ // to register interface (read)
+ .qs (integrity_check_period_msb_qs)
);
- // R[sw_cfg_integrity_digest_calc]: V(False)
+ // R[consistency_check_period_msb]: V(False)
prim_subreg #(
- .DW (1),
- .SWACCESS("W1C"),
- .RESVAL (1'h0)
- ) u_sw_cfg_integrity_digest_calc (
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h1e)
+ ) u_consistency_check_period_msb (
.clk_i (clk_i ),
.rst_ni (rst_ni ),
- // from register interface
- .we (sw_cfg_integrity_digest_calc_we),
- .wd (sw_cfg_integrity_digest_calc_wd),
+ // from register interface (qualified with register enable)
+ .we (consistency_check_period_msb_we & check_period_regen_qs),
+ .wd (consistency_check_period_msb_wd),
// from internal hardware
.de (1'b0),
@@ -653,57 +643,260 @@
// to internal hardware
.qe (),
- .q (reg2hw.sw_cfg_integrity_digest_calc.q ),
+ .q (reg2hw.consistency_check_period_msb.q ),
+
+ // to register interface (read)
+ .qs (consistency_check_period_msb_qs)
+ );
+
+
+ // R[creator_sw_cfg_read_lock]: V(False)
+
+ prim_subreg #(
+ .DW (1),
+ .SWACCESS("W1C"),
+ .RESVAL (1'h1)
+ ) u_creator_sw_cfg_read_lock (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface
+ .we (creator_sw_cfg_read_lock_we),
+ .wd (creator_sw_cfg_read_lock_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.creator_sw_cfg_read_lock.q ),
+
+ // to register interface (read)
+ .qs (creator_sw_cfg_read_lock_qs)
+ );
+
+
+ // R[owner_sw_cfg_read_lock]: V(False)
+
+ prim_subreg #(
+ .DW (1),
+ .SWACCESS("W1C"),
+ .RESVAL (1'h1)
+ ) u_owner_sw_cfg_read_lock (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface
+ .we (owner_sw_cfg_read_lock_we),
+ .wd (owner_sw_cfg_read_lock_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.owner_sw_cfg_read_lock.q ),
+
+ // to register interface (read)
+ .qs (owner_sw_cfg_read_lock_qs)
+ );
+
+
+ // R[hw_cfg_digest_calc]: V(False)
+
+ prim_subreg #(
+ .DW (1),
+ .SWACCESS("W1C"),
+ .RESVAL (1'h0)
+ ) u_hw_cfg_digest_calc (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface
+ .we (hw_cfg_digest_calc_we),
+ .wd (hw_cfg_digest_calc_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.hw_cfg_digest_calc.q ),
.qs ()
);
- // R[secret_integrity_digest]: V(True)
+ // R[secret_digest_calc]: V(False)
- prim_subreg_ext #(
- .DW (32)
- ) u_secret_integrity_digest (
- .re (secret_integrity_digest_re),
- .we (1'b0),
- .wd ('0),
- .d (hw2reg.secret_integrity_digest.d),
- .qre (),
+ prim_subreg #(
+ .DW (1),
+ .SWACCESS("W1C"),
+ .RESVAL (1'h0)
+ ) u_secret_digest_calc (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface
+ .we (secret_digest_calc_we),
+ .wd (secret_digest_calc_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
.qe (),
- .q (),
- .qs (secret_integrity_digest_qs)
+ .q (reg2hw.secret_digest_calc.q ),
+
+ .qs ()
);
- // R[hw_cfg_integrity_digest]: V(True)
+ // R[creator_sw_cfg_digest]: V(True)
prim_subreg_ext #(
.DW (32)
- ) u_hw_cfg_integrity_digest (
- .re (hw_cfg_integrity_digest_re),
+ ) u_creator_sw_cfg_digest (
+ .re (creator_sw_cfg_digest_re),
.we (1'b0),
.wd ('0),
- .d (hw2reg.hw_cfg_integrity_digest.d),
+ .d (hw2reg.creator_sw_cfg_digest.d),
.qre (),
.qe (),
.q (),
- .qs (hw_cfg_integrity_digest_qs)
+ .qs (creator_sw_cfg_digest_qs)
);
- // R[sw_cfg_integrity_digest]: V(True)
+ // R[owner_sw_cfg_digest]: V(True)
prim_subreg_ext #(
.DW (32)
- ) u_sw_cfg_integrity_digest (
- .re (sw_cfg_integrity_digest_re),
+ ) u_owner_sw_cfg_digest (
+ .re (owner_sw_cfg_digest_re),
.we (1'b0),
.wd ('0),
- .d (hw2reg.sw_cfg_integrity_digest.d),
+ .d (hw2reg.owner_sw_cfg_digest.d),
.qre (),
.qe (),
.q (),
- .qs (sw_cfg_integrity_digest_qs)
+ .qs (owner_sw_cfg_digest_qs)
+ );
+
+
+ // R[hw_cfg_digest]: V(True)
+
+ prim_subreg_ext #(
+ .DW (32)
+ ) u_hw_cfg_digest (
+ .re (hw_cfg_digest_re),
+ .we (1'b0),
+ .wd ('0),
+ .d (hw2reg.hw_cfg_digest.d),
+ .qre (),
+ .qe (),
+ .q (),
+ .qs (hw_cfg_digest_qs)
+ );
+
+
+ // R[secret_digest]: V(True)
+
+ prim_subreg_ext #(
+ .DW (32)
+ ) u_secret_digest (
+ .re (secret_digest_re),
+ .we (1'b0),
+ .wd ('0),
+ .d (hw2reg.secret_digest.d),
+ .qre (),
+ .qe (),
+ .q (),
+ .qs (secret_digest_qs)
+ );
+
+
+ // R[test_tokens_lock]: V(True)
+
+ prim_subreg_ext #(
+ .DW (32)
+ ) u_test_tokens_lock (
+ .re (test_tokens_lock_re),
+ .we (1'b0),
+ .wd ('0),
+ .d (hw2reg.test_tokens_lock.d),
+ .qre (),
+ .qe (),
+ .q (),
+ .qs (test_tokens_lock_qs)
+ );
+
+
+ // R[rma_token_lock]: V(True)
+
+ prim_subreg_ext #(
+ .DW (32)
+ ) u_rma_token_lock (
+ .re (rma_token_lock_re),
+ .we (1'b0),
+ .wd ('0),
+ .d (hw2reg.rma_token_lock.d),
+ .qre (),
+ .qe (),
+ .q (),
+ .qs (rma_token_lock_qs)
+ );
+
+
+ // R[flash_keys_lock]: V(True)
+
+ prim_subreg_ext #(
+ .DW (32)
+ ) u_flash_keys_lock (
+ .re (flash_keys_lock_re),
+ .we (1'b0),
+ .wd ('0),
+ .d (hw2reg.flash_keys_lock.d),
+ .qre (),
+ .qe (),
+ .q (),
+ .qs (flash_keys_lock_qs)
+ );
+
+
+ // R[sram_key_lock]: V(True)
+
+ prim_subreg_ext #(
+ .DW (32)
+ ) u_sram_key_lock (
+ .re (sram_key_lock_re),
+ .we (1'b0),
+ .wd ('0),
+ .d (hw2reg.sram_key_lock.d),
+ .qre (),
+ .qe (),
+ .q (),
+ .qs (sram_key_lock_qs)
+ );
+
+
+ // R[creator_key_lock]: V(True)
+
+ prim_subreg_ext #(
+ .DW (32)
+ ) u_creator_key_lock (
+ .re (creator_key_lock_re),
+ .we (1'b0),
+ .wd ('0),
+ .d (hw2reg.creator_key_lock.d),
+ .qre (),
+ .qe (),
+ .q (),
+ .qs (creator_key_lock_qs)
);
@@ -864,14 +1057,12 @@
);
-
- // R[id_state]: V(False)
-
+ // F[lc_state_6]: 23:16
prim_subreg #(
.DW (8),
.SWACCESS("RO"),
.RESVAL (8'h0)
- ) u_id_state (
+ ) u_lc_state_1_lc_state_6 (
.clk_i (clk_i ),
.rst_ni (rst_ni ),
@@ -879,26 +1070,24 @@
.wd ('0 ),
// from internal hardware
- .de (hw2reg.id_state.de),
- .d (hw2reg.id_state.d ),
+ .de (hw2reg.lc_state[6].de),
+ .d (hw2reg.lc_state[6].d ),
// to internal hardware
.qe (),
.q (),
// to register interface (read)
- .qs (id_state_qs)
+ .qs (lc_state_1_lc_state_6_qs)
);
- // R[test_xxx_cnt]: V(False)
-
- // F[test_state_cnt]: 7:0
+ // F[lc_state_7]: 31:24
prim_subreg #(
.DW (8),
.SWACCESS("RO"),
.RESVAL (8'h0)
- ) u_test_xxx_cnt_test_state_cnt (
+ ) u_lc_state_1_lc_state_7 (
.clk_i (clk_i ),
.rst_ni (rst_ni ),
@@ -906,24 +1095,26 @@
.wd ('0 ),
// from internal hardware
- .de (hw2reg.test_xxx_cnt.test_state_cnt.de),
- .d (hw2reg.test_xxx_cnt.test_state_cnt.d ),
+ .de (hw2reg.lc_state[7].de),
+ .d (hw2reg.lc_state[7].d ),
// to internal hardware
.qe (),
.q (),
// to register interface (read)
- .qs (test_xxx_cnt_test_state_cnt_qs)
+ .qs (lc_state_1_lc_state_7_qs)
);
- // F[test_unlock_cnt]: 15:8
+ // Subregister 8 of Multireg lc_state
+ // R[lc_state_2]: V(False)
+
prim_subreg #(
.DW (8),
.SWACCESS("RO"),
.RESVAL (8'h0)
- ) u_test_xxx_cnt_test_unlock_cnt (
+ ) u_lc_state_2 (
.clk_i (clk_i ),
.rst_ni (rst_ni ),
@@ -931,74 +1122,24 @@
.wd ('0 ),
// from internal hardware
- .de (hw2reg.test_xxx_cnt.test_unlock_cnt.de),
- .d (hw2reg.test_xxx_cnt.test_unlock_cnt.d ),
+ .de (hw2reg.lc_state[8].de),
+ .d (hw2reg.lc_state[8].d ),
// to internal hardware
.qe (),
.q (),
// to register interface (read)
- .qs (test_xxx_cnt_test_unlock_cnt_qs)
- );
-
-
- // F[test_exit_cnt]: 23:16
- prim_subreg #(
- .DW (8),
- .SWACCESS("RO"),
- .RESVAL (8'h0)
- ) u_test_xxx_cnt_test_exit_cnt (
- .clk_i (clk_i ),
- .rst_ni (rst_ni ),
-
- .we (1'b0),
- .wd ('0 ),
-
- // from internal hardware
- .de (hw2reg.test_xxx_cnt.test_exit_cnt.de),
- .d (hw2reg.test_xxx_cnt.test_exit_cnt.d ),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (test_xxx_cnt_test_exit_cnt_qs)
- );
-
-
- // F[xxx_unlock_cnt]: 31:24
- prim_subreg #(
- .DW (8),
- .SWACCESS("RO"),
- .RESVAL (8'h0)
- ) u_test_xxx_cnt_xxx_unlock_cnt (
- .clk_i (clk_i ),
- .rst_ni (rst_ni ),
-
- .we (1'b0),
- .wd ('0 ),
-
- // from internal hardware
- .de (hw2reg.test_xxx_cnt.xxx_unlock_cnt.de),
- .d (hw2reg.test_xxx_cnt.xxx_unlock_cnt.d ),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (test_xxx_cnt_xxx_unlock_cnt_qs)
+ .qs (lc_state_2_qs)
);
// R[transition_cnt]: V(False)
prim_subreg #(
- .DW (16),
+ .DW (32),
.SWACCESS("RO"),
- .RESVAL (16'h0)
+ .RESVAL (32'h0)
) u_transition_cnt (
.clk_i (clk_i ),
.rst_ni (rst_ni ),
@@ -1019,199 +1160,9 @@
);
- // R[hw_cfg_lock]: V(True)
-
- // F[test_tokens_lock]: 2:0
- prim_subreg_ext #(
- .DW (3)
- ) u_hw_cfg_lock_test_tokens_lock (
- .re (hw_cfg_lock_test_tokens_lock_re),
- .we (1'b0),
- .wd ('0),
- .d (hw2reg.hw_cfg_lock.test_tokens_lock.d),
- .qre (),
- .qe (),
- .q (),
- .qs (hw_cfg_lock_test_tokens_lock_qs)
- );
- // F[xxx_token_lock]: 7:3
- prim_subreg_ext #(
- .DW (5)
- ) u_hw_cfg_lock_xxx_token_lock (
- .re (hw_cfg_lock_xxx_token_lock_re),
- .we (1'b0),
- .wd ('0),
- .d (hw2reg.hw_cfg_lock.xxx_token_lock.d),
- .qre (),
- .qe (),
- .q (),
- .qs (hw_cfg_lock_xxx_token_lock_qs)
- );
-
-
-
- // Subregister 0 of Multireg hw_cfg
- // R[hw_cfg_0]: V(False)
-
- prim_subreg #(
- .DW (32),
- .SWACCESS("RO"),
- .RESVAL (32'h0)
- ) u_hw_cfg_0 (
- .clk_i (clk_i ),
- .rst_ni (rst_ni ),
-
- .we (1'b0),
- .wd ('0 ),
-
- // from internal hardware
- .de (hw2reg.hw_cfg[0].de),
- .d (hw2reg.hw_cfg[0].d ),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (hw_cfg_0_qs)
- );
-
- // Subregister 1 of Multireg hw_cfg
- // R[hw_cfg_1]: V(False)
-
- prim_subreg #(
- .DW (32),
- .SWACCESS("RO"),
- .RESVAL (32'h0)
- ) u_hw_cfg_1 (
- .clk_i (clk_i ),
- .rst_ni (rst_ni ),
-
- .we (1'b0),
- .wd ('0 ),
-
- // from internal hardware
- .de (hw2reg.hw_cfg[1].de),
- .d (hw2reg.hw_cfg[1].d ),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (hw_cfg_1_qs)
- );
-
- // Subregister 2 of Multireg hw_cfg
- // R[hw_cfg_2]: V(False)
-
- prim_subreg #(
- .DW (32),
- .SWACCESS("RO"),
- .RESVAL (32'h0)
- ) u_hw_cfg_2 (
- .clk_i (clk_i ),
- .rst_ni (rst_ni ),
-
- .we (1'b0),
- .wd ('0 ),
-
- // from internal hardware
- .de (hw2reg.hw_cfg[2].de),
- .d (hw2reg.hw_cfg[2].d ),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (hw_cfg_2_qs)
- );
-
- // Subregister 3 of Multireg hw_cfg
- // R[hw_cfg_3]: V(False)
-
- prim_subreg #(
- .DW (32),
- .SWACCESS("RO"),
- .RESVAL (32'h0)
- ) u_hw_cfg_3 (
- .clk_i (clk_i ),
- .rst_ni (rst_ni ),
-
- .we (1'b0),
- .wd ('0 ),
-
- // from internal hardware
- .de (hw2reg.hw_cfg[3].de),
- .d (hw2reg.hw_cfg[3].d ),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (hw_cfg_3_qs)
- );
-
- // Subregister 4 of Multireg hw_cfg
- // R[hw_cfg_4]: V(False)
-
- prim_subreg #(
- .DW (32),
- .SWACCESS("RO"),
- .RESVAL (32'h0)
- ) u_hw_cfg_4 (
- .clk_i (clk_i ),
- .rst_ni (rst_ni ),
-
- .we (1'b0),
- .wd ('0 ),
-
- // from internal hardware
- .de (hw2reg.hw_cfg[4].de),
- .d (hw2reg.hw_cfg[4].d ),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (hw_cfg_4_qs)
- );
-
- // Subregister 5 of Multireg hw_cfg
- // R[hw_cfg_5]: V(False)
-
- prim_subreg #(
- .DW (32),
- .SWACCESS("RO"),
- .RESVAL (32'h0)
- ) u_hw_cfg_5 (
- .clk_i (clk_i ),
- .rst_ni (rst_ni ),
-
- .we (1'b0),
- .wd ('0 ),
-
- // from internal hardware
- .de (hw2reg.hw_cfg[5].de),
- .d (hw2reg.hw_cfg[5].d ),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (hw_cfg_5_qs)
- );
-
-
-
-
- logic [29:0] addr_hit;
+ logic [30:0] addr_hit;
always_comb begin
addr_hit = '0;
addr_hit[ 0] = (reg_addr == OTP_CTRL_INTR_STATE_OFFSET);
@@ -1221,29 +1172,30 @@
addr_hit[ 4] = (reg_addr == OTP_CTRL_ERR_CODE_OFFSET);
addr_hit[ 5] = (reg_addr == OTP_CTRL_DIRECT_ACCESS_CMD_OFFSET);
addr_hit[ 6] = (reg_addr == OTP_CTRL_DIRECT_ACCESS_ADDRESS_OFFSET);
- addr_hit[ 7] = (reg_addr == OTP_CTRL_DIRECT_ACCESS_SIZE_OFFSET);
- addr_hit[ 8] = (reg_addr == OTP_CTRL_DIRECT_ACCESS_WDATA_0_OFFSET);
- addr_hit[ 9] = (reg_addr == OTP_CTRL_DIRECT_ACCESS_WDATA_1_OFFSET);
- addr_hit[10] = (reg_addr == OTP_CTRL_DIRECT_ACCESS_RDATA_0_OFFSET);
- addr_hit[11] = (reg_addr == OTP_CTRL_DIRECT_ACCESS_RDATA_1_OFFSET);
- addr_hit[12] = (reg_addr == OTP_CTRL_SECRET_INTEGRITY_DIGEST_CALC_OFFSET);
- addr_hit[13] = (reg_addr == OTP_CTRL_HW_CFG_INTEGRITY_DIGEST_CALC_OFFSET);
- addr_hit[14] = (reg_addr == OTP_CTRL_SW_CFG_INTEGRITY_DIGEST_CALC_OFFSET);
- addr_hit[15] = (reg_addr == OTP_CTRL_SECRET_INTEGRITY_DIGEST_OFFSET);
- addr_hit[16] = (reg_addr == OTP_CTRL_HW_CFG_INTEGRITY_DIGEST_OFFSET);
- addr_hit[17] = (reg_addr == OTP_CTRL_SW_CFG_INTEGRITY_DIGEST_OFFSET);
- addr_hit[18] = (reg_addr == OTP_CTRL_LC_STATE_0_OFFSET);
- addr_hit[19] = (reg_addr == OTP_CTRL_LC_STATE_1_OFFSET);
- addr_hit[20] = (reg_addr == OTP_CTRL_ID_STATE_OFFSET);
- addr_hit[21] = (reg_addr == OTP_CTRL_TEST_XXX_CNT_OFFSET);
- addr_hit[22] = (reg_addr == OTP_CTRL_TRANSITION_CNT_OFFSET);
- addr_hit[23] = (reg_addr == OTP_CTRL_HW_CFG_LOCK_OFFSET);
- addr_hit[24] = (reg_addr == OTP_CTRL_HW_CFG_0_OFFSET);
- addr_hit[25] = (reg_addr == OTP_CTRL_HW_CFG_1_OFFSET);
- addr_hit[26] = (reg_addr == OTP_CTRL_HW_CFG_2_OFFSET);
- addr_hit[27] = (reg_addr == OTP_CTRL_HW_CFG_3_OFFSET);
- addr_hit[28] = (reg_addr == OTP_CTRL_HW_CFG_4_OFFSET);
- addr_hit[29] = (reg_addr == OTP_CTRL_HW_CFG_5_OFFSET);
+ addr_hit[ 7] = (reg_addr == OTP_CTRL_DIRECT_ACCESS_WDATA_0_OFFSET);
+ addr_hit[ 8] = (reg_addr == OTP_CTRL_DIRECT_ACCESS_WDATA_1_OFFSET);
+ addr_hit[ 9] = (reg_addr == OTP_CTRL_DIRECT_ACCESS_RDATA_0_OFFSET);
+ addr_hit[10] = (reg_addr == OTP_CTRL_DIRECT_ACCESS_RDATA_1_OFFSET);
+ addr_hit[11] = (reg_addr == OTP_CTRL_CHECK_PERIOD_REGEN_OFFSET);
+ addr_hit[12] = (reg_addr == OTP_CTRL_INTEGRITY_CHECK_PERIOD_MSB_OFFSET);
+ addr_hit[13] = (reg_addr == OTP_CTRL_CONSISTENCY_CHECK_PERIOD_MSB_OFFSET);
+ addr_hit[14] = (reg_addr == OTP_CTRL_CREATOR_SW_CFG_READ_LOCK_OFFSET);
+ addr_hit[15] = (reg_addr == OTP_CTRL_OWNER_SW_CFG_READ_LOCK_OFFSET);
+ addr_hit[16] = (reg_addr == OTP_CTRL_HW_CFG_DIGEST_CALC_OFFSET);
+ addr_hit[17] = (reg_addr == OTP_CTRL_SECRET_DIGEST_CALC_OFFSET);
+ addr_hit[18] = (reg_addr == OTP_CTRL_CREATOR_SW_CFG_DIGEST_OFFSET);
+ addr_hit[19] = (reg_addr == OTP_CTRL_OWNER_SW_CFG_DIGEST_OFFSET);
+ addr_hit[20] = (reg_addr == OTP_CTRL_HW_CFG_DIGEST_OFFSET);
+ addr_hit[21] = (reg_addr == OTP_CTRL_SECRET_DIGEST_OFFSET);
+ addr_hit[22] = (reg_addr == OTP_CTRL_TEST_TOKENS_LOCK_OFFSET);
+ addr_hit[23] = (reg_addr == OTP_CTRL_RMA_TOKEN_LOCK_OFFSET);
+ addr_hit[24] = (reg_addr == OTP_CTRL_FLASH_KEYS_LOCK_OFFSET);
+ addr_hit[25] = (reg_addr == OTP_CTRL_SRAM_KEY_LOCK_OFFSET);
+ addr_hit[26] = (reg_addr == OTP_CTRL_CREATOR_KEY_LOCK_OFFSET);
+ addr_hit[27] = (reg_addr == OTP_CTRL_LC_STATE_0_OFFSET);
+ addr_hit[28] = (reg_addr == OTP_CTRL_LC_STATE_1_OFFSET);
+ addr_hit[29] = (reg_addr == OTP_CTRL_LC_STATE_2_OFFSET);
+ addr_hit[30] = (reg_addr == OTP_CTRL_TRANSITION_CNT_OFFSET);
end
assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ;
@@ -1281,25 +1233,26 @@
if (addr_hit[27] && reg_we && (OTP_CTRL_PERMIT[27] != (OTP_CTRL_PERMIT[27] & reg_be))) wr_err = 1'b1 ;
if (addr_hit[28] && reg_we && (OTP_CTRL_PERMIT[28] != (OTP_CTRL_PERMIT[28] & reg_be))) wr_err = 1'b1 ;
if (addr_hit[29] && reg_we && (OTP_CTRL_PERMIT[29] != (OTP_CTRL_PERMIT[29] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[30] && reg_we && (OTP_CTRL_PERMIT[30] != (OTP_CTRL_PERMIT[30] & reg_be))) wr_err = 1'b1 ;
end
- assign intr_state_otp_access_done_we = addr_hit[0] & reg_we & ~wr_err;
- assign intr_state_otp_access_done_wd = reg_wdata[0];
+ assign intr_state_otp_operation_done_we = addr_hit[0] & reg_we & ~wr_err;
+ assign intr_state_otp_operation_done_wd = reg_wdata[0];
- assign intr_state_otp_ctrl_err_we = addr_hit[0] & reg_we & ~wr_err;
- assign intr_state_otp_ctrl_err_wd = reg_wdata[1];
+ assign intr_state_otp_error_we = addr_hit[0] & reg_we & ~wr_err;
+ assign intr_state_otp_error_wd = reg_wdata[1];
- assign intr_enable_otp_access_done_we = addr_hit[1] & reg_we & ~wr_err;
- assign intr_enable_otp_access_done_wd = reg_wdata[0];
+ assign intr_enable_otp_operation_done_we = addr_hit[1] & reg_we & ~wr_err;
+ assign intr_enable_otp_operation_done_wd = reg_wdata[0];
- assign intr_enable_otp_ctrl_err_we = addr_hit[1] & reg_we & ~wr_err;
- assign intr_enable_otp_ctrl_err_wd = reg_wdata[1];
+ assign intr_enable_otp_error_we = addr_hit[1] & reg_we & ~wr_err;
+ assign intr_enable_otp_error_wd = reg_wdata[1];
- assign intr_test_otp_access_done_we = addr_hit[2] & reg_we & ~wr_err;
- assign intr_test_otp_access_done_wd = reg_wdata[0];
+ assign intr_test_otp_operation_done_we = addr_hit[2] & reg_we & ~wr_err;
+ assign intr_test_otp_operation_done_wd = reg_wdata[0];
- assign intr_test_otp_ctrl_err_we = addr_hit[2] & reg_we & ~wr_err;
- assign intr_test_otp_ctrl_err_wd = reg_wdata[1];
+ assign intr_test_otp_error_we = addr_hit[2] & reg_we & ~wr_err;
+ assign intr_test_otp_error_wd = reg_wdata[1];
@@ -1310,33 +1263,54 @@
assign direct_access_cmd_write_wd = reg_wdata[1];
assign direct_access_address_we = addr_hit[6] & reg_we & ~wr_err;
- assign direct_access_address_wd = reg_wdata[9:0];
+ assign direct_access_address_wd = reg_wdata[10:0];
- assign direct_access_size_we = addr_hit[7] & reg_we & ~wr_err;
- assign direct_access_size_wd = reg_wdata[1:0];
-
- assign direct_access_wdata_0_we = addr_hit[8] & reg_we & ~wr_err;
+ assign direct_access_wdata_0_we = addr_hit[7] & reg_we & ~wr_err;
assign direct_access_wdata_0_wd = reg_wdata[31:0];
- assign direct_access_wdata_1_we = addr_hit[9] & reg_we & ~wr_err;
+ assign direct_access_wdata_1_we = addr_hit[8] & reg_we & ~wr_err;
assign direct_access_wdata_1_wd = reg_wdata[31:0];
- assign secret_integrity_digest_calc_we = addr_hit[12] & reg_we & ~wr_err;
- assign secret_integrity_digest_calc_wd = reg_wdata[0];
+ assign check_period_regen_we = addr_hit[11] & reg_we & ~wr_err;
+ assign check_period_regen_wd = reg_wdata[0];
- assign hw_cfg_integrity_digest_calc_we = addr_hit[13] & reg_we & ~wr_err;
- assign hw_cfg_integrity_digest_calc_wd = reg_wdata[0];
+ assign integrity_check_period_msb_we = addr_hit[12] & reg_we & ~wr_err;
+ assign integrity_check_period_msb_wd = reg_wdata[5:0];
- assign sw_cfg_integrity_digest_calc_we = addr_hit[14] & reg_we & ~wr_err;
- assign sw_cfg_integrity_digest_calc_wd = reg_wdata[0];
+ assign consistency_check_period_msb_we = addr_hit[13] & reg_we & ~wr_err;
+ assign consistency_check_period_msb_wd = reg_wdata[5:0];
- assign secret_integrity_digest_re = addr_hit[15] && reg_re;
+ assign creator_sw_cfg_read_lock_we = addr_hit[14] & reg_we & ~wr_err;
+ assign creator_sw_cfg_read_lock_wd = reg_wdata[0];
- assign hw_cfg_integrity_digest_re = addr_hit[16] && reg_re;
+ assign owner_sw_cfg_read_lock_we = addr_hit[15] & reg_we & ~wr_err;
+ assign owner_sw_cfg_read_lock_wd = reg_wdata[0];
- assign sw_cfg_integrity_digest_re = addr_hit[17] && reg_re;
+ assign hw_cfg_digest_calc_we = addr_hit[16] & reg_we & ~wr_err;
+ assign hw_cfg_digest_calc_wd = reg_wdata[0];
+
+ assign secret_digest_calc_we = addr_hit[17] & reg_we & ~wr_err;
+ assign secret_digest_calc_wd = reg_wdata[0];
+
+ assign creator_sw_cfg_digest_re = addr_hit[18] && reg_re;
+
+ assign owner_sw_cfg_digest_re = addr_hit[19] && reg_re;
+
+ assign hw_cfg_digest_re = addr_hit[20] && reg_re;
+
+ assign secret_digest_re = addr_hit[21] && reg_re;
+
+ assign test_tokens_lock_re = addr_hit[22] && reg_re;
+
+ assign rma_token_lock_re = addr_hit[23] && reg_re;
+
+ assign flash_keys_lock_re = addr_hit[24] && reg_re;
+
+ assign sram_key_lock_re = addr_hit[25] && reg_re;
+
+ assign creator_key_lock_re = addr_hit[26] && reg_re;
@@ -1348,30 +1322,18 @@
-
-
- assign hw_cfg_lock_test_tokens_lock_re = addr_hit[23] && reg_re;
-
- assign hw_cfg_lock_xxx_token_lock_re = addr_hit[23] && reg_re;
-
-
-
-
-
-
-
// Read data return
always_comb begin
reg_rdata_next = '0;
unique case (1'b1)
addr_hit[0]: begin
- reg_rdata_next[0] = intr_state_otp_access_done_qs;
- reg_rdata_next[1] = intr_state_otp_ctrl_err_qs;
+ reg_rdata_next[0] = intr_state_otp_operation_done_qs;
+ reg_rdata_next[1] = intr_state_otp_error_qs;
end
addr_hit[1]: begin
- reg_rdata_next[0] = intr_enable_otp_access_done_qs;
- reg_rdata_next[1] = intr_enable_otp_ctrl_err_qs;
+ reg_rdata_next[0] = intr_enable_otp_operation_done_qs;
+ reg_rdata_next[1] = intr_enable_otp_error_qs;
end
addr_hit[2]: begin
@@ -1380,11 +1342,11 @@
end
addr_hit[3]: begin
- reg_rdata_next[31:0] = status_qs;
+ reg_rdata_next[2:0] = status_qs;
end
addr_hit[4]: begin
- reg_rdata_next[31:0] = err_code_qs;
+ reg_rdata_next[2:0] = err_code_qs;
end
addr_hit[5]: begin
@@ -1393,107 +1355,109 @@
end
addr_hit[6]: begin
- reg_rdata_next[9:0] = direct_access_address_qs;
+ reg_rdata_next[10:0] = direct_access_address_qs;
end
addr_hit[7]: begin
- reg_rdata_next[1:0] = direct_access_size_qs;
- end
-
- addr_hit[8]: begin
reg_rdata_next[31:0] = direct_access_wdata_0_qs;
end
- addr_hit[9]: begin
+ addr_hit[8]: begin
reg_rdata_next[31:0] = direct_access_wdata_1_qs;
end
- addr_hit[10]: begin
+ addr_hit[9]: begin
reg_rdata_next[31:0] = direct_access_rdata_0_qs;
end
- addr_hit[11]: begin
+ addr_hit[10]: begin
reg_rdata_next[31:0] = direct_access_rdata_1_qs;
end
+ addr_hit[11]: begin
+ reg_rdata_next[0] = check_period_regen_qs;
+ end
+
addr_hit[12]: begin
- reg_rdata_next[0] = '0;
+ reg_rdata_next[5:0] = integrity_check_period_msb_qs;
end
addr_hit[13]: begin
- reg_rdata_next[0] = '0;
+ reg_rdata_next[5:0] = consistency_check_period_msb_qs;
end
addr_hit[14]: begin
- reg_rdata_next[0] = '0;
+ reg_rdata_next[0] = creator_sw_cfg_read_lock_qs;
end
addr_hit[15]: begin
- reg_rdata_next[31:0] = secret_integrity_digest_qs;
+ reg_rdata_next[0] = owner_sw_cfg_read_lock_qs;
end
addr_hit[16]: begin
- reg_rdata_next[31:0] = hw_cfg_integrity_digest_qs;
+ reg_rdata_next[0] = '0;
end
addr_hit[17]: begin
- reg_rdata_next[31:0] = sw_cfg_integrity_digest_qs;
+ reg_rdata_next[0] = '0;
end
addr_hit[18]: begin
+ reg_rdata_next[31:0] = creator_sw_cfg_digest_qs;
+ end
+
+ addr_hit[19]: begin
+ reg_rdata_next[31:0] = owner_sw_cfg_digest_qs;
+ end
+
+ addr_hit[20]: begin
+ reg_rdata_next[31:0] = hw_cfg_digest_qs;
+ end
+
+ addr_hit[21]: begin
+ reg_rdata_next[31:0] = secret_digest_qs;
+ end
+
+ addr_hit[22]: begin
+ reg_rdata_next[31:0] = test_tokens_lock_qs;
+ end
+
+ addr_hit[23]: begin
+ reg_rdata_next[31:0] = rma_token_lock_qs;
+ end
+
+ addr_hit[24]: begin
+ reg_rdata_next[31:0] = flash_keys_lock_qs;
+ end
+
+ addr_hit[25]: begin
+ reg_rdata_next[31:0] = sram_key_lock_qs;
+ end
+
+ addr_hit[26]: begin
+ reg_rdata_next[31:0] = creator_key_lock_qs;
+ end
+
+ addr_hit[27]: begin
reg_rdata_next[7:0] = lc_state_0_lc_state_0_qs;
reg_rdata_next[15:8] = lc_state_0_lc_state_1_qs;
reg_rdata_next[23:16] = lc_state_0_lc_state_2_qs;
reg_rdata_next[31:24] = lc_state_0_lc_state_3_qs;
end
- addr_hit[19]: begin
+ addr_hit[28]: begin
reg_rdata_next[7:0] = lc_state_1_lc_state_4_qs;
reg_rdata_next[15:8] = lc_state_1_lc_state_5_qs;
- end
-
- addr_hit[20]: begin
- reg_rdata_next[7:0] = id_state_qs;
- end
-
- addr_hit[21]: begin
- reg_rdata_next[7:0] = test_xxx_cnt_test_state_cnt_qs;
- reg_rdata_next[15:8] = test_xxx_cnt_test_unlock_cnt_qs;
- reg_rdata_next[23:16] = test_xxx_cnt_test_exit_cnt_qs;
- reg_rdata_next[31:24] = test_xxx_cnt_xxx_unlock_cnt_qs;
- end
-
- addr_hit[22]: begin
- reg_rdata_next[15:0] = transition_cnt_qs;
- end
-
- addr_hit[23]: begin
- reg_rdata_next[2:0] = hw_cfg_lock_test_tokens_lock_qs;
- reg_rdata_next[7:3] = hw_cfg_lock_xxx_token_lock_qs;
- end
-
- addr_hit[24]: begin
- reg_rdata_next[31:0] = hw_cfg_0_qs;
- end
-
- addr_hit[25]: begin
- reg_rdata_next[31:0] = hw_cfg_1_qs;
- end
-
- addr_hit[26]: begin
- reg_rdata_next[31:0] = hw_cfg_2_qs;
- end
-
- addr_hit[27]: begin
- reg_rdata_next[31:0] = hw_cfg_3_qs;
- end
-
- addr_hit[28]: begin
- reg_rdata_next[31:0] = hw_cfg_4_qs;
+ reg_rdata_next[23:16] = lc_state_1_lc_state_6_qs;
+ reg_rdata_next[31:24] = lc_state_1_lc_state_7_qs;
end
addr_hit[29]: begin
- reg_rdata_next[31:0] = hw_cfg_5_qs;
+ reg_rdata_next[7:0] = lc_state_2_qs;
+ end
+
+ addr_hit[30]: begin
+ reg_rdata_next[31:0] = transition_cnt_qs;
end
default: begin