[reggen] Always connect read enable signal to shadow regs
Signed-off-by: Michael Schaffner <msf@opentitan.org>
diff --git a/util/reggen/reg_top.sv.tpl b/util/reggen/reg_top.sv.tpl
index 07cc541..3f19505 100644
--- a/util/reggen/reg_top.sv.tpl
+++ b/util/reggen/reg_top.sv.tpl
@@ -663,7 +663,7 @@
reg_name = reg.name.lower()
clk_expr = reg.async_clk.clock if reg.async_clk else reg_clk_expr
rst_expr = reg.async_clk.reset if reg.async_clk else reg_rst_expr
- re_expr = f'{reg_name}_re' if field.swaccess.allows_read() else "1'b0"
+ re_expr = f'{reg_name}_re' if field.swaccess.allows_read() or reg.shadowed else "1'b0"
# software inputs to field instance, write enable, read enable, write data
if field.swaccess.allows_write():
diff --git a/util/reggen/register.py b/util/reggen/register.py
index ffdc01a..2d4f1d3 100644
--- a/util/reggen/register.py
+++ b/util/reggen/register.py
@@ -341,8 +341,12 @@
This is true if any of the following are true:
- - The register is shadowed (because shadow registers need to know
- about reads)
+ - The register is shadowed, because the read has a side effect.
+ I.e., this puts the register back into Phase 0 (next write will
+ go to the staged register). This is useful for software in case
+ it lost track of the current phase. See comportability spec for
+ more details:
+ https://docs.opentitan.org/doc/rm/register_tool/#shadow-registers
- There's an RC field (where we'll attach the read-enable signal to
the subreg's we port)