diff --git a/src/peakrdl_cheader/design_state.py b/src/peakrdl_cheader/design_state.py index 506e8ad..f59ed91 100644 --- a/src/peakrdl_cheader/design_state.py +++ b/src/peakrdl_cheader/design_state.py @@ -40,6 +40,10 @@ def __init__(self, top_node: AddrmapNode, kwargs: Any) -> None: self.reuse_typedefs: bool self.reuse_typedefs = kwargs.pop("reuse_typedefs", True) + # Enable genration of non zero reset value only + self.non_zero_reset_only: bool + self.non_zero_reset_only = kwargs.pop("non_zero_reset_only", False) + # Enable generation of bit-field structs for registers self.generate_bitfields: bool self.generate_bitfields = kwargs.pop("generate_bitfields", False) diff --git a/src/peakrdl_cheader/header_generator.py b/src/peakrdl_cheader/header_generator.py index ba41a4f..1863517 100644 --- a/src/peakrdl_cheader/header_generator.py +++ b/src/peakrdl_cheader/header_generator.py @@ -139,13 +139,14 @@ def enter_Reg(self, node: RegNode) -> Optional[WalkerAction]: for field in node.fields(): field_prefix = prefix + "__" + field.inst_name.upper() - bm = ((1 << field.width) - 1) << field.low - self.write(f"#define {field_prefix}_bm {bm:#x}\n") - self.write(f"#define {field_prefix}_bp {field.low:d}\n") - self.write(f"#define {field_prefix}_bw {field.width:d}\n") + if not self.ds.non_zero_reset_only: + bm = ((1 << field.width) - 1) << field.low + self.write(f"#define {field_prefix}_bm {bm:#x}\n") + self.write(f"#define {field_prefix}_bp {field.low:d}\n") + self.write(f"#define {field_prefix}_bw {field.width:d}\n") reset = field.get_property('reset') - if isinstance(reset, int): + if isinstance(reset, int) and (not self.ds.non_zero_reset_only or reset): self.write(f"#define {field_prefix}_reset {reset:#x}\n") # No need to traverse fields