| // 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 uart_reg_pkg; | |
| // Param list | |
| parameter int NumAlerts = 1; | |
| // Address widths within the block | |
| parameter int BlockAw = 6; | |
| //////////////////////////// | |
| // Typedefs for registers // | |
| //////////////////////////// | |
| typedef struct packed { | |
| struct packed { | |
| logic q; | |
| } tx_watermark; | |
| struct packed { | |
| logic q; | |
| } rx_watermark; | |
| struct packed { | |
| logic q; | |
| } tx_empty; | |
| struct packed { | |
| logic q; | |
| } rx_overflow; | |
| struct packed { | |
| logic q; | |
| } rx_frame_err; | |
| struct packed { | |
| logic q; | |
| } rx_break_err; | |
| struct packed { | |
| logic q; | |
| } rx_timeout; | |
| struct packed { | |
| logic q; | |
| } rx_parity_err; | |
| } uart_reg2hw_intr_state_reg_t; | |
| typedef struct packed { | |
| struct packed { | |
| logic q; | |
| } tx_watermark; | |
| struct packed { | |
| logic q; | |
| } rx_watermark; | |
| struct packed { | |
| logic q; | |
| } tx_empty; | |
| struct packed { | |
| logic q; | |
| } rx_overflow; | |
| struct packed { | |
| logic q; | |
| } rx_frame_err; | |
| struct packed { | |
| logic q; | |
| } rx_break_err; | |
| struct packed { | |
| logic q; | |
| } rx_timeout; | |
| struct packed { | |
| logic q; | |
| } rx_parity_err; | |
| } uart_reg2hw_intr_enable_reg_t; | |
| typedef struct packed { | |
| struct packed { | |
| logic q; | |
| logic qe; | |
| } tx_watermark; | |
| struct packed { | |
| logic q; | |
| logic qe; | |
| } rx_watermark; | |
| struct packed { | |
| logic q; | |
| logic qe; | |
| } tx_empty; | |
| struct packed { | |
| logic q; | |
| logic qe; | |
| } rx_overflow; | |
| struct packed { | |
| logic q; | |
| logic qe; | |
| } rx_frame_err; | |
| struct packed { | |
| logic q; | |
| logic qe; | |
| } rx_break_err; | |
| struct packed { | |
| logic q; | |
| logic qe; | |
| } rx_timeout; | |
| struct packed { | |
| logic q; | |
| logic qe; | |
| } rx_parity_err; | |
| } uart_reg2hw_intr_test_reg_t; | |
| typedef struct packed { | |
| logic q; | |
| logic qe; | |
| } uart_reg2hw_alert_test_reg_t; | |
| typedef struct packed { | |
| struct packed { | |
| logic q; | |
| } tx; | |
| struct packed { | |
| logic q; | |
| } rx; | |
| struct packed { | |
| logic q; | |
| } nf; | |
| struct packed { | |
| logic q; | |
| } slpbk; | |
| struct packed { | |
| logic q; | |
| } llpbk; | |
| struct packed { | |
| logic q; | |
| } parity_en; | |
| struct packed { | |
| logic q; | |
| } parity_odd; | |
| struct packed { | |
| logic [1:0] q; | |
| } rxblvl; | |
| struct packed { | |
| logic [15:0] q; | |
| } nco; | |
| } uart_reg2hw_ctrl_reg_t; | |
| typedef struct packed { | |
| struct packed { | |
| logic q; | |
| logic re; | |
| } txfull; | |
| struct packed { | |
| logic q; | |
| logic re; | |
| } rxfull; | |
| struct packed { | |
| logic q; | |
| logic re; | |
| } txempty; | |
| struct packed { | |
| logic q; | |
| logic re; | |
| } txidle; | |
| struct packed { | |
| logic q; | |
| logic re; | |
| } rxidle; | |
| struct packed { | |
| logic q; | |
| logic re; | |
| } rxempty; | |
| } uart_reg2hw_status_reg_t; | |
| typedef struct packed { | |
| logic [7:0] q; | |
| logic re; | |
| } uart_reg2hw_rdata_reg_t; | |
| typedef struct packed { | |
| logic [7:0] q; | |
| logic qe; | |
| } uart_reg2hw_wdata_reg_t; | |
| typedef struct packed { | |
| struct packed { | |
| logic q; | |
| logic qe; | |
| } rxrst; | |
| struct packed { | |
| logic q; | |
| logic qe; | |
| } txrst; | |
| struct packed { | |
| logic [2:0] q; | |
| logic qe; | |
| } rxilvl; | |
| struct packed { | |
| logic [1:0] q; | |
| logic qe; | |
| } txilvl; | |
| } uart_reg2hw_fifo_ctrl_reg_t; | |
| typedef struct packed { | |
| struct packed { | |
| logic q; | |
| } txen; | |
| struct packed { | |
| logic q; | |
| } txval; | |
| } uart_reg2hw_ovrd_reg_t; | |
| typedef struct packed { | |
| struct packed { | |
| logic [23:0] q; | |
| } val; | |
| struct packed { | |
| logic q; | |
| } en; | |
| } uart_reg2hw_timeout_ctrl_reg_t; | |
| typedef struct packed { | |
| struct packed { | |
| logic d; | |
| logic de; | |
| } tx_watermark; | |
| struct packed { | |
| logic d; | |
| logic de; | |
| } rx_watermark; | |
| struct packed { | |
| logic d; | |
| logic de; | |
| } tx_empty; | |
| struct packed { | |
| logic d; | |
| logic de; | |
| } rx_overflow; | |
| struct packed { | |
| logic d; | |
| logic de; | |
| } rx_frame_err; | |
| struct packed { | |
| logic d; | |
| logic de; | |
| } rx_break_err; | |
| struct packed { | |
| logic d; | |
| logic de; | |
| } rx_timeout; | |
| struct packed { | |
| logic d; | |
| logic de; | |
| } rx_parity_err; | |
| } uart_hw2reg_intr_state_reg_t; | |
| typedef struct packed { | |
| struct packed { | |
| logic d; | |
| } txfull; | |
| struct packed { | |
| logic d; | |
| } rxfull; | |
| struct packed { | |
| logic d; | |
| } txempty; | |
| struct packed { | |
| logic d; | |
| } txidle; | |
| struct packed { | |
| logic d; | |
| } rxidle; | |
| struct packed { | |
| logic d; | |
| } rxempty; | |
| } uart_hw2reg_status_reg_t; | |
| typedef struct packed { | |
| logic [7:0] d; | |
| } uart_hw2reg_rdata_reg_t; | |
| typedef struct packed { | |
| struct packed { | |
| logic [2:0] d; | |
| logic de; | |
| } rxilvl; | |
| struct packed { | |
| logic [1:0] d; | |
| logic de; | |
| } txilvl; | |
| } uart_hw2reg_fifo_ctrl_reg_t; | |
| typedef struct packed { | |
| struct packed { | |
| logic [5:0] d; | |
| } txlvl; | |
| struct packed { | |
| logic [5:0] d; | |
| } rxlvl; | |
| } uart_hw2reg_fifo_status_reg_t; | |
| typedef struct packed { | |
| logic [15:0] d; | |
| } uart_hw2reg_val_reg_t; | |
| // Register -> HW type | |
| typedef struct packed { | |
| uart_reg2hw_intr_state_reg_t intr_state; // [126:119] | |
| uart_reg2hw_intr_enable_reg_t intr_enable; // [118:111] | |
| uart_reg2hw_intr_test_reg_t intr_test; // [110:95] | |
| uart_reg2hw_alert_test_reg_t alert_test; // [94:93] | |
| uart_reg2hw_ctrl_reg_t ctrl; // [92:68] | |
| uart_reg2hw_status_reg_t status; // [67:56] | |
| uart_reg2hw_rdata_reg_t rdata; // [55:47] | |
| uart_reg2hw_wdata_reg_t wdata; // [46:38] | |
| uart_reg2hw_fifo_ctrl_reg_t fifo_ctrl; // [37:27] | |
| uart_reg2hw_ovrd_reg_t ovrd; // [26:25] | |
| uart_reg2hw_timeout_ctrl_reg_t timeout_ctrl; // [24:0] | |
| } uart_reg2hw_t; | |
| // HW -> register type | |
| typedef struct packed { | |
| uart_hw2reg_intr_state_reg_t intr_state; // [64:49] | |
| uart_hw2reg_status_reg_t status; // [48:43] | |
| uart_hw2reg_rdata_reg_t rdata; // [42:35] | |
| uart_hw2reg_fifo_ctrl_reg_t fifo_ctrl; // [34:28] | |
| uart_hw2reg_fifo_status_reg_t fifo_status; // [27:16] | |
| uart_hw2reg_val_reg_t val; // [15:0] | |
| } uart_hw2reg_t; | |
| // Register offsets | |
| parameter logic [BlockAw-1:0] UART_INTR_STATE_OFFSET = 6'h 0; | |
| parameter logic [BlockAw-1:0] UART_INTR_ENABLE_OFFSET = 6'h 4; | |
| parameter logic [BlockAw-1:0] UART_INTR_TEST_OFFSET = 6'h 8; | |
| parameter logic [BlockAw-1:0] UART_ALERT_TEST_OFFSET = 6'h c; | |
| parameter logic [BlockAw-1:0] UART_CTRL_OFFSET = 6'h 10; | |
| parameter logic [BlockAw-1:0] UART_STATUS_OFFSET = 6'h 14; | |
| parameter logic [BlockAw-1:0] UART_RDATA_OFFSET = 6'h 18; | |
| parameter logic [BlockAw-1:0] UART_WDATA_OFFSET = 6'h 1c; | |
| parameter logic [BlockAw-1:0] UART_FIFO_CTRL_OFFSET = 6'h 20; | |
| parameter logic [BlockAw-1:0] UART_FIFO_STATUS_OFFSET = 6'h 24; | |
| parameter logic [BlockAw-1:0] UART_OVRD_OFFSET = 6'h 28; | |
| parameter logic [BlockAw-1:0] UART_VAL_OFFSET = 6'h 2c; | |
| parameter logic [BlockAw-1:0] UART_TIMEOUT_CTRL_OFFSET = 6'h 30; | |
| // Reset values for hwext registers and their fields | |
| parameter logic [7:0] UART_INTR_TEST_RESVAL = 8'h 0; | |
| parameter logic [0:0] UART_INTR_TEST_TX_WATERMARK_RESVAL = 1'h 0; | |
| parameter logic [0:0] UART_INTR_TEST_RX_WATERMARK_RESVAL = 1'h 0; | |
| parameter logic [0:0] UART_INTR_TEST_TX_EMPTY_RESVAL = 1'h 0; | |
| parameter logic [0:0] UART_INTR_TEST_RX_OVERFLOW_RESVAL = 1'h 0; | |
| parameter logic [0:0] UART_INTR_TEST_RX_FRAME_ERR_RESVAL = 1'h 0; | |
| parameter logic [0:0] UART_INTR_TEST_RX_BREAK_ERR_RESVAL = 1'h 0; | |
| parameter logic [0:0] UART_INTR_TEST_RX_TIMEOUT_RESVAL = 1'h 0; | |
| parameter logic [0:0] UART_INTR_TEST_RX_PARITY_ERR_RESVAL = 1'h 0; | |
| parameter logic [0:0] UART_ALERT_TEST_RESVAL = 1'h 0; | |
| parameter logic [0:0] UART_ALERT_TEST_FATAL_FAULT_RESVAL = 1'h 0; | |
| parameter logic [5:0] UART_STATUS_RESVAL = 6'h 3c; | |
| parameter logic [0:0] UART_STATUS_TXEMPTY_RESVAL = 1'h 1; | |
| parameter logic [0:0] UART_STATUS_TXIDLE_RESVAL = 1'h 1; | |
| parameter logic [0:0] UART_STATUS_RXIDLE_RESVAL = 1'h 1; | |
| parameter logic [0:0] UART_STATUS_RXEMPTY_RESVAL = 1'h 1; | |
| parameter logic [7:0] UART_RDATA_RESVAL = 8'h 0; | |
| parameter logic [21:0] UART_FIFO_STATUS_RESVAL = 22'h 0; | |
| parameter logic [15:0] UART_VAL_RESVAL = 16'h 0; | |
| // Register index | |
| typedef enum int { | |
| UART_INTR_STATE, | |
| UART_INTR_ENABLE, | |
| UART_INTR_TEST, | |
| UART_ALERT_TEST, | |
| UART_CTRL, | |
| UART_STATUS, | |
| UART_RDATA, | |
| UART_WDATA, | |
| UART_FIFO_CTRL, | |
| UART_FIFO_STATUS, | |
| UART_OVRD, | |
| UART_VAL, | |
| UART_TIMEOUT_CTRL | |
| } uart_id_e; | |
| // Register width information to check illegal writes | |
| parameter logic [3:0] UART_PERMIT [13] = '{ | |
| 4'b 0001, // index[ 0] UART_INTR_STATE | |
| 4'b 0001, // index[ 1] UART_INTR_ENABLE | |
| 4'b 0001, // index[ 2] UART_INTR_TEST | |
| 4'b 0001, // index[ 3] UART_ALERT_TEST | |
| 4'b 1111, // index[ 4] UART_CTRL | |
| 4'b 0001, // index[ 5] UART_STATUS | |
| 4'b 0001, // index[ 6] UART_RDATA | |
| 4'b 0001, // index[ 7] UART_WDATA | |
| 4'b 0001, // index[ 8] UART_FIFO_CTRL | |
| 4'b 0111, // index[ 9] UART_FIFO_STATUS | |
| 4'b 0001, // index[10] UART_OVRD | |
| 4'b 0011, // index[11] UART_VAL | |
| 4'b 1111 // index[12] UART_TIMEOUT_CTRL | |
| }; | |
| endpackage |