blob: cabcc2bdbbb0cfdaf1225e128250e5830355bb80 [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 gpio_reg_pkg;
// Param list
parameter int NumAlerts = 1;
// Address widths within the block
parameter int BlockAw = 6;
////////////////////////////
// Typedefs for registers //
////////////////////////////
typedef struct packed {
logic [31:0] q;
} gpio_reg2hw_intr_state_reg_t;
typedef struct packed {
logic [31:0] q;
} gpio_reg2hw_intr_enable_reg_t;
typedef struct packed {
logic [31:0] q;
logic qe;
} gpio_reg2hw_intr_test_reg_t;
typedef struct packed {
logic q;
logic qe;
} gpio_reg2hw_alert_test_reg_t;
typedef struct packed {
logic [31:0] q;
logic qe;
} gpio_reg2hw_direct_out_reg_t;
typedef struct packed {
struct packed {
logic [15:0] q;
logic qe;
} data;
struct packed {
logic [15:0] q;
logic qe;
} mask;
} gpio_reg2hw_masked_out_lower_reg_t;
typedef struct packed {
struct packed {
logic [15:0] q;
logic qe;
} data;
struct packed {
logic [15:0] q;
logic qe;
} mask;
} gpio_reg2hw_masked_out_upper_reg_t;
typedef struct packed {
logic [31:0] q;
logic qe;
} gpio_reg2hw_direct_oe_reg_t;
typedef struct packed {
struct packed {
logic [15:0] q;
logic qe;
} data;
struct packed {
logic [15:0] q;
logic qe;
} mask;
} gpio_reg2hw_masked_oe_lower_reg_t;
typedef struct packed {
struct packed {
logic [15:0] q;
logic qe;
} data;
struct packed {
logic [15:0] q;
logic qe;
} mask;
} gpio_reg2hw_masked_oe_upper_reg_t;
typedef struct packed {
logic [31:0] q;
} gpio_reg2hw_intr_ctrl_en_rising_reg_t;
typedef struct packed {
logic [31:0] q;
} gpio_reg2hw_intr_ctrl_en_falling_reg_t;
typedef struct packed {
logic [31:0] q;
} gpio_reg2hw_intr_ctrl_en_lvlhigh_reg_t;
typedef struct packed {
logic [31:0] q;
} gpio_reg2hw_intr_ctrl_en_lvllow_reg_t;
typedef struct packed {
logic [31:0] q;
} gpio_reg2hw_ctrl_en_input_filter_reg_t;
typedef struct packed {
logic [31:0] d;
logic de;
} gpio_hw2reg_intr_state_reg_t;
typedef struct packed {
logic [31:0] d;
logic de;
} gpio_hw2reg_data_in_reg_t;
typedef struct packed {
logic [31:0] d;
} gpio_hw2reg_direct_out_reg_t;
typedef struct packed {
struct packed {
logic [15:0] d;
} data;
struct packed {
logic [15:0] d;
} mask;
} gpio_hw2reg_masked_out_lower_reg_t;
typedef struct packed {
struct packed {
logic [15:0] d;
} data;
struct packed {
logic [15:0] d;
} mask;
} gpio_hw2reg_masked_out_upper_reg_t;
typedef struct packed {
logic [31:0] d;
} gpio_hw2reg_direct_oe_reg_t;
typedef struct packed {
struct packed {
logic [15:0] d;
} data;
struct packed {
logic [15:0] d;
} mask;
} gpio_hw2reg_masked_oe_lower_reg_t;
typedef struct packed {
struct packed {
logic [15:0] d;
} data;
struct packed {
logic [15:0] d;
} mask;
} gpio_hw2reg_masked_oe_upper_reg_t;
// Register -> HW type
typedef struct packed {
gpio_reg2hw_intr_state_reg_t intr_state; // [460:429]
gpio_reg2hw_intr_enable_reg_t intr_enable; // [428:397]
gpio_reg2hw_intr_test_reg_t intr_test; // [396:364]
gpio_reg2hw_alert_test_reg_t alert_test; // [363:362]
gpio_reg2hw_direct_out_reg_t direct_out; // [361:329]
gpio_reg2hw_masked_out_lower_reg_t masked_out_lower; // [328:295]
gpio_reg2hw_masked_out_upper_reg_t masked_out_upper; // [294:261]
gpio_reg2hw_direct_oe_reg_t direct_oe; // [260:228]
gpio_reg2hw_masked_oe_lower_reg_t masked_oe_lower; // [227:194]
gpio_reg2hw_masked_oe_upper_reg_t masked_oe_upper; // [193:160]
gpio_reg2hw_intr_ctrl_en_rising_reg_t intr_ctrl_en_rising; // [159:128]
gpio_reg2hw_intr_ctrl_en_falling_reg_t intr_ctrl_en_falling; // [127:96]
gpio_reg2hw_intr_ctrl_en_lvlhigh_reg_t intr_ctrl_en_lvlhigh; // [95:64]
gpio_reg2hw_intr_ctrl_en_lvllow_reg_t intr_ctrl_en_lvllow; // [63:32]
gpio_reg2hw_ctrl_en_input_filter_reg_t ctrl_en_input_filter; // [31:0]
} gpio_reg2hw_t;
// HW -> register type
typedef struct packed {
gpio_hw2reg_intr_state_reg_t intr_state; // [257:225]
gpio_hw2reg_data_in_reg_t data_in; // [224:192]
gpio_hw2reg_direct_out_reg_t direct_out; // [191:160]
gpio_hw2reg_masked_out_lower_reg_t masked_out_lower; // [159:128]
gpio_hw2reg_masked_out_upper_reg_t masked_out_upper; // [127:96]
gpio_hw2reg_direct_oe_reg_t direct_oe; // [95:64]
gpio_hw2reg_masked_oe_lower_reg_t masked_oe_lower; // [63:32]
gpio_hw2reg_masked_oe_upper_reg_t masked_oe_upper; // [31:0]
} gpio_hw2reg_t;
// Register offsets
parameter logic [BlockAw-1:0] GPIO_INTR_STATE_OFFSET = 6'h 0;
parameter logic [BlockAw-1:0] GPIO_INTR_ENABLE_OFFSET = 6'h 4;
parameter logic [BlockAw-1:0] GPIO_INTR_TEST_OFFSET = 6'h 8;
parameter logic [BlockAw-1:0] GPIO_ALERT_TEST_OFFSET = 6'h c;
parameter logic [BlockAw-1:0] GPIO_DATA_IN_OFFSET = 6'h 10;
parameter logic [BlockAw-1:0] GPIO_DIRECT_OUT_OFFSET = 6'h 14;
parameter logic [BlockAw-1:0] GPIO_MASKED_OUT_LOWER_OFFSET = 6'h 18;
parameter logic [BlockAw-1:0] GPIO_MASKED_OUT_UPPER_OFFSET = 6'h 1c;
parameter logic [BlockAw-1:0] GPIO_DIRECT_OE_OFFSET = 6'h 20;
parameter logic [BlockAw-1:0] GPIO_MASKED_OE_LOWER_OFFSET = 6'h 24;
parameter logic [BlockAw-1:0] GPIO_MASKED_OE_UPPER_OFFSET = 6'h 28;
parameter logic [BlockAw-1:0] GPIO_INTR_CTRL_EN_RISING_OFFSET = 6'h 2c;
parameter logic [BlockAw-1:0] GPIO_INTR_CTRL_EN_FALLING_OFFSET = 6'h 30;
parameter logic [BlockAw-1:0] GPIO_INTR_CTRL_EN_LVLHIGH_OFFSET = 6'h 34;
parameter logic [BlockAw-1:0] GPIO_INTR_CTRL_EN_LVLLOW_OFFSET = 6'h 38;
parameter logic [BlockAw-1:0] GPIO_CTRL_EN_INPUT_FILTER_OFFSET = 6'h 3c;
// Reset values for hwext registers and their fields
parameter logic [31:0] GPIO_INTR_TEST_RESVAL = 32'h 0;
parameter logic [31:0] GPIO_INTR_TEST_GPIO_RESVAL = 32'h 0;
parameter logic [0:0] GPIO_ALERT_TEST_RESVAL = 1'h 0;
parameter logic [0:0] GPIO_ALERT_TEST_FATAL_FAULT_RESVAL = 1'h 0;
parameter logic [31:0] GPIO_DIRECT_OUT_RESVAL = 32'h 0;
parameter logic [31:0] GPIO_MASKED_OUT_LOWER_RESVAL = 32'h 0;
parameter logic [31:0] GPIO_MASKED_OUT_UPPER_RESVAL = 32'h 0;
parameter logic [31:0] GPIO_DIRECT_OE_RESVAL = 32'h 0;
parameter logic [31:0] GPIO_MASKED_OE_LOWER_RESVAL = 32'h 0;
parameter logic [31:0] GPIO_MASKED_OE_UPPER_RESVAL = 32'h 0;
// Register index
typedef enum int {
GPIO_INTR_STATE,
GPIO_INTR_ENABLE,
GPIO_INTR_TEST,
GPIO_ALERT_TEST,
GPIO_DATA_IN,
GPIO_DIRECT_OUT,
GPIO_MASKED_OUT_LOWER,
GPIO_MASKED_OUT_UPPER,
GPIO_DIRECT_OE,
GPIO_MASKED_OE_LOWER,
GPIO_MASKED_OE_UPPER,
GPIO_INTR_CTRL_EN_RISING,
GPIO_INTR_CTRL_EN_FALLING,
GPIO_INTR_CTRL_EN_LVLHIGH,
GPIO_INTR_CTRL_EN_LVLLOW,
GPIO_CTRL_EN_INPUT_FILTER
} gpio_id_e;
// Register width information to check illegal writes
parameter logic [3:0] GPIO_PERMIT [16] = '{
4'b 1111, // index[ 0] GPIO_INTR_STATE
4'b 1111, // index[ 1] GPIO_INTR_ENABLE
4'b 1111, // index[ 2] GPIO_INTR_TEST
4'b 0001, // index[ 3] GPIO_ALERT_TEST
4'b 1111, // index[ 4] GPIO_DATA_IN
4'b 1111, // index[ 5] GPIO_DIRECT_OUT
4'b 1111, // index[ 6] GPIO_MASKED_OUT_LOWER
4'b 1111, // index[ 7] GPIO_MASKED_OUT_UPPER
4'b 1111, // index[ 8] GPIO_DIRECT_OE
4'b 1111, // index[ 9] GPIO_MASKED_OE_LOWER
4'b 1111, // index[10] GPIO_MASKED_OE_UPPER
4'b 1111, // index[11] GPIO_INTR_CTRL_EN_RISING
4'b 1111, // index[12] GPIO_INTR_CTRL_EN_FALLING
4'b 1111, // index[13] GPIO_INTR_CTRL_EN_LVLHIGH
4'b 1111, // index[14] GPIO_INTR_CTRL_EN_LVLLOW
4'b 1111 // index[15] GPIO_CTRL_EN_INPUT_FILTER
};
endpackage