| // 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 pattgen_reg_pkg; |
| |
| // Param list |
| parameter int NumRegsData = 2; |
| parameter int NumAlerts = 1; |
| |
| // Address widths within the block |
| parameter int BlockAw = 6; |
| |
| //////////////////////////// |
| // Typedefs for registers // |
| //////////////////////////// |
| |
| typedef struct packed { |
| struct packed { |
| logic q; |
| } done_ch0; |
| struct packed { |
| logic q; |
| } done_ch1; |
| } pattgen_reg2hw_intr_state_reg_t; |
| |
| typedef struct packed { |
| struct packed { |
| logic q; |
| } done_ch0; |
| struct packed { |
| logic q; |
| } done_ch1; |
| } pattgen_reg2hw_intr_enable_reg_t; |
| |
| typedef struct packed { |
| struct packed { |
| logic q; |
| logic qe; |
| } done_ch0; |
| struct packed { |
| logic q; |
| logic qe; |
| } done_ch1; |
| } pattgen_reg2hw_intr_test_reg_t; |
| |
| typedef struct packed { |
| logic q; |
| logic qe; |
| } pattgen_reg2hw_alert_test_reg_t; |
| |
| typedef struct packed { |
| struct packed { |
| logic q; |
| } enable_ch0; |
| struct packed { |
| logic q; |
| } enable_ch1; |
| struct packed { |
| logic q; |
| } polarity_ch0; |
| struct packed { |
| logic q; |
| } polarity_ch1; |
| } pattgen_reg2hw_ctrl_reg_t; |
| |
| typedef struct packed { |
| logic [31:0] q; |
| } pattgen_reg2hw_prediv_ch0_reg_t; |
| |
| typedef struct packed { |
| logic [31:0] q; |
| } pattgen_reg2hw_prediv_ch1_reg_t; |
| |
| typedef struct packed { |
| logic [31:0] q; |
| } pattgen_reg2hw_data_ch0_mreg_t; |
| |
| typedef struct packed { |
| logic [31:0] q; |
| } pattgen_reg2hw_data_ch1_mreg_t; |
| |
| typedef struct packed { |
| struct packed { |
| logic [5:0] q; |
| } len_ch0; |
| struct packed { |
| logic [9:0] q; |
| } reps_ch0; |
| struct packed { |
| logic [5:0] q; |
| } len_ch1; |
| struct packed { |
| logic [9:0] q; |
| } reps_ch1; |
| } pattgen_reg2hw_size_reg_t; |
| |
| typedef struct packed { |
| struct packed { |
| logic d; |
| logic de; |
| } done_ch0; |
| struct packed { |
| logic d; |
| logic de; |
| } done_ch1; |
| } pattgen_hw2reg_intr_state_reg_t; |
| |
| // Register -> HW type |
| typedef struct packed { |
| pattgen_reg2hw_intr_state_reg_t intr_state; // [237:236] |
| pattgen_reg2hw_intr_enable_reg_t intr_enable; // [235:234] |
| pattgen_reg2hw_intr_test_reg_t intr_test; // [233:230] |
| pattgen_reg2hw_alert_test_reg_t alert_test; // [229:228] |
| pattgen_reg2hw_ctrl_reg_t ctrl; // [227:224] |
| pattgen_reg2hw_prediv_ch0_reg_t prediv_ch0; // [223:192] |
| pattgen_reg2hw_prediv_ch1_reg_t prediv_ch1; // [191:160] |
| pattgen_reg2hw_data_ch0_mreg_t [1:0] data_ch0; // [159:96] |
| pattgen_reg2hw_data_ch1_mreg_t [1:0] data_ch1; // [95:32] |
| pattgen_reg2hw_size_reg_t size; // [31:0] |
| } pattgen_reg2hw_t; |
| |
| // HW -> register type |
| typedef struct packed { |
| pattgen_hw2reg_intr_state_reg_t intr_state; // [3:0] |
| } pattgen_hw2reg_t; |
| |
| // Register offsets |
| parameter logic [BlockAw-1:0] PATTGEN_INTR_STATE_OFFSET = 6'h 0; |
| parameter logic [BlockAw-1:0] PATTGEN_INTR_ENABLE_OFFSET = 6'h 4; |
| parameter logic [BlockAw-1:0] PATTGEN_INTR_TEST_OFFSET = 6'h 8; |
| parameter logic [BlockAw-1:0] PATTGEN_ALERT_TEST_OFFSET = 6'h c; |
| parameter logic [BlockAw-1:0] PATTGEN_CTRL_OFFSET = 6'h 10; |
| parameter logic [BlockAw-1:0] PATTGEN_PREDIV_CH0_OFFSET = 6'h 14; |
| parameter logic [BlockAw-1:0] PATTGEN_PREDIV_CH1_OFFSET = 6'h 18; |
| parameter logic [BlockAw-1:0] PATTGEN_DATA_CH0_0_OFFSET = 6'h 1c; |
| parameter logic [BlockAw-1:0] PATTGEN_DATA_CH0_1_OFFSET = 6'h 20; |
| parameter logic [BlockAw-1:0] PATTGEN_DATA_CH1_0_OFFSET = 6'h 24; |
| parameter logic [BlockAw-1:0] PATTGEN_DATA_CH1_1_OFFSET = 6'h 28; |
| parameter logic [BlockAw-1:0] PATTGEN_SIZE_OFFSET = 6'h 2c; |
| |
| // Reset values for hwext registers and their fields |
| parameter logic [1:0] PATTGEN_INTR_TEST_RESVAL = 2'h 0; |
| parameter logic [0:0] PATTGEN_INTR_TEST_DONE_CH0_RESVAL = 1'h 0; |
| parameter logic [0:0] PATTGEN_INTR_TEST_DONE_CH1_RESVAL = 1'h 0; |
| parameter logic [0:0] PATTGEN_ALERT_TEST_RESVAL = 1'h 0; |
| parameter logic [0:0] PATTGEN_ALERT_TEST_FATAL_FAULT_RESVAL = 1'h 0; |
| |
| // Register index |
| typedef enum int { |
| PATTGEN_INTR_STATE, |
| PATTGEN_INTR_ENABLE, |
| PATTGEN_INTR_TEST, |
| PATTGEN_ALERT_TEST, |
| PATTGEN_CTRL, |
| PATTGEN_PREDIV_CH0, |
| PATTGEN_PREDIV_CH1, |
| PATTGEN_DATA_CH0_0, |
| PATTGEN_DATA_CH0_1, |
| PATTGEN_DATA_CH1_0, |
| PATTGEN_DATA_CH1_1, |
| PATTGEN_SIZE |
| } pattgen_id_e; |
| |
| // Register width information to check illegal writes |
| parameter logic [3:0] PATTGEN_PERMIT [12] = '{ |
| 4'b 0001, // index[ 0] PATTGEN_INTR_STATE |
| 4'b 0001, // index[ 1] PATTGEN_INTR_ENABLE |
| 4'b 0001, // index[ 2] PATTGEN_INTR_TEST |
| 4'b 0001, // index[ 3] PATTGEN_ALERT_TEST |
| 4'b 0001, // index[ 4] PATTGEN_CTRL |
| 4'b 1111, // index[ 5] PATTGEN_PREDIV_CH0 |
| 4'b 1111, // index[ 6] PATTGEN_PREDIV_CH1 |
| 4'b 1111, // index[ 7] PATTGEN_DATA_CH0_0 |
| 4'b 1111, // index[ 8] PATTGEN_DATA_CH0_1 |
| 4'b 1111, // index[ 9] PATTGEN_DATA_CH1_0 |
| 4'b 1111, // index[10] PATTGEN_DATA_CH1_1 |
| 4'b 1111 // index[11] PATTGEN_SIZE |
| }; |
| |
| endpackage |