[lc_ctrl] Update design files to account for package changes
Signed-off-by: Michael Schaffner <msf@opentitan.org>
diff --git a/hw/ip/lc_ctrl/lc_ctrl_state_pkg.core b/hw/ip/lc_ctrl/lc_ctrl_state_pkg.core
index c0f942a..8d44fd0 100644
--- a/hw/ip/lc_ctrl/lc_ctrl_state_pkg.core
+++ b/hw/ip/lc_ctrl/lc_ctrl_state_pkg.core
@@ -6,6 +6,8 @@
description: "LC Controller State Encoding Package"
filesets:
files_rtl:
+ depend:
+ - lowrisc:prim:util
files:
- rtl/lc_ctrl_state_pkg.sv
file_type: systemVerilogSource
diff --git a/hw/ip/lc_ctrl/rtl/lc_ctrl_pkg.sv b/hw/ip/lc_ctrl/rtl/lc_ctrl_pkg.sv
index e47ec28..a3d9342 100644
--- a/hw/ip/lc_ctrl/rtl/lc_ctrl_pkg.sv
+++ b/hw/ip/lc_ctrl/rtl/lc_ctrl_pkg.sv
@@ -8,95 +8,6 @@
import prim_util_pkg::vbits;
import lc_ctrl_state_pkg::*;
- /////////////////////////////////
- // General Typedefs and Params //
- /////////////////////////////////
-
- parameter int LcValueWidth = 16;
- parameter int NumLcStateValues = 12;
- parameter int LcStateWidth = NumLcStateValues * LcValueWidth;
- parameter int NumLcCountValues = 16;
- parameter int LcCountWidth = NumLcCountValues * LcValueWidth;
- parameter int NumLcStates = 13;
- parameter int DecLcStateWidth = vbits(NumLcStates);
- parameter int DecLcCountWidth = vbits(NumLcCountValues+1);
- parameter int LcIdStateWidth = LcValueWidth;
- parameter int DecLcIdStateWidth = 2;
-
- parameter int LcTokenWidth = 128;
- typedef logic [LcTokenWidth-1:0] lc_token_t;
-
- typedef enum logic [LcStateWidth-1:0] {
- // Halfword idx : 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
- LcStRaw = '0,
- LcStTestUnlocked0 = {A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, A1, B0},
- LcStTestLocked0 = {A11, A10, A9, A8, A7, A6, A5, A4, A3, A2, B1, B0},
- LcStTestUnlocked1 = {A11, A10, A9, A8, A7, A6, A5, A4, A3, B2, B1, B0},
- LcStTestLocked1 = {A11, A10, A9, A8, A7, A6, A5, A4, B3, B2, B1, B0},
- LcStTestUnlocked2 = {A11, A10, A9, A8, A7, A6, A5, B4, B3, B2, B1, B0},
- LcStTestLocked2 = {A11, A10, A9, A8, A7, A6, B5, B4, B3, B2, B1, B0},
- LcStTestUnlocked3 = {A11, A10, A9, A8, A7, B6, B5, B4, B3, B2, B1, B0},
- LcStDev = {A11, A10, A9, A8, B7, B6, B5, B4, B3, B2, B1, B0},
- LcStProd = {A11, A10, A9, B8, A7, B6, B5, B4, B3, B2, B1, B0},
- LcStProdEnd = {A11, A10, B9, A8, A7, B6, B5, B4, B3, B2, B1, B0},
- LcStRma = {B11, B10, A9, B8, B7, B6, B5, B4, B3, B2, B1, B0},
- LcStScrap = {B11, B10, B9, B8, B7, B6, B5, B4, B3, B2, B1, B0}
- } lc_state_e;
-
- // Decoded life cycle state, used to interface with CSRs and TAP.
- typedef enum logic [DecLcStateWidth-1:0] {
- DecLcStRaw = 4'h0,
- DecLcStTestUnlocked0 = 4'h1,
- DecLcStTestLocked0 = 4'h2,
- DecLcStTestUnlocked1 = 4'h3,
- DecLcStTestLocked1 = 4'h4,
- DecLcStTestUnlocked2 = 4'h5,
- DecLcStTestLocked2 = 4'h6,
- DecLcStTestUnlocked3 = 4'h7,
- DecLcStDev = 4'h8,
- DecLcStProd = 4'h9,
- DecLcStProdEnd = 4'hA,
- DecLcStRma = 4'hB,
- DecLcStScrap = 4'hC,
- DecLcStPostTrans = 4'hD,
- DecLcStEscalate = 4'hE,
- DecLcStInvalid = 4'hF
- } dec_lc_state_e;
-
- typedef enum logic [LcIdStateWidth-1:0] {
- LcIdBlank = E0,
- LcIdPersonalized = F0
- } lc_id_state_e;
-
- typedef enum logic [DecLcIdStateWidth-1:0] {
- DecLcIdBlank = 2'd0,
- DecLcIdPersonalized = 2'd1,
- DecLcIdInvalid = 2'd2
- } dec_lc_id_state_e;
-
- typedef enum logic [LcCountWidth-1:0] {
- LcCntRaw = '0,
- LcCnt1 = {C15, C14, C13, C12, C11, C10, C9, C8, C7, C6, C5, C4, C3, C2, C1, D0},
- LcCnt2 = {C15, C14, C13, C12, C11, C10, C9, C8, C7, C6, C5, C4, C3, C2, D1, D0},
- LcCnt3 = {C15, C14, C13, C12, C11, C10, C9, C8, C7, C6, C5, C4, C3, D2, D1, D0},
- LcCnt4 = {C15, C14, C13, C12, C11, C10, C9, C8, C7, C6, C5, C4, D3, D2, D1, D0},
- LcCnt5 = {C15, C14, C13, C12, C11, C10, C9, C8, C7, C6, C5, D4, D3, D2, D1, D0},
- LcCnt6 = {C15, C14, C13, C12, C11, C10, C9, C8, C7, C6, D5, D4, D3, D2, D1, D0},
- LcCnt7 = {C15, C14, C13, C12, C11, C10, C9, C8, C7, D6, D5, D4, D3, D2, D1, D0},
- LcCnt8 = {C15, C14, C13, C12, C11, C10, C9, C8, D7, D6, D5, D4, D3, D2, D1, D0},
- LcCnt9 = {C15, C14, C13, C12, C11, C10, C9, D8, D7, D6, D5, D4, D3, D2, D1, D0},
- LcCnt10 = {C15, C14, C13, C12, C11, C10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0},
- LcCnt11 = {C15, C14, C13, C12, C11, D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0},
- LcCnt12 = {C15, C14, C13, C12, D11, D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0},
- LcCnt13 = {C15, C14, C13, D12, D11, D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0},
- LcCnt14 = {C15, C14, D13, D12, D11, D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0},
- LcCnt15 = {C15, D14, D13, D12, D11, D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0},
- LcCnt16 = {D15, D14, D13, D12, D11, D10, D9, D8, D7, D6, D5, D4, D3, D2, D1, D0}
- } lc_cnt_e;
-
- typedef logic [DecLcCountWidth-1:0] dec_lc_cnt_t;
-
-
///////////////////////////////////////
// Netlist Constants (Hashed Tokens) //
///////////////////////////////////////
diff --git a/hw/ip/lc_ctrl/rtl/lc_ctrl_signal_decode.sv b/hw/ip/lc_ctrl/rtl/lc_ctrl_signal_decode.sv
index fc036d7..6087d6d 100644
--- a/hw/ip/lc_ctrl/rtl/lc_ctrl_signal_decode.sv
+++ b/hw/ip/lc_ctrl/rtl/lc_ctrl_signal_decode.sv
@@ -6,6 +6,7 @@
module lc_ctrl_signal_decode
import lc_ctrl_pkg::*;
+ import lc_ctrl_state_pkg::*;
#(
// Random netlist constants
// SCRAP, RAW, TEST_LOCKED*, INVALID
diff --git a/hw/ip/lc_ctrl/rtl/lc_ctrl_state_decode.sv b/hw/ip/lc_ctrl/rtl/lc_ctrl_state_decode.sv
index 4a0c965..e6a3ae2 100644
--- a/hw/ip/lc_ctrl/rtl/lc_ctrl_state_decode.sv
+++ b/hw/ip/lc_ctrl/rtl/lc_ctrl_state_decode.sv
@@ -6,6 +6,7 @@
module lc_ctrl_state_decode
import lc_ctrl_pkg::*;
+ import lc_ctrl_state_pkg::*;
(
// Life cycle state vector.
input logic lc_state_valid_i,
diff --git a/hw/ip/lc_ctrl/rtl/lc_ctrl_state_transition.sv b/hw/ip/lc_ctrl/rtl/lc_ctrl_state_transition.sv
index a293171..b31773f 100644
--- a/hw/ip/lc_ctrl/rtl/lc_ctrl_state_transition.sv
+++ b/hw/ip/lc_ctrl/rtl/lc_ctrl_state_transition.sv
@@ -7,6 +7,7 @@
module lc_ctrl_state_transition
import lc_ctrl_pkg::*;
+ import lc_ctrl_state_pkg::*;
(
// Life cycle state vector.
input lc_state_e lc_state_i,
diff --git a/hw/ip/otp_ctrl/rtl/otp_ctrl.sv b/hw/ip/otp_ctrl/rtl/otp_ctrl.sv
index f8a3c4e..fd9823f 100644
--- a/hw/ip/otp_ctrl/rtl/otp_ctrl.sv
+++ b/hw/ip/otp_ctrl/rtl/otp_ctrl.sv
@@ -1008,8 +1008,8 @@
end else if (PartInfo[k].variant == LifeCycle) begin : gen_lifecycle
otp_ctrl_part_buf #(
.Info(PartInfo[k]),
- // By default all counter words are set and the life cycle state is scrapped.
- .DataDefault({lc_ctrl_pkg::LcCnt16, lc_ctrl_pkg::LcStScrap})
+ // TODO: set to a random netlist constant
+ .DataDefault('0)
) u_part_buf (
.clk_i,
.rst_ni,
@@ -1116,14 +1116,14 @@
// The device is personalized if the root key has been provisioned and locked
assign otp_lc_data_o.id_state = (part_digest[Secret2Idx] != '0) ?
- lc_ctrl_pkg::LcIdPersonalized :
- lc_ctrl_pkg::LcIdBlank;
+ lc_ctrl_state_pkg::LcIdPersonalized :
+ lc_ctrl_state_pkg::LcIdBlank;
// Lifecycle state
- assign otp_lc_data_o.state = lc_ctrl_pkg::lc_state_e'(part_buf_data[LcStateOffset +:
- LcStateSize]);
- assign otp_lc_data_o.count = lc_ctrl_pkg::lc_cnt_e'(part_buf_data[LcTransitionCntOffset +:
- LcTransitionCntSize]);
+ assign otp_lc_data_o.state = lc_ctrl_state_pkg::lc_state_e'(part_buf_data[LcStateOffset +:
+ LcStateSize]);
+ assign otp_lc_data_o.count = lc_ctrl_state_pkg::lc_cnt_e'(part_buf_data[LcTransitionCntOffset +:
+ LcTransitionCntSize]);
// Assert life cycle state valid signal only when all partitions have initialized.
assign otp_lc_data_o.valid = &part_init_done;
@@ -1146,11 +1146,11 @@
`ASSERT_INIT(FlashAddrKeySeedSize_A, FlashKeySeedWidth == FlashAddrKeySeedSize * 8)
`ASSERT_INIT(SramDataKeySeedSize_A, SramKeySeedWidth == SramDataKeySeedSize * 8)
- `ASSERT_INIT(RmaTokenSize_A, lc_ctrl_pkg::LcTokenWidth == RmaTokenSize * 8)
- `ASSERT_INIT(TestUnlockTokenSize_A, lc_ctrl_pkg::LcTokenWidth == TestUnlockTokenSize * 8)
- `ASSERT_INIT(TestExitTokenSize_A, lc_ctrl_pkg::LcTokenWidth == TestExitTokenSize * 8)
- `ASSERT_INIT(LcStateSize_A, lc_ctrl_pkg::LcStateWidth == LcStateSize * 8)
- `ASSERT_INIT(LcTransitionCntSize_A, lc_ctrl_pkg::LcCountWidth == LcTransitionCntSize * 8)
+ `ASSERT_INIT(RmaTokenSize_A, lc_ctrl_state_pkg::LcTokenWidth == RmaTokenSize * 8)
+ `ASSERT_INIT(TestUnlockTokenSize_A, lc_ctrl_state_pkg::LcTokenWidth == TestUnlockTokenSize * 8)
+ `ASSERT_INIT(TestExitTokenSize_A, lc_ctrl_state_pkg::LcTokenWidth == TestExitTokenSize * 8)
+ `ASSERT_INIT(LcStateSize_A, lc_ctrl_state_pkg::LcStateWidth == LcStateSize * 8)
+ `ASSERT_INIT(LcTransitionCntSize_A, lc_ctrl_state_pkg::LcCountWidth == LcTransitionCntSize * 8)
`ASSERT_KNOWN(OtpAstPwrSeqKnown_A, otp_ast_pwr_seq_o)
`ASSERT_KNOWN(TlOutKnown_A, tl_o)
diff --git a/hw/ip/otp_ctrl/rtl/otp_ctrl_lci.sv b/hw/ip/otp_ctrl/rtl/otp_ctrl_lci.sv
index b10794e..98a8177 100644
--- a/hw/ip/otp_ctrl/rtl/otp_ctrl_lci.sv
+++ b/hw/ip/otp_ctrl/rtl/otp_ctrl_lci.sv
@@ -27,8 +27,8 @@
// Note that a transition request will fail if the request attempts to
// clear already programmed bits within OTP.
input lc_req_i,
- input lc_ctrl_pkg::lc_state_e lc_state_i,
- input lc_ctrl_pkg::lc_cnt_e lc_count_i,
+ input lc_ctrl_state_pkg::lc_state_e lc_state_i,
+ input lc_ctrl_state_pkg::lc_cnt_e lc_count_i,
output logic lc_ack_o,
output logic lc_err_o,
// Output error state of partition, to be consumed by OTP error/alert logic.
@@ -58,7 +58,7 @@
localparam int CntWidth = vbits(NumLcOtpWords);
// This is required, since each native OTP word can only be programmed once.
- `ASSERT_INIT(LcValueMustBeWiderThanNativeOtpWidth_A, lc_ctrl_pkg::LcValueWidth >= OtpWidth)
+ `ASSERT_INIT(LcValueMustBeWiderThanNativeOtpWidth_A, lc_ctrl_state_pkg::LcValueWidth >= OtpWidth)
////////////////////
// Controller FSM //
diff --git a/hw/ip/otp_ctrl/rtl/otp_ctrl_pkg.sv b/hw/ip/otp_ctrl/rtl/otp_ctrl_pkg.sv
index 5b5d4ed..3408c84 100644
--- a/hw/ip/otp_ctrl/rtl/otp_ctrl_pkg.sv
+++ b/hw/ip/otp_ctrl/rtl/otp_ctrl_pkg.sv
@@ -90,33 +90,33 @@
///////////////////////////////
typedef struct packed {
- logic valid;
- logic error;
- lc_ctrl_pkg::lc_state_e state;
- lc_ctrl_pkg::lc_cnt_e count;
+ logic valid;
+ logic error;
+ lc_ctrl_state_pkg::lc_state_e state;
+ lc_ctrl_state_pkg::lc_cnt_e count;
// These are all hash post-images
- lc_ctrl_pkg::lc_token_t test_unlock_token;
- lc_ctrl_pkg::lc_token_t test_exit_token;
- lc_ctrl_pkg::lc_token_t rma_token;
- lc_ctrl_pkg::lc_id_state_e id_state;
+ lc_ctrl_state_pkg::lc_token_t test_unlock_token;
+ lc_ctrl_state_pkg::lc_token_t test_exit_token;
+ lc_ctrl_state_pkg::lc_token_t rma_token;
+ lc_ctrl_state_pkg::lc_id_state_e id_state;
} otp_lc_data_t;
// Default for dangling connection
parameter otp_lc_data_t OTP_LC_DATA_DEFAULT = '{
valid: 1'b1,
error: 1'b0,
- state: lc_ctrl_pkg::LcStRaw,
- count: lc_ctrl_pkg::LcCntRaw,
+ state: lc_ctrl_state_pkg::LcStRaw,
+ count: lc_ctrl_state_pkg::LcCntRaw,
test_unlock_token: '0,
test_exit_token: '0,
rma_token: '0,
- id_state: lc_ctrl_pkg::LcIdBlank
+ id_state: lc_ctrl_state_pkg::LcIdBlank
};
typedef struct packed {
logic req;
- lc_ctrl_pkg::lc_state_e state;
- lc_ctrl_pkg::lc_cnt_e count;
+ lc_ctrl_state_pkg::lc_state_e state;
+ lc_ctrl_state_pkg::lc_cnt_e count;
} lc_otp_program_req_t;
typedef struct packed {
@@ -127,12 +127,12 @@
// RAW unlock token hashing request.
typedef struct packed {
logic req;
- lc_ctrl_pkg::lc_token_t token_input;
+ lc_ctrl_state_pkg::lc_token_t token_input;
} lc_otp_token_req_t;
typedef struct packed {
logic ack;
- lc_ctrl_pkg::lc_token_t hashed_token;
+ lc_ctrl_state_pkg::lc_token_t hashed_token;
} lc_otp_token_rsp_t;
////////////////////////////////