blob: ca597f30e5337684eb3ccd6d92d8e3a28e3a8a5d [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;
////////////////////////////
// Typedefs for registers //
////////////////////////////
typedef struct packed {
logic [31:0] q;
logic qe;
} aes_reg2hw_key_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 q;
logic qe;
logic re;
} operation;
struct packed {
logic [3: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;
} manual_operation;
} aes_reg2hw_ctrl_shadowed_reg_t;
typedef struct packed {
struct packed {
logic q;
} start;
struct packed {
logic q;
} key_clear;
struct packed {
logic q;
} iv_clear;
struct packed {
logic q;
} data_in_clear;
struct packed {
logic q;
} data_out_clear;
struct packed {
logic q;
} prng_reseed;
} aes_reg2hw_trigger_reg_t;
typedef struct packed {
logic [31:0] d;
} aes_hw2reg_key_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 d;
} operation;
struct packed {
logic [3:0] d;
} mode;
struct packed {
logic [2:0] d;
} key_len;
struct packed {
logic d;
} manual_operation;
} aes_hw2reg_ctrl_shadowed_reg_t;
typedef struct packed {
struct packed {
logic d;
logic de;
} start;
struct packed {
logic d;
logic de;
} key_clear;
struct packed {
logic d;
logic de;
} iv_clear;
struct packed {
logic d;
logic de;
} 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_valid;
struct packed {
logic d;
logic de;
} input_ready;
} aes_hw2reg_status_reg_t;
///////////////////////////////////////
// Register to internal design logic //
///////////////////////////////////////
typedef struct packed {
aes_reg2hw_key_mreg_t [7:0] key; // [678:415]
aes_reg2hw_iv_mreg_t [3:0] iv; // [414:283]
aes_reg2hw_data_in_mreg_t [3:0] data_in; // [282:151]
aes_reg2hw_data_out_mreg_t [3:0] data_out; // [150:19]
aes_reg2hw_ctrl_shadowed_reg_t ctrl_shadowed; // [18:6]
aes_reg2hw_trigger_reg_t trigger; // [5:0]
} aes_reg2hw_t;
///////////////////////////////////////
// Internal design logic to register //
///////////////////////////////////////
typedef struct packed {
aes_hw2reg_key_mreg_t [7:0] key; // [672:417]
aes_hw2reg_iv_mreg_t [3:0] iv; // [416:289]
aes_hw2reg_data_in_mreg_t [3:0] data_in; // [288:157]
aes_hw2reg_data_out_mreg_t [3:0] data_out; // [156:29]
aes_hw2reg_ctrl_shadowed_reg_t ctrl_shadowed; // [28:16]
aes_hw2reg_trigger_reg_t trigger; // [15:10]
aes_hw2reg_status_reg_t status; // [9:10]
} aes_hw2reg_t;
// Register Address
parameter logic [6:0] AES_KEY0_OFFSET = 7'h 0;
parameter logic [6:0] AES_KEY1_OFFSET = 7'h 4;
parameter logic [6:0] AES_KEY2_OFFSET = 7'h 8;
parameter logic [6:0] AES_KEY3_OFFSET = 7'h c;
parameter logic [6:0] AES_KEY4_OFFSET = 7'h 10;
parameter logic [6:0] AES_KEY5_OFFSET = 7'h 14;
parameter logic [6:0] AES_KEY6_OFFSET = 7'h 18;
parameter logic [6:0] AES_KEY7_OFFSET = 7'h 1c;
parameter logic [6:0] AES_IV0_OFFSET = 7'h 20;
parameter logic [6:0] AES_IV1_OFFSET = 7'h 24;
parameter logic [6:0] AES_IV2_OFFSET = 7'h 28;
parameter logic [6:0] AES_IV3_OFFSET = 7'h 2c;
parameter logic [6:0] AES_DATA_IN0_OFFSET = 7'h 30;
parameter logic [6:0] AES_DATA_IN1_OFFSET = 7'h 34;
parameter logic [6:0] AES_DATA_IN2_OFFSET = 7'h 38;
parameter logic [6:0] AES_DATA_IN3_OFFSET = 7'h 3c;
parameter logic [6:0] AES_DATA_OUT0_OFFSET = 7'h 40;
parameter logic [6:0] AES_DATA_OUT1_OFFSET = 7'h 44;
parameter logic [6:0] AES_DATA_OUT2_OFFSET = 7'h 48;
parameter logic [6:0] AES_DATA_OUT3_OFFSET = 7'h 4c;
parameter logic [6:0] AES_CTRL_SHADOWED_OFFSET = 7'h 50;
parameter logic [6:0] AES_TRIGGER_OFFSET = 7'h 54;
parameter logic [6:0] AES_STATUS_OFFSET = 7'h 58;
// Register Index
typedef enum int {
AES_KEY0,
AES_KEY1,
AES_KEY2,
AES_KEY3,
AES_KEY4,
AES_KEY5,
AES_KEY6,
AES_KEY7,
AES_IV0,
AES_IV1,
AES_IV2,
AES_IV3,
AES_DATA_IN0,
AES_DATA_IN1,
AES_DATA_IN2,
AES_DATA_IN3,
AES_DATA_OUT0,
AES_DATA_OUT1,
AES_DATA_OUT2,
AES_DATA_OUT3,
AES_CTRL_SHADOWED,
AES_TRIGGER,
AES_STATUS
} aes_id_e;
// Register width information to check illegal writes
parameter logic [3:0] AES_PERMIT [23] = '{
4'b 1111, // index[ 0] AES_KEY0
4'b 1111, // index[ 1] AES_KEY1
4'b 1111, // index[ 2] AES_KEY2
4'b 1111, // index[ 3] AES_KEY3
4'b 1111, // index[ 4] AES_KEY4
4'b 1111, // index[ 5] AES_KEY5
4'b 1111, // index[ 6] AES_KEY6
4'b 1111, // index[ 7] AES_KEY7
4'b 1111, // index[ 8] AES_IV0
4'b 1111, // index[ 9] AES_IV1
4'b 1111, // index[10] AES_IV2
4'b 1111, // index[11] AES_IV3
4'b 1111, // index[12] AES_DATA_IN0
4'b 1111, // index[13] AES_DATA_IN1
4'b 1111, // index[14] AES_DATA_IN2
4'b 1111, // index[15] AES_DATA_IN3
4'b 1111, // index[16] AES_DATA_OUT0
4'b 1111, // index[17] AES_DATA_OUT1
4'b 1111, // index[18] AES_DATA_OUT2
4'b 1111, // index[19] AES_DATA_OUT3
4'b 0011, // index[20] AES_CTRL_SHADOWED
4'b 0001, // index[21] AES_TRIGGER
4'b 0001 // index[22] AES_STATUS
};
endpackage