I ran into a divide by zero (% 0 really) when trying to compile a regfile that was defined in multiple files as nested addrmaps. In simplifying the test case I can reduce it to a single simple .rdl file that demonstrates the issue.
Versions: peakrdl-0.8.0 peakrdl-regblock-0.15.0
$ peakrdl regblock test.rdl -o output
Traceback (most recent call last):
File "/home/ianb/.local/bin/peakrdl", line 8, in <module>
sys.exit(main())
File "/home/ianb/.local/lib/python3.8/site-packages/peakrdl/main.py", line 165, in main
options.subcommand.main(importers, options)
File "/home/ianb/.local/lib/python3.8/site-packages/peakrdl/subcommand.py", line 154, in main
self.do_export(top, options)
File "/home/ianb/.local/lib/python3.8/site-packages/peakrdl_regblock/__peakrdl__.py", line 207, in do_export
x.export(
File "/home/ianb/.local/lib/python3.8/site-packages/peakrdl_regblock/exporter.py", line 160, in export
DesignValidator(self).do_validate()
File "/home/ianb/.local/lib/python3.8/site-packages/peakrdl_regblock/validate_design.py", line 32, in do_validate
RDLWalker().walk(self.top_node, self)
File "/home/ianb/.local/lib/python3.8/site-packages/systemrdl/walker.py", line 150, in walk
self.current_action = self.do_enter(node, listener)
File "/home/ianb/.local/lib/python3.8/site-packages/systemrdl/walker.py", line 182, in do_enter
new_action = listener.enter_AddressableComponent(node) or WalkerAction.Continue
File "/home/ianb/.local/lib/python3.8/site-packages/peakrdl_regblock/validate_design.py", line 73, in enter_AddressableComponent
if (node.raw_address_offset % alignment) != 0:
ZeroDivisionError: integer division or modulo by zero
addrmap test {
addrmap {
reg {name="Reg A";
field {
sw=rw;
hw=r;
name="";
desc="";
} A[31:0] = 0x0;
} A_reg @ 0x0;
reg {name="Reg B";
field {
sw=rw;
hw=r;
name="";
desc="";
} B [31:0] = 0x0;
} B_reg @ 0x4;
} mapA @ 0x1000;
};
addrmap test {
reg {name="Reg C";
field {
sw=rw;
hw=r;
name="";
desc="";
} C[31:0] = 0x0;
} C_reg @ 0x0;
addrmap {
reg {name="Reg A";
field {
sw=rw;
hw=r;
name="";
desc="";
} A[31:0] = 0x0;
} A_reg @ 0x0;
reg {name="Reg B";
field {
sw=rw;
hw=r;
name="";
desc="";
} B [31:0] = 0x0;
} B_reg @ 0x4;
} mapA @ 0x1000;
};