Skip to content

Commit a81ec39

Browse files
committed
Bug fix for the write_fields method on a write only register being built with hidden elements. closes #307
1 parent 9530ef8 commit a81ec39

2 files changed

Lines changed: 10 additions & 3 deletions

File tree

src/peakrdl_python/templates/addrmap_register.py.jinja

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class {{node.python_class_name}}({{node.base_class(asyncoutput)}}):
8282
{{get_table_block(node.instance) | indent}}
8383
"""
8484

85-
__slots__ : list[str] = [{%- for child_node in node.instance.children(unroll=False) -%}'__{{child_node.inst_name}}'{% if not loop.last %}, {% endif %}{%- endfor %}]
85+
__slots__ : list[str] = [{%- for child_node in node.children(unroll=False) -%}'__{{child_node.inst_name}}'{% if not loop.last %}, {% endif %}{%- endfor %}]
8686

8787
def __init__(self,
8888
address: int,
@@ -129,12 +129,12 @@ class {{node.python_class_name}}({{node.base_class(asyncoutput)}}):
129129

130130
{% if node.write_only %}
131131
{# if the register has no readable components, all the fields must be writen as one #}
132-
{% if asyncoutput %}async {% endif %}def write_fields(self, {%- for child_node in node.instance.fields() -%} {{safe_node_name(child_node)}} : {{node.lookup_field_data_python_class(child_node)}}{%- if not loop.last -%},{%- endif -%}{%- endfor -%}) -> None: # type: ignore[override]
132+
{% if asyncoutput %}async {% endif %}def write_fields(self, {%- for child_node in node.fields() -%} {{safe_node_name(child_node)}} : {{node.lookup_field_data_python_class(child_node)}}{%- if not loop.last -%},{%- endif -%}{%- endfor -%}) -> None: # type: ignore[override]
133133
"""
134134
Do a write to the register, updating all fields
135135
"""
136136
reg_value = 0
137-
{%- for child_node in node.instance.fields() %}
137+
{%- for child_node in node.fields() %}
138138
reg_value &= self.{{safe_node_name(child_node)}}.inverse_bitmask
139139
reg_value |= self.{{safe_node_name(child_node)}}._encode_write_value({{safe_node_name(child_node)}})
140140
{% endfor %}

tests/testcases/reserved_elements.rdl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@ addrmap reserved_elements {
99
field { fieldwidth=1; } show;
1010
};
1111

12+
reg {
13+
default sw = w;
14+
default hw = r;
15+
field { fieldwidth=1; } RSVD;
16+
field { fieldwidth=1; } field_a;
17+
} write_only_register;
18+
1219
reg {
1320
default sw = rw;
1421
default hw = r;

0 commit comments

Comments
 (0)