[clkmgr] Combined shadow error registers into a single field
- Fixes #11450
- This is not technically a bug fix, but eases DV automation
Signed-off-by: Timothy Chen <timothytim@google.com>
diff --git a/hw/ip/clkmgr/data/clkmgr.hjson.tpl b/hw/ip/clkmgr/data/clkmgr.hjson.tpl
index da48e3f..71edb4a 100644
--- a/hw/ip/clkmgr/data/clkmgr.hjson.tpl
+++ b/hw/ip/clkmgr/data/clkmgr.hjson.tpl
@@ -474,9 +474,16 @@
swaccess: "rw1c",
hwaccess: "hwo",
fields: [
+ { bits: "0",
+ name: "SHADOW_UPDATE_ERR",
+ resval: 0
+ desc: '''
+ One of the shadow registers encountered an update error.
+ '''
+ },
% for src in typed_clocks.rg_srcs:
{
- bits: "${loop.index}",
+ bits: "${loop.index+1}",
name: "${src.upper()}_MEASURE_ERR",
resval: 0,
desc: '''
@@ -486,7 +493,7 @@
% endfor
% for src in typed_clocks.rg_srcs:
{
- bits: "${loop.index + len(typed_clocks.rg_srcs)}",
+ bits: "${loop.index + len(typed_clocks.rg_srcs)+1}",
name: "${src.upper()}_TIMEOUT_ERR",
resval: 0,
desc: '''
@@ -494,16 +501,6 @@
'''
}
% endfor
-% for src in typed_clocks.rg_srcs:
- {
- bits: "${loop.index + 2*len(typed_clocks.rg_srcs)}",
- name: "${src.upper()}_UPDATE_ERR",
- resval: 0,
- desc: '''
- !!${src.upper()}_MEASURE_CTRL_SHADOWED has an update error.
- '''
- }
-% endfor
]
},
@@ -526,16 +523,13 @@
One of the idle counts encountered a duplicate error.
'''
},
-% for src in typed_clocks.rg_srcs:
- {
- bits: "${loop.index + 2}",
- name: "${src.upper()}_STORAGE_ERR",
- resval: 0,
+ { bits: "2",
+ name: "SHADOW_STORAGE_ERR",
+ resval: 0
desc: '''
- !!${src.upper()}_MEASURE_CTRL_SHADOWED has a storage error.
+ One of the shadow registers encountered a storage error.
'''
},
-% endfor
]
},
]
diff --git a/hw/ip/clkmgr/data/clkmgr.sv.tpl b/hw/ip/clkmgr/data/clkmgr.sv.tpl
index c9e0349..05a50b8 100644
--- a/hw/ip/clkmgr/data/clkmgr.sv.tpl
+++ b/hw/ip/clkmgr/data/clkmgr.sv.tpl
@@ -187,10 +187,10 @@
logic recov_alert;
assign recov_alert =
% for src in typed_clocks.rg_srcs:
- hw2reg.recov_err_code.${src}_update_err.de |
hw2reg.recov_err_code.${src}_measure_err.de |
- hw2reg.recov_err_code.${src}_timeout_err.de${";" if loop.last else " |"}
+ hw2reg.recov_err_code.${src}_timeout_err.de |
% endfor
+ hw2reg.recov_err_code.shadow_update_err.de;
assign alerts = {
|reg2hw.fatal_err_code,
@@ -307,6 +307,13 @@
// SEC_CM: TIMEOUT.CLK.BKGN_CHK, MEAS.CLK.BKGN_CHK
////////////////////////////////////////////////////
+ logic [${len(typed_clocks.rg_srcs)-1}:0] shadow_update_errs;
+ logic [${len(typed_clocks.rg_srcs)-1}:0] shadow_storage_errs;
+ assign hw2reg.recov_err_code.shadow_update_err.d = 1'b1;
+ assign hw2reg.recov_err_code.shadow_update_err.de = |shadow_update_errs;
+ assign hw2reg.fatal_err_code.shadow_storage_err.d = 1'b1;
+ assign hw2reg.fatal_err_code.shadow_storage_err.de = |shadow_storage_errs;
+
<% aon_freq = clocks.all_srcs['aon'].freq %>\
% for src in typed_clocks.rg_srcs:
logic ${src}_fast_err;
@@ -364,13 +371,11 @@
assign hw2reg.recov_err_code.${src}_measure_err.de = synced_${src}_err;
assign hw2reg.recov_err_code.${src}_timeout_err.d = 1'b1;
assign hw2reg.recov_err_code.${src}_timeout_err.de = synced_${src}_timeout_err;
- assign hw2reg.recov_err_code.${src}_update_err.d = 1'b1;
- assign hw2reg.recov_err_code.${src}_update_err.de =
+ assign shadow_update_errs[${loop.index}] =
reg2hw.${src}_meas_ctrl_shadowed.en.err_update |
reg2hw.${src}_meas_ctrl_shadowed.hi.err_update |
reg2hw.${src}_meas_ctrl_shadowed.lo.err_update;
- assign hw2reg.fatal_err_code.${src}_storage_err.d = 1'b1;
- assign hw2reg.fatal_err_code.${src}_storage_err.de =
+ assign shadow_storage_errs[${loop.index}] =
reg2hw.${src}_meas_ctrl_shadowed.en.err_storage |
reg2hw.${src}_meas_ctrl_shadowed.hi.err_storage |
reg2hw.${src}_meas_ctrl_shadowed.lo.err_storage;
diff --git a/hw/top_earlgrey/ip/clkmgr/data/autogen/clkmgr.hjson b/hw/top_earlgrey/ip/clkmgr/data/autogen/clkmgr.hjson
index 1ad8f7f..12eeed6 100644
--- a/hw/top_earlgrey/ip/clkmgr/data/autogen/clkmgr.hjson
+++ b/hw/top_earlgrey/ip/clkmgr/data/autogen/clkmgr.hjson
@@ -709,8 +709,15 @@
swaccess: "rw1c",
hwaccess: "hwo",
fields: [
+ { bits: "0",
+ name: "SHADOW_UPDATE_ERR",
+ resval: 0
+ desc: '''
+ One of the shadow registers encountered an update error.
+ '''
+ },
{
- bits: "0",
+ bits: "1",
name: "IO_MEASURE_ERR",
resval: 0,
desc: '''
@@ -718,7 +725,7 @@
'''
},
{
- bits: "1",
+ bits: "2",
name: "IO_DIV2_MEASURE_ERR",
resval: 0,
desc: '''
@@ -726,7 +733,7 @@
'''
},
{
- bits: "2",
+ bits: "3",
name: "IO_DIV4_MEASURE_ERR",
resval: 0,
desc: '''
@@ -734,7 +741,7 @@
'''
},
{
- bits: "3",
+ bits: "4",
name: "MAIN_MEASURE_ERR",
resval: 0,
desc: '''
@@ -742,7 +749,7 @@
'''
},
{
- bits: "4",
+ bits: "5",
name: "USB_MEASURE_ERR",
resval: 0,
desc: '''
@@ -750,7 +757,7 @@
'''
},
{
- bits: "5",
+ bits: "6",
name: "IO_TIMEOUT_ERR",
resval: 0,
desc: '''
@@ -758,7 +765,7 @@
'''
}
{
- bits: "6",
+ bits: "7",
name: "IO_DIV2_TIMEOUT_ERR",
resval: 0,
desc: '''
@@ -766,7 +773,7 @@
'''
}
{
- bits: "7",
+ bits: "8",
name: "IO_DIV4_TIMEOUT_ERR",
resval: 0,
desc: '''
@@ -774,7 +781,7 @@
'''
}
{
- bits: "8",
+ bits: "9",
name: "MAIN_TIMEOUT_ERR",
resval: 0,
desc: '''
@@ -782,53 +789,13 @@
'''
}
{
- bits: "9",
+ bits: "10",
name: "USB_TIMEOUT_ERR",
resval: 0,
desc: '''
usb has timed out.
'''
}
- {
- bits: "10",
- name: "IO_UPDATE_ERR",
- resval: 0,
- desc: '''
- !!IO_MEASURE_CTRL_SHADOWED has an update error.
- '''
- }
- {
- bits: "11",
- name: "IO_DIV2_UPDATE_ERR",
- resval: 0,
- desc: '''
- !!IO_DIV2_MEASURE_CTRL_SHADOWED has an update error.
- '''
- }
- {
- bits: "12",
- name: "IO_DIV4_UPDATE_ERR",
- resval: 0,
- desc: '''
- !!IO_DIV4_MEASURE_CTRL_SHADOWED has an update error.
- '''
- }
- {
- bits: "13",
- name: "MAIN_UPDATE_ERR",
- resval: 0,
- desc: '''
- !!MAIN_MEASURE_CTRL_SHADOWED has an update error.
- '''
- }
- {
- bits: "14",
- name: "USB_UPDATE_ERR",
- resval: 0,
- desc: '''
- !!USB_MEASURE_CTRL_SHADOWED has an update error.
- '''
- }
]
},
@@ -851,44 +818,11 @@
One of the idle counts encountered a duplicate error.
'''
},
- {
- bits: "2",
- name: "IO_STORAGE_ERR",
- resval: 0,
+ { bits: "2",
+ name: "SHADOW_STORAGE_ERR",
+ resval: 0
desc: '''
- !!IO_MEASURE_CTRL_SHADOWED has a storage error.
- '''
- },
- {
- bits: "3",
- name: "IO_DIV2_STORAGE_ERR",
- resval: 0,
- desc: '''
- !!IO_DIV2_MEASURE_CTRL_SHADOWED has a storage error.
- '''
- },
- {
- bits: "4",
- name: "IO_DIV4_STORAGE_ERR",
- resval: 0,
- desc: '''
- !!IO_DIV4_MEASURE_CTRL_SHADOWED has a storage error.
- '''
- },
- {
- bits: "5",
- name: "MAIN_STORAGE_ERR",
- resval: 0,
- desc: '''
- !!MAIN_MEASURE_CTRL_SHADOWED has a storage error.
- '''
- },
- {
- bits: "6",
- name: "USB_STORAGE_ERR",
- resval: 0,
- desc: '''
- !!USB_MEASURE_CTRL_SHADOWED has a storage error.
+ One of the shadow registers encountered a storage error.
'''
},
]
diff --git a/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr.sv b/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr.sv
index 6f03363..f549ca7 100644
--- a/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr.sv
+++ b/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr.sv
@@ -213,21 +213,17 @@
logic recov_alert;
assign recov_alert =
- hw2reg.recov_err_code.io_update_err.de |
hw2reg.recov_err_code.io_measure_err.de |
hw2reg.recov_err_code.io_timeout_err.de |
- hw2reg.recov_err_code.io_div2_update_err.de |
hw2reg.recov_err_code.io_div2_measure_err.de |
hw2reg.recov_err_code.io_div2_timeout_err.de |
- hw2reg.recov_err_code.io_div4_update_err.de |
hw2reg.recov_err_code.io_div4_measure_err.de |
hw2reg.recov_err_code.io_div4_timeout_err.de |
- hw2reg.recov_err_code.main_update_err.de |
hw2reg.recov_err_code.main_measure_err.de |
hw2reg.recov_err_code.main_timeout_err.de |
- hw2reg.recov_err_code.usb_update_err.de |
hw2reg.recov_err_code.usb_measure_err.de |
- hw2reg.recov_err_code.usb_timeout_err.de;
+ hw2reg.recov_err_code.usb_timeout_err.de |
+ hw2reg.recov_err_code.shadow_update_err.de;
assign alerts = {
|reg2hw.fatal_err_code,
@@ -481,6 +477,13 @@
// SEC_CM: TIMEOUT.CLK.BKGN_CHK, MEAS.CLK.BKGN_CHK
////////////////////////////////////////////////////
+ logic [4:0] shadow_update_errs;
+ logic [4:0] shadow_storage_errs;
+ assign hw2reg.recov_err_code.shadow_update_err.d = 1'b1;
+ assign hw2reg.recov_err_code.shadow_update_err.de = |shadow_update_errs;
+ assign hw2reg.fatal_err_code.shadow_storage_err.d = 1'b1;
+ assign hw2reg.fatal_err_code.shadow_storage_err.de = |shadow_storage_errs;
+
logic io_fast_err;
logic io_slow_err;
logic io_timeout_err;
@@ -532,13 +535,11 @@
assign hw2reg.recov_err_code.io_measure_err.de = synced_io_err;
assign hw2reg.recov_err_code.io_timeout_err.d = 1'b1;
assign hw2reg.recov_err_code.io_timeout_err.de = synced_io_timeout_err;
- assign hw2reg.recov_err_code.io_update_err.d = 1'b1;
- assign hw2reg.recov_err_code.io_update_err.de =
+ assign shadow_update_errs[0] =
reg2hw.io_meas_ctrl_shadowed.en.err_update |
reg2hw.io_meas_ctrl_shadowed.hi.err_update |
reg2hw.io_meas_ctrl_shadowed.lo.err_update;
- assign hw2reg.fatal_err_code.io_storage_err.d = 1'b1;
- assign hw2reg.fatal_err_code.io_storage_err.de =
+ assign shadow_storage_errs[0] =
reg2hw.io_meas_ctrl_shadowed.en.err_storage |
reg2hw.io_meas_ctrl_shadowed.hi.err_storage |
reg2hw.io_meas_ctrl_shadowed.lo.err_storage;
@@ -594,13 +595,11 @@
assign hw2reg.recov_err_code.io_div2_measure_err.de = synced_io_div2_err;
assign hw2reg.recov_err_code.io_div2_timeout_err.d = 1'b1;
assign hw2reg.recov_err_code.io_div2_timeout_err.de = synced_io_div2_timeout_err;
- assign hw2reg.recov_err_code.io_div2_update_err.d = 1'b1;
- assign hw2reg.recov_err_code.io_div2_update_err.de =
+ assign shadow_update_errs[1] =
reg2hw.io_div2_meas_ctrl_shadowed.en.err_update |
reg2hw.io_div2_meas_ctrl_shadowed.hi.err_update |
reg2hw.io_div2_meas_ctrl_shadowed.lo.err_update;
- assign hw2reg.fatal_err_code.io_div2_storage_err.d = 1'b1;
- assign hw2reg.fatal_err_code.io_div2_storage_err.de =
+ assign shadow_storage_errs[1] =
reg2hw.io_div2_meas_ctrl_shadowed.en.err_storage |
reg2hw.io_div2_meas_ctrl_shadowed.hi.err_storage |
reg2hw.io_div2_meas_ctrl_shadowed.lo.err_storage;
@@ -656,13 +655,11 @@
assign hw2reg.recov_err_code.io_div4_measure_err.de = synced_io_div4_err;
assign hw2reg.recov_err_code.io_div4_timeout_err.d = 1'b1;
assign hw2reg.recov_err_code.io_div4_timeout_err.de = synced_io_div4_timeout_err;
- assign hw2reg.recov_err_code.io_div4_update_err.d = 1'b1;
- assign hw2reg.recov_err_code.io_div4_update_err.de =
+ assign shadow_update_errs[2] =
reg2hw.io_div4_meas_ctrl_shadowed.en.err_update |
reg2hw.io_div4_meas_ctrl_shadowed.hi.err_update |
reg2hw.io_div4_meas_ctrl_shadowed.lo.err_update;
- assign hw2reg.fatal_err_code.io_div4_storage_err.d = 1'b1;
- assign hw2reg.fatal_err_code.io_div4_storage_err.de =
+ assign shadow_storage_errs[2] =
reg2hw.io_div4_meas_ctrl_shadowed.en.err_storage |
reg2hw.io_div4_meas_ctrl_shadowed.hi.err_storage |
reg2hw.io_div4_meas_ctrl_shadowed.lo.err_storage;
@@ -718,13 +715,11 @@
assign hw2reg.recov_err_code.main_measure_err.de = synced_main_err;
assign hw2reg.recov_err_code.main_timeout_err.d = 1'b1;
assign hw2reg.recov_err_code.main_timeout_err.de = synced_main_timeout_err;
- assign hw2reg.recov_err_code.main_update_err.d = 1'b1;
- assign hw2reg.recov_err_code.main_update_err.de =
+ assign shadow_update_errs[3] =
reg2hw.main_meas_ctrl_shadowed.en.err_update |
reg2hw.main_meas_ctrl_shadowed.hi.err_update |
reg2hw.main_meas_ctrl_shadowed.lo.err_update;
- assign hw2reg.fatal_err_code.main_storage_err.d = 1'b1;
- assign hw2reg.fatal_err_code.main_storage_err.de =
+ assign shadow_storage_errs[3] =
reg2hw.main_meas_ctrl_shadowed.en.err_storage |
reg2hw.main_meas_ctrl_shadowed.hi.err_storage |
reg2hw.main_meas_ctrl_shadowed.lo.err_storage;
@@ -780,13 +775,11 @@
assign hw2reg.recov_err_code.usb_measure_err.de = synced_usb_err;
assign hw2reg.recov_err_code.usb_timeout_err.d = 1'b1;
assign hw2reg.recov_err_code.usb_timeout_err.de = synced_usb_timeout_err;
- assign hw2reg.recov_err_code.usb_update_err.d = 1'b1;
- assign hw2reg.recov_err_code.usb_update_err.de =
+ assign shadow_update_errs[4] =
reg2hw.usb_meas_ctrl_shadowed.en.err_update |
reg2hw.usb_meas_ctrl_shadowed.hi.err_update |
reg2hw.usb_meas_ctrl_shadowed.lo.err_update;
- assign hw2reg.fatal_err_code.usb_storage_err.d = 1'b1;
- assign hw2reg.fatal_err_code.usb_storage_err.de =
+ assign shadow_storage_errs[4] =
reg2hw.usb_meas_ctrl_shadowed.en.err_storage |
reg2hw.usb_meas_ctrl_shadowed.hi.err_storage |
reg2hw.usb_meas_ctrl_shadowed.lo.err_storage;
diff --git a/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_reg_pkg.sv b/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_reg_pkg.sv
index e5a7cfa..19f4c7b 100644
--- a/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_reg_pkg.sv
+++ b/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_reg_pkg.sv
@@ -172,19 +172,7 @@
} idle_cnt;
struct packed {
logic q;
- } io_storage_err;
- struct packed {
- logic q;
- } io_div2_storage_err;
- struct packed {
- logic q;
- } io_div4_storage_err;
- struct packed {
- logic q;
- } main_storage_err;
- struct packed {
- logic q;
- } usb_storage_err;
+ } shadow_storage_err;
} clkmgr_reg2hw_fatal_err_code_reg_t;
typedef struct packed {
@@ -210,6 +198,10 @@
struct packed {
logic d;
logic de;
+ } shadow_update_err;
+ struct packed {
+ logic d;
+ logic de;
} io_measure_err;
struct packed {
logic d;
@@ -247,26 +239,6 @@
logic d;
logic de;
} usb_timeout_err;
- struct packed {
- logic d;
- logic de;
- } io_update_err;
- struct packed {
- logic d;
- logic de;
- } io_div2_update_err;
- struct packed {
- logic d;
- logic de;
- } io_div4_update_err;
- struct packed {
- logic d;
- logic de;
- } main_update_err;
- struct packed {
- logic d;
- logic de;
- } usb_update_err;
} clkmgr_hw2reg_recov_err_code_reg_t;
typedef struct packed {
@@ -281,45 +253,29 @@
struct packed {
logic d;
logic de;
- } io_storage_err;
- struct packed {
- logic d;
- logic de;
- } io_div2_storage_err;
- struct packed {
- logic d;
- logic de;
- } io_div4_storage_err;
- struct packed {
- logic d;
- logic de;
- } main_storage_err;
- struct packed {
- logic d;
- logic de;
- } usb_storage_err;
+ } shadow_storage_err;
} clkmgr_hw2reg_fatal_err_code_reg_t;
// Register -> HW type
typedef struct packed {
- clkmgr_reg2hw_alert_test_reg_t alert_test; // [127:124]
- clkmgr_reg2hw_extclk_ctrl_reg_t extclk_ctrl; // [123:116]
- clkmgr_reg2hw_jitter_enable_reg_t jitter_enable; // [115:112]
- clkmgr_reg2hw_clk_enables_reg_t clk_enables; // [111:108]
- clkmgr_reg2hw_clk_hints_reg_t clk_hints; // [107:104]
- clkmgr_reg2hw_io_meas_ctrl_shadowed_reg_t io_meas_ctrl_shadowed; // [103:83]
- clkmgr_reg2hw_io_div2_meas_ctrl_shadowed_reg_t io_div2_meas_ctrl_shadowed; // [82:64]
- clkmgr_reg2hw_io_div4_meas_ctrl_shadowed_reg_t io_div4_meas_ctrl_shadowed; // [63:47]
- clkmgr_reg2hw_main_meas_ctrl_shadowed_reg_t main_meas_ctrl_shadowed; // [46:26]
- clkmgr_reg2hw_usb_meas_ctrl_shadowed_reg_t usb_meas_ctrl_shadowed; // [25:7]
- clkmgr_reg2hw_fatal_err_code_reg_t fatal_err_code; // [6:0]
+ clkmgr_reg2hw_alert_test_reg_t alert_test; // [123:120]
+ clkmgr_reg2hw_extclk_ctrl_reg_t extclk_ctrl; // [119:112]
+ clkmgr_reg2hw_jitter_enable_reg_t jitter_enable; // [111:108]
+ clkmgr_reg2hw_clk_enables_reg_t clk_enables; // [107:104]
+ clkmgr_reg2hw_clk_hints_reg_t clk_hints; // [103:100]
+ clkmgr_reg2hw_io_meas_ctrl_shadowed_reg_t io_meas_ctrl_shadowed; // [99:79]
+ clkmgr_reg2hw_io_div2_meas_ctrl_shadowed_reg_t io_div2_meas_ctrl_shadowed; // [78:60]
+ clkmgr_reg2hw_io_div4_meas_ctrl_shadowed_reg_t io_div4_meas_ctrl_shadowed; // [59:43]
+ clkmgr_reg2hw_main_meas_ctrl_shadowed_reg_t main_meas_ctrl_shadowed; // [42:22]
+ clkmgr_reg2hw_usb_meas_ctrl_shadowed_reg_t usb_meas_ctrl_shadowed; // [21:3]
+ clkmgr_reg2hw_fatal_err_code_reg_t fatal_err_code; // [2:0]
} clkmgr_reg2hw_t;
// HW -> register type
typedef struct packed {
- clkmgr_hw2reg_clk_hints_status_reg_t clk_hints_status; // [51:44]
- clkmgr_hw2reg_recov_err_code_reg_t recov_err_code; // [43:14]
- clkmgr_hw2reg_fatal_err_code_reg_t fatal_err_code; // [13:0]
+ clkmgr_hw2reg_clk_hints_status_reg_t clk_hints_status; // [35:28]
+ clkmgr_hw2reg_recov_err_code_reg_t recov_err_code; // [27:6]
+ clkmgr_hw2reg_fatal_err_code_reg_t fatal_err_code; // [5:0]
} clkmgr_hw2reg_t;
// Register offsets
diff --git a/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_reg_top.sv b/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_reg_top.sv
index 4f073a1..40e0b00 100644
--- a/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_reg_top.sv
+++ b/hw/top_earlgrey/ip/clkmgr/rtl/autogen/clkmgr_reg_top.sv
@@ -242,6 +242,8 @@
logic [21:0] usb_meas_ctrl_shadowed_qs;
logic usb_meas_ctrl_shadowed_busy;
logic recov_err_code_we;
+ logic recov_err_code_shadow_update_err_qs;
+ logic recov_err_code_shadow_update_err_wd;
logic recov_err_code_io_measure_err_qs;
logic recov_err_code_io_measure_err_wd;
logic recov_err_code_io_div2_measure_err_qs;
@@ -262,23 +264,9 @@
logic recov_err_code_main_timeout_err_wd;
logic recov_err_code_usb_timeout_err_qs;
logic recov_err_code_usb_timeout_err_wd;
- logic recov_err_code_io_update_err_qs;
- logic recov_err_code_io_update_err_wd;
- logic recov_err_code_io_div2_update_err_qs;
- logic recov_err_code_io_div2_update_err_wd;
- logic recov_err_code_io_div4_update_err_qs;
- logic recov_err_code_io_div4_update_err_wd;
- logic recov_err_code_main_update_err_qs;
- logic recov_err_code_main_update_err_wd;
- logic recov_err_code_usb_update_err_qs;
- logic recov_err_code_usb_update_err_wd;
logic fatal_err_code_reg_intg_qs;
logic fatal_err_code_idle_cnt_qs;
- logic fatal_err_code_io_storage_err_qs;
- logic fatal_err_code_io_div2_storage_err_qs;
- logic fatal_err_code_io_div4_storage_err_qs;
- logic fatal_err_code_main_storage_err_qs;
- logic fatal_err_code_usb_storage_err_qs;
+ logic fatal_err_code_shadow_storage_err_qs;
// Define register CDC handling.
// CDC handling is done on a per-reg instead of per-field boundary.
@@ -1871,7 +1859,32 @@
// R[recov_err_code]: V(False)
- // F[io_measure_err]: 0:0
+ // F[shadow_update_err]: 0:0
+ prim_subreg #(
+ .DW (1),
+ .SwAccess(prim_subreg_pkg::SwAccessW1C),
+ .RESVAL (1'h0)
+ ) u_recov_err_code_shadow_update_err (
+ .clk_i (clk_i),
+ .rst_ni (rst_ni),
+
+ // from register interface
+ .we (recov_err_code_we),
+ .wd (recov_err_code_shadow_update_err_wd),
+
+ // from internal hardware
+ .de (hw2reg.recov_err_code.shadow_update_err.de),
+ .d (hw2reg.recov_err_code.shadow_update_err.d),
+
+ // to internal hardware
+ .qe (),
+ .q (),
+
+ // to register interface (read)
+ .qs (recov_err_code_shadow_update_err_qs)
+ );
+
+ // F[io_measure_err]: 1:1
prim_subreg #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
@@ -1896,7 +1909,7 @@
.qs (recov_err_code_io_measure_err_qs)
);
- // F[io_div2_measure_err]: 1:1
+ // F[io_div2_measure_err]: 2:2
prim_subreg #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
@@ -1921,7 +1934,7 @@
.qs (recov_err_code_io_div2_measure_err_qs)
);
- // F[io_div4_measure_err]: 2:2
+ // F[io_div4_measure_err]: 3:3
prim_subreg #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
@@ -1946,7 +1959,7 @@
.qs (recov_err_code_io_div4_measure_err_qs)
);
- // F[main_measure_err]: 3:3
+ // F[main_measure_err]: 4:4
prim_subreg #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
@@ -1971,7 +1984,7 @@
.qs (recov_err_code_main_measure_err_qs)
);
- // F[usb_measure_err]: 4:4
+ // F[usb_measure_err]: 5:5
prim_subreg #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
@@ -1996,7 +2009,7 @@
.qs (recov_err_code_usb_measure_err_qs)
);
- // F[io_timeout_err]: 5:5
+ // F[io_timeout_err]: 6:6
prim_subreg #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
@@ -2021,7 +2034,7 @@
.qs (recov_err_code_io_timeout_err_qs)
);
- // F[io_div2_timeout_err]: 6:6
+ // F[io_div2_timeout_err]: 7:7
prim_subreg #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
@@ -2046,7 +2059,7 @@
.qs (recov_err_code_io_div2_timeout_err_qs)
);
- // F[io_div4_timeout_err]: 7:7
+ // F[io_div4_timeout_err]: 8:8
prim_subreg #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
@@ -2071,7 +2084,7 @@
.qs (recov_err_code_io_div4_timeout_err_qs)
);
- // F[main_timeout_err]: 8:8
+ // F[main_timeout_err]: 9:9
prim_subreg #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
@@ -2096,7 +2109,7 @@
.qs (recov_err_code_main_timeout_err_qs)
);
- // F[usb_timeout_err]: 9:9
+ // F[usb_timeout_err]: 10:10
prim_subreg #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessW1C),
@@ -2121,131 +2134,6 @@
.qs (recov_err_code_usb_timeout_err_qs)
);
- // F[io_update_err]: 10:10
- prim_subreg #(
- .DW (1),
- .SwAccess(prim_subreg_pkg::SwAccessW1C),
- .RESVAL (1'h0)
- ) u_recov_err_code_io_update_err (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (recov_err_code_we),
- .wd (recov_err_code_io_update_err_wd),
-
- // from internal hardware
- .de (hw2reg.recov_err_code.io_update_err.de),
- .d (hw2reg.recov_err_code.io_update_err.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (recov_err_code_io_update_err_qs)
- );
-
- // F[io_div2_update_err]: 11:11
- prim_subreg #(
- .DW (1),
- .SwAccess(prim_subreg_pkg::SwAccessW1C),
- .RESVAL (1'h0)
- ) u_recov_err_code_io_div2_update_err (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (recov_err_code_we),
- .wd (recov_err_code_io_div2_update_err_wd),
-
- // from internal hardware
- .de (hw2reg.recov_err_code.io_div2_update_err.de),
- .d (hw2reg.recov_err_code.io_div2_update_err.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (recov_err_code_io_div2_update_err_qs)
- );
-
- // F[io_div4_update_err]: 12:12
- prim_subreg #(
- .DW (1),
- .SwAccess(prim_subreg_pkg::SwAccessW1C),
- .RESVAL (1'h0)
- ) u_recov_err_code_io_div4_update_err (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (recov_err_code_we),
- .wd (recov_err_code_io_div4_update_err_wd),
-
- // from internal hardware
- .de (hw2reg.recov_err_code.io_div4_update_err.de),
- .d (hw2reg.recov_err_code.io_div4_update_err.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (recov_err_code_io_div4_update_err_qs)
- );
-
- // F[main_update_err]: 13:13
- prim_subreg #(
- .DW (1),
- .SwAccess(prim_subreg_pkg::SwAccessW1C),
- .RESVAL (1'h0)
- ) u_recov_err_code_main_update_err (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (recov_err_code_we),
- .wd (recov_err_code_main_update_err_wd),
-
- // from internal hardware
- .de (hw2reg.recov_err_code.main_update_err.de),
- .d (hw2reg.recov_err_code.main_update_err.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (recov_err_code_main_update_err_qs)
- );
-
- // F[usb_update_err]: 14:14
- prim_subreg #(
- .DW (1),
- .SwAccess(prim_subreg_pkg::SwAccessW1C),
- .RESVAL (1'h0)
- ) u_recov_err_code_usb_update_err (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (recov_err_code_we),
- .wd (recov_err_code_usb_update_err_wd),
-
- // from internal hardware
- .de (hw2reg.recov_err_code.usb_update_err.de),
- .d (hw2reg.recov_err_code.usb_update_err.d),
-
- // to internal hardware
- .qe (),
- .q (),
-
- // to register interface (read)
- .qs (recov_err_code_usb_update_err_qs)
- );
-
// R[fatal_err_code]: V(False)
// F[reg_intg]: 0:0
@@ -2298,12 +2186,12 @@
.qs (fatal_err_code_idle_cnt_qs)
);
- // F[io_storage_err]: 2:2
+ // F[shadow_storage_err]: 2:2
prim_subreg #(
.DW (1),
.SwAccess(prim_subreg_pkg::SwAccessRO),
.RESVAL (1'h0)
- ) u_fatal_err_code_io_storage_err (
+ ) u_fatal_err_code_shadow_storage_err (
.clk_i (clk_i),
.rst_ni (rst_ni),
@@ -2312,115 +2200,15 @@
.wd ('0),
// from internal hardware
- .de (hw2reg.fatal_err_code.io_storage_err.de),
- .d (hw2reg.fatal_err_code.io_storage_err.d),
+ .de (hw2reg.fatal_err_code.shadow_storage_err.de),
+ .d (hw2reg.fatal_err_code.shadow_storage_err.d),
// to internal hardware
.qe (),
- .q (reg2hw.fatal_err_code.io_storage_err.q),
+ .q (reg2hw.fatal_err_code.shadow_storage_err.q),
// to register interface (read)
- .qs (fatal_err_code_io_storage_err_qs)
- );
-
- // F[io_div2_storage_err]: 3:3
- prim_subreg #(
- .DW (1),
- .SwAccess(prim_subreg_pkg::SwAccessRO),
- .RESVAL (1'h0)
- ) u_fatal_err_code_io_div2_storage_err (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (1'b0),
- .wd ('0),
-
- // from internal hardware
- .de (hw2reg.fatal_err_code.io_div2_storage_err.de),
- .d (hw2reg.fatal_err_code.io_div2_storage_err.d),
-
- // to internal hardware
- .qe (),
- .q (reg2hw.fatal_err_code.io_div2_storage_err.q),
-
- // to register interface (read)
- .qs (fatal_err_code_io_div2_storage_err_qs)
- );
-
- // F[io_div4_storage_err]: 4:4
- prim_subreg #(
- .DW (1),
- .SwAccess(prim_subreg_pkg::SwAccessRO),
- .RESVAL (1'h0)
- ) u_fatal_err_code_io_div4_storage_err (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (1'b0),
- .wd ('0),
-
- // from internal hardware
- .de (hw2reg.fatal_err_code.io_div4_storage_err.de),
- .d (hw2reg.fatal_err_code.io_div4_storage_err.d),
-
- // to internal hardware
- .qe (),
- .q (reg2hw.fatal_err_code.io_div4_storage_err.q),
-
- // to register interface (read)
- .qs (fatal_err_code_io_div4_storage_err_qs)
- );
-
- // F[main_storage_err]: 5:5
- prim_subreg #(
- .DW (1),
- .SwAccess(prim_subreg_pkg::SwAccessRO),
- .RESVAL (1'h0)
- ) u_fatal_err_code_main_storage_err (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (1'b0),
- .wd ('0),
-
- // from internal hardware
- .de (hw2reg.fatal_err_code.main_storage_err.de),
- .d (hw2reg.fatal_err_code.main_storage_err.d),
-
- // to internal hardware
- .qe (),
- .q (reg2hw.fatal_err_code.main_storage_err.q),
-
- // to register interface (read)
- .qs (fatal_err_code_main_storage_err_qs)
- );
-
- // F[usb_storage_err]: 6:6
- prim_subreg #(
- .DW (1),
- .SwAccess(prim_subreg_pkg::SwAccessRO),
- .RESVAL (1'h0)
- ) u_fatal_err_code_usb_storage_err (
- .clk_i (clk_i),
- .rst_ni (rst_ni),
-
- // from register interface
- .we (1'b0),
- .wd ('0),
-
- // from internal hardware
- .de (hw2reg.fatal_err_code.usb_storage_err.de),
- .d (hw2reg.fatal_err_code.usb_storage_err.d),
-
- // to internal hardware
- .qe (),
- .q (reg2hw.fatal_err_code.usb_storage_err.q),
-
- // to register interface (read)
- .qs (fatal_err_code_usb_storage_err_qs)
+ .qs (fatal_err_code_shadow_storage_err_qs)
);
@@ -2535,35 +2323,27 @@
assign recov_err_code_we = addr_hit[14] & reg_we & !reg_error;
- assign recov_err_code_io_measure_err_wd = reg_wdata[0];
+ assign recov_err_code_shadow_update_err_wd = reg_wdata[0];
- assign recov_err_code_io_div2_measure_err_wd = reg_wdata[1];
+ assign recov_err_code_io_measure_err_wd = reg_wdata[1];
- assign recov_err_code_io_div4_measure_err_wd = reg_wdata[2];
+ assign recov_err_code_io_div2_measure_err_wd = reg_wdata[2];
- assign recov_err_code_main_measure_err_wd = reg_wdata[3];
+ assign recov_err_code_io_div4_measure_err_wd = reg_wdata[3];
- assign recov_err_code_usb_measure_err_wd = reg_wdata[4];
+ assign recov_err_code_main_measure_err_wd = reg_wdata[4];
- assign recov_err_code_io_timeout_err_wd = reg_wdata[5];
+ assign recov_err_code_usb_measure_err_wd = reg_wdata[5];
- assign recov_err_code_io_div2_timeout_err_wd = reg_wdata[6];
+ assign recov_err_code_io_timeout_err_wd = reg_wdata[6];
- assign recov_err_code_io_div4_timeout_err_wd = reg_wdata[7];
+ assign recov_err_code_io_div2_timeout_err_wd = reg_wdata[7];
- assign recov_err_code_main_timeout_err_wd = reg_wdata[8];
+ assign recov_err_code_io_div4_timeout_err_wd = reg_wdata[8];
- assign recov_err_code_usb_timeout_err_wd = reg_wdata[9];
+ assign recov_err_code_main_timeout_err_wd = reg_wdata[9];
- assign recov_err_code_io_update_err_wd = reg_wdata[10];
-
- assign recov_err_code_io_div2_update_err_wd = reg_wdata[11];
-
- assign recov_err_code_io_div4_update_err_wd = reg_wdata[12];
-
- assign recov_err_code_main_update_err_wd = reg_wdata[13];
-
- assign recov_err_code_usb_update_err_wd = reg_wdata[14];
+ assign recov_err_code_usb_timeout_err_wd = reg_wdata[10];
// Read data return
always_comb begin
@@ -2632,31 +2412,23 @@
reg_rdata_next = DW'(usb_meas_ctrl_shadowed_qs);
end
addr_hit[14]: begin
- reg_rdata_next[0] = recov_err_code_io_measure_err_qs;
- reg_rdata_next[1] = recov_err_code_io_div2_measure_err_qs;
- reg_rdata_next[2] = recov_err_code_io_div4_measure_err_qs;
- reg_rdata_next[3] = recov_err_code_main_measure_err_qs;
- reg_rdata_next[4] = recov_err_code_usb_measure_err_qs;
- reg_rdata_next[5] = recov_err_code_io_timeout_err_qs;
- reg_rdata_next[6] = recov_err_code_io_div2_timeout_err_qs;
- reg_rdata_next[7] = recov_err_code_io_div4_timeout_err_qs;
- reg_rdata_next[8] = recov_err_code_main_timeout_err_qs;
- reg_rdata_next[9] = recov_err_code_usb_timeout_err_qs;
- reg_rdata_next[10] = recov_err_code_io_update_err_qs;
- reg_rdata_next[11] = recov_err_code_io_div2_update_err_qs;
- reg_rdata_next[12] = recov_err_code_io_div4_update_err_qs;
- reg_rdata_next[13] = recov_err_code_main_update_err_qs;
- reg_rdata_next[14] = recov_err_code_usb_update_err_qs;
+ reg_rdata_next[0] = recov_err_code_shadow_update_err_qs;
+ reg_rdata_next[1] = recov_err_code_io_measure_err_qs;
+ reg_rdata_next[2] = recov_err_code_io_div2_measure_err_qs;
+ reg_rdata_next[3] = recov_err_code_io_div4_measure_err_qs;
+ reg_rdata_next[4] = recov_err_code_main_measure_err_qs;
+ reg_rdata_next[5] = recov_err_code_usb_measure_err_qs;
+ reg_rdata_next[6] = recov_err_code_io_timeout_err_qs;
+ reg_rdata_next[7] = recov_err_code_io_div2_timeout_err_qs;
+ reg_rdata_next[8] = recov_err_code_io_div4_timeout_err_qs;
+ reg_rdata_next[9] = recov_err_code_main_timeout_err_qs;
+ reg_rdata_next[10] = recov_err_code_usb_timeout_err_qs;
end
addr_hit[15]: begin
reg_rdata_next[0] = fatal_err_code_reg_intg_qs;
reg_rdata_next[1] = fatal_err_code_idle_cnt_qs;
- reg_rdata_next[2] = fatal_err_code_io_storage_err_qs;
- reg_rdata_next[3] = fatal_err_code_io_div2_storage_err_qs;
- reg_rdata_next[4] = fatal_err_code_io_div4_storage_err_qs;
- reg_rdata_next[5] = fatal_err_code_main_storage_err_qs;
- reg_rdata_next[6] = fatal_err_code_usb_storage_err_qs;
+ reg_rdata_next[2] = fatal_err_code_shadow_storage_err_qs;
end
default: begin