blob: b60b7fa9246fc5437e6d88babe4fdec70f56fd85 [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
//
// Register Package auto-generated by `reggen` containing data structure
package aes_reg_pkg;
// Param list
parameter int NumRegsKey = 8;
parameter int NumRegsIv = 4;
parameter int NumRegsData = 4;
parameter int NumAlerts = 2;
// Address widths within the block
parameter int BlockAw = 8;
////////////////////////////
// Typedefs for registers //
////////////////////////////
typedef struct packed {
struct packed {
logic q;
logic qe;
} recov_ctrl_update_err;
struct packed {
logic q;
logic qe;
} fatal_fault;
} aes_reg2hw_alert_test_reg_t;
typedef struct packed {
logic [31:0] q;
logic qe;
} aes_reg2hw_key_share0_mreg_t;
typedef struct packed {
logic [31:0] q;
logic qe;
} aes_reg2hw_key_share1_mreg_t;
typedef struct packed {
logic [31:0] q;
logic qe;
} aes_reg2hw_iv_mreg_t;
typedef struct packed {
logic [31:0] q;
logic qe;
} aes_reg2hw_data_in_mreg_t;
typedef struct packed {
logic [31:0] q;
logic re;
} aes_reg2hw_data_out_mreg_t;
typedef struct packed {
struct packed {
logic [1:0] q;
logic qe;
logic re;
} operation;
struct packed {
logic [5:0] q;
logic qe;
logic re;
} mode;
struct packed {
logic [2:0] q;
logic qe;
logic re;
} key_len;
struct packed {
logic q;
logic qe;
logic re;
} sideload;
struct packed {
logic [2:0] q;
logic qe;
logic re;
} prng_reseed_rate;
struct packed {
logic q;
logic qe;
logic re;
} manual_operation;
struct packed {
logic q;
logic qe;
logic re;
} force_zero_masks;
} aes_reg2hw_ctrl_shadowed_reg_t;
typedef struct packed {
logic q;
} aes_reg2hw_ctrl_aux_shadowed_reg_t;
typedef struct packed {
struct packed {
logic q;
} start;
struct packed {
logic q;
} key_iv_data_in_clear;
struct packed {
logic q;
} data_out_clear;
struct packed {
logic q;
} prng_reseed;
} aes_reg2hw_trigger_reg_t;
typedef struct packed {
struct packed {
logic q;
} idle;
struct packed {
logic q;
} output_lost;
} aes_reg2hw_status_reg_t;
typedef struct packed {
logic [31:0] d;
} aes_hw2reg_key_share0_mreg_t;
typedef struct packed {
logic [31:0] d;
} aes_hw2reg_key_share1_mreg_t;
typedef struct packed {
logic [31:0] d;
} aes_hw2reg_iv_mreg_t;
typedef struct packed {
logic [31:0] d;
logic de;
} aes_hw2reg_data_in_mreg_t;
typedef struct packed {
logic [31:0] d;
} aes_hw2reg_data_out_mreg_t;
typedef struct packed {
struct packed {
logic [1:0] d;
} operation;
struct packed {
logic [5:0] d;
} mode;
struct packed {
logic [2:0] d;
} key_len;
struct packed {
logic d;
} sideload;
struct packed {
logic [2:0] d;
} prng_reseed_rate;
struct packed {
logic d;
} manual_operation;
struct packed {
logic d;
} force_zero_masks;
} aes_hw2reg_ctrl_shadowed_reg_t;
typedef struct packed {
struct packed {
logic d;
logic de;
} start;
struct packed {
logic d;
logic de;
} key_iv_data_in_clear;
struct packed {
logic d;
logic de;
} data_out_clear;
struct packed {
logic d;
logic de;
} prng_reseed;
} aes_hw2reg_trigger_reg_t;
typedef struct packed {
struct packed {
logic d;
logic de;
} idle;
struct packed {
logic d;
logic de;
} stall;
struct packed {
logic d;
logic de;
} output_lost;
struct packed {
logic d;
logic de;
} output_valid;
struct packed {
logic d;
logic de;
} input_ready;
struct packed {
logic d;
logic de;
} alert_recov_ctrl_update_err;
struct packed {
logic d;
logic de;
} alert_fatal_fault;
} aes_hw2reg_status_reg_t;
// Register -> HW type
typedef struct packed {
aes_reg2hw_alert_test_reg_t alert_test; // [958:955]
aes_reg2hw_key_share0_mreg_t [7:0] key_share0; // [954:691]
aes_reg2hw_key_share1_mreg_t [7:0] key_share1; // [690:427]
aes_reg2hw_iv_mreg_t [3:0] iv; // [426:295]
aes_reg2hw_data_in_mreg_t [3:0] data_in; // [294:163]
aes_reg2hw_data_out_mreg_t [3:0] data_out; // [162:31]
aes_reg2hw_ctrl_shadowed_reg_t ctrl_shadowed; // [30:7]
aes_reg2hw_ctrl_aux_shadowed_reg_t ctrl_aux_shadowed; // [6:6]
aes_reg2hw_trigger_reg_t trigger; // [5:2]
aes_reg2hw_status_reg_t status; // [1:0]
} aes_reg2hw_t;
// HW -> register type
typedef struct packed {
aes_hw2reg_key_share0_mreg_t [7:0] key_share0; // [938:683]
aes_hw2reg_key_share1_mreg_t [7:0] key_share1; // [682:427]
aes_hw2reg_iv_mreg_t [3:0] iv; // [426:299]
aes_hw2reg_data_in_mreg_t [3:0] data_in; // [298:167]
aes_hw2reg_data_out_mreg_t [3:0] data_out; // [166:39]
aes_hw2reg_ctrl_shadowed_reg_t ctrl_shadowed; // [38:22]
aes_hw2reg_trigger_reg_t trigger; // [21:14]
aes_hw2reg_status_reg_t status; // [13:0]
} aes_hw2reg_t;
// Register offsets
parameter logic [BlockAw-1:0] AES_ALERT_TEST_OFFSET = 8'h 0;
parameter logic [BlockAw-1:0] AES_KEY_SHARE0_0_OFFSET = 8'h 4;
parameter logic [BlockAw-1:0] AES_KEY_SHARE0_1_OFFSET = 8'h 8;
parameter logic [BlockAw-1:0] AES_KEY_SHARE0_2_OFFSET = 8'h c;
parameter logic [BlockAw-1:0] AES_KEY_SHARE0_3_OFFSET = 8'h 10;
parameter logic [BlockAw-1:0] AES_KEY_SHARE0_4_OFFSET = 8'h 14;
parameter logic [BlockAw-1:0] AES_KEY_SHARE0_5_OFFSET = 8'h 18;
parameter logic [BlockAw-1:0] AES_KEY_SHARE0_6_OFFSET = 8'h 1c;
parameter logic [BlockAw-1:0] AES_KEY_SHARE0_7_OFFSET = 8'h 20;
parameter logic [BlockAw-1:0] AES_KEY_SHARE1_0_OFFSET = 8'h 24;
parameter logic [BlockAw-1:0] AES_KEY_SHARE1_1_OFFSET = 8'h 28;
parameter logic [BlockAw-1:0] AES_KEY_SHARE1_2_OFFSET = 8'h 2c;
parameter logic [BlockAw-1:0] AES_KEY_SHARE1_3_OFFSET = 8'h 30;
parameter logic [BlockAw-1:0] AES_KEY_SHARE1_4_OFFSET = 8'h 34;
parameter logic [BlockAw-1:0] AES_KEY_SHARE1_5_OFFSET = 8'h 38;
parameter logic [BlockAw-1:0] AES_KEY_SHARE1_6_OFFSET = 8'h 3c;
parameter logic [BlockAw-1:0] AES_KEY_SHARE1_7_OFFSET = 8'h 40;
parameter logic [BlockAw-1:0] AES_IV_0_OFFSET = 8'h 44;
parameter logic [BlockAw-1:0] AES_IV_1_OFFSET = 8'h 48;
parameter logic [BlockAw-1:0] AES_IV_2_OFFSET = 8'h 4c;
parameter logic [BlockAw-1:0] AES_IV_3_OFFSET = 8'h 50;
parameter logic [BlockAw-1:0] AES_DATA_IN_0_OFFSET = 8'h 54;
parameter logic [BlockAw-1:0] AES_DATA_IN_1_OFFSET = 8'h 58;
parameter logic [BlockAw-1:0] AES_DATA_IN_2_OFFSET = 8'h 5c;
parameter logic [BlockAw-1:0] AES_DATA_IN_3_OFFSET = 8'h 60;
parameter logic [BlockAw-1:0] AES_DATA_OUT_0_OFFSET = 8'h 64;
parameter logic [BlockAw-1:0] AES_DATA_OUT_1_OFFSET = 8'h 68;
parameter logic [BlockAw-1:0] AES_DATA_OUT_2_OFFSET = 8'h 6c;
parameter logic [BlockAw-1:0] AES_DATA_OUT_3_OFFSET = 8'h 70;
parameter logic [BlockAw-1:0] AES_CTRL_SHADOWED_OFFSET = 8'h 74;
parameter logic [BlockAw-1:0] AES_CTRL_AUX_SHADOWED_OFFSET = 8'h 78;
parameter logic [BlockAw-1:0] AES_CTRL_AUX_REGWEN_OFFSET = 8'h 7c;
parameter logic [BlockAw-1:0] AES_TRIGGER_OFFSET = 8'h 80;
parameter logic [BlockAw-1:0] AES_STATUS_OFFSET = 8'h 84;
// Reset values for hwext registers and their fields
parameter logic [1:0] AES_ALERT_TEST_RESVAL = 2'h 0;
parameter logic [0:0] AES_ALERT_TEST_RECOV_CTRL_UPDATE_ERR_RESVAL = 1'h 0;
parameter logic [0:0] AES_ALERT_TEST_FATAL_FAULT_RESVAL = 1'h 0;
parameter logic [31:0] AES_KEY_SHARE0_0_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE0_0_KEY_SHARE0_0_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE0_1_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE0_1_KEY_SHARE0_1_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE0_2_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE0_2_KEY_SHARE0_2_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE0_3_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE0_3_KEY_SHARE0_3_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE0_4_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE0_4_KEY_SHARE0_4_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE0_5_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE0_5_KEY_SHARE0_5_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE0_6_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE0_6_KEY_SHARE0_6_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE0_7_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE0_7_KEY_SHARE0_7_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE1_0_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE1_0_KEY_SHARE1_0_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE1_1_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE1_1_KEY_SHARE1_1_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE1_2_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE1_2_KEY_SHARE1_2_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE1_3_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE1_3_KEY_SHARE1_3_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE1_4_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE1_4_KEY_SHARE1_4_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE1_5_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE1_5_KEY_SHARE1_5_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE1_6_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE1_6_KEY_SHARE1_6_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE1_7_RESVAL = 32'h 0;
parameter logic [31:0] AES_KEY_SHARE1_7_KEY_SHARE1_7_RESVAL = 32'h 0;
parameter logic [31:0] AES_IV_0_RESVAL = 32'h 0;
parameter logic [31:0] AES_IV_0_IV_0_RESVAL = 32'h 0;
parameter logic [31:0] AES_IV_1_RESVAL = 32'h 0;
parameter logic [31:0] AES_IV_1_IV_1_RESVAL = 32'h 0;
parameter logic [31:0] AES_IV_2_RESVAL = 32'h 0;
parameter logic [31:0] AES_IV_2_IV_2_RESVAL = 32'h 0;
parameter logic [31:0] AES_IV_3_RESVAL = 32'h 0;
parameter logic [31:0] AES_IV_3_IV_3_RESVAL = 32'h 0;
parameter logic [31:0] AES_DATA_OUT_0_RESVAL = 32'h 0;
parameter logic [31:0] AES_DATA_OUT_0_DATA_OUT_0_RESVAL = 32'h 0;
parameter logic [31:0] AES_DATA_OUT_1_RESVAL = 32'h 0;
parameter logic [31:0] AES_DATA_OUT_1_DATA_OUT_1_RESVAL = 32'h 0;
parameter logic [31:0] AES_DATA_OUT_2_RESVAL = 32'h 0;
parameter logic [31:0] AES_DATA_OUT_2_DATA_OUT_2_RESVAL = 32'h 0;
parameter logic [31:0] AES_DATA_OUT_3_RESVAL = 32'h 0;
parameter logic [31:0] AES_DATA_OUT_3_DATA_OUT_3_RESVAL = 32'h 0;
parameter logic [16:0] AES_CTRL_SHADOWED_RESVAL = 17'h 1181;
parameter logic [1:0] AES_CTRL_SHADOWED_OPERATION_RESVAL = 2'h 1;
parameter logic [5:0] AES_CTRL_SHADOWED_MODE_RESVAL = 6'h 20;
parameter logic [2:0] AES_CTRL_SHADOWED_KEY_LEN_RESVAL = 3'h 1;
parameter logic [0:0] AES_CTRL_SHADOWED_SIDELOAD_RESVAL = 1'h 0;
parameter logic [2:0] AES_CTRL_SHADOWED_PRNG_RESEED_RATE_RESVAL = 3'h 1;
parameter logic [0:0] AES_CTRL_SHADOWED_MANUAL_OPERATION_RESVAL = 1'h 0;
parameter logic [0:0] AES_CTRL_SHADOWED_FORCE_ZERO_MASKS_RESVAL = 1'h 0;
// Register index
typedef enum int {
AES_ALERT_TEST,
AES_KEY_SHARE0_0,
AES_KEY_SHARE0_1,
AES_KEY_SHARE0_2,
AES_KEY_SHARE0_3,
AES_KEY_SHARE0_4,
AES_KEY_SHARE0_5,
AES_KEY_SHARE0_6,
AES_KEY_SHARE0_7,
AES_KEY_SHARE1_0,
AES_KEY_SHARE1_1,
AES_KEY_SHARE1_2,
AES_KEY_SHARE1_3,
AES_KEY_SHARE1_4,
AES_KEY_SHARE1_5,
AES_KEY_SHARE1_6,
AES_KEY_SHARE1_7,
AES_IV_0,
AES_IV_1,
AES_IV_2,
AES_IV_3,
AES_DATA_IN_0,
AES_DATA_IN_1,
AES_DATA_IN_2,
AES_DATA_IN_3,
AES_DATA_OUT_0,
AES_DATA_OUT_1,
AES_DATA_OUT_2,
AES_DATA_OUT_3,
AES_CTRL_SHADOWED,
AES_CTRL_AUX_SHADOWED,
AES_CTRL_AUX_REGWEN,
AES_TRIGGER,
AES_STATUS
} aes_id_e;
// Register width information to check illegal writes
parameter logic [3:0] AES_PERMIT [34] = '{
4'b 0001, // index[ 0] AES_ALERT_TEST
4'b 1111, // index[ 1] AES_KEY_SHARE0_0
4'b 1111, // index[ 2] AES_KEY_SHARE0_1
4'b 1111, // index[ 3] AES_KEY_SHARE0_2
4'b 1111, // index[ 4] AES_KEY_SHARE0_3
4'b 1111, // index[ 5] AES_KEY_SHARE0_4
4'b 1111, // index[ 6] AES_KEY_SHARE0_5
4'b 1111, // index[ 7] AES_KEY_SHARE0_6
4'b 1111, // index[ 8] AES_KEY_SHARE0_7
4'b 1111, // index[ 9] AES_KEY_SHARE1_0
4'b 1111, // index[10] AES_KEY_SHARE1_1
4'b 1111, // index[11] AES_KEY_SHARE1_2
4'b 1111, // index[12] AES_KEY_SHARE1_3
4'b 1111, // index[13] AES_KEY_SHARE1_4
4'b 1111, // index[14] AES_KEY_SHARE1_5
4'b 1111, // index[15] AES_KEY_SHARE1_6
4'b 1111, // index[16] AES_KEY_SHARE1_7
4'b 1111, // index[17] AES_IV_0
4'b 1111, // index[18] AES_IV_1
4'b 1111, // index[19] AES_IV_2
4'b 1111, // index[20] AES_IV_3
4'b 1111, // index[21] AES_DATA_IN_0
4'b 1111, // index[22] AES_DATA_IN_1
4'b 1111, // index[23] AES_DATA_IN_2
4'b 1111, // index[24] AES_DATA_IN_3
4'b 1111, // index[25] AES_DATA_OUT_0
4'b 1111, // index[26] AES_DATA_OUT_1
4'b 1111, // index[27] AES_DATA_OUT_2
4'b 1111, // index[28] AES_DATA_OUT_3
4'b 0111, // index[29] AES_CTRL_SHADOWED
4'b 0001, // index[30] AES_CTRL_AUX_SHADOWED
4'b 0001, // index[31] AES_CTRL_AUX_REGWEN
4'b 0001, // index[32] AES_TRIGGER
4'b 0001 // index[33] AES_STATUS
};
endpackage