-
Type:
Bug
-
Resolution: resolved
-
Priority:
Major
-
Component/s: None
-
None
I have the following device class
class RfDataConverter(pr.Device):
def __init__(
self,
gen3 = True, # True if using RFSoC GEN3 Hardware
enAdcTile = [True,True,True,True],
enDacTile = [True,True,True,True],
**kwargs):
super().__init__(**kwargs)
for i in range(4):
if enDacTile[i]:
self.add(rfdc.RfTile(
name = f'dacTile[{i}]',
isAdc = False,
gen3 = gen3,
offset = 0x04000 + 0x4000*i,
expand = False,
))
for i in range(4):
if enAdcTile[i]:
self.add(rfdc.RfTile(
name = f'adcTile[{i}]',
isAdc = True,
gen3 = gen3,
offset = 0x14000 + 0x4000*i,
expand = False,
))
self.add(pr.RemoteVariable(
name = "RegSpace",
description = "",
offset = 0,
bitSize = 32 * 0x10000,
bitOffset = 0,
numValues = 0x10000,
valueBits = 32,
valueStride = 32,
bulkOpEn = False,
overlapEn = True,
verify = False,
hidden = True,
base = pr.UInt,
mode = "RW",
groups = ['NoState', 'NoConfig', 'NoStream'], # No YAML save/load
))
All the RemoteVariables in the RfTile classes are also marked as "overlapEn=True".
When I run rogue, I get the following error message:
$ python scripts/devGui.py --ip 10.0.0.11 --boardType zcu208 --bpmFreqMHz 0
Rogue/pyrogue version v6.2.0. https://github.com/slaclab/rogue
sampleRate=4072MSPS, DDC.NcoFreqMHz=0MHz
Traceback (most recent call last):
File "/afs/slac.stanford.edu/u/re/ruckman/projects/kek-bpm-rfsoc-dev/software/scripts/devGui.py", line 78, in <module>
with kek_bpm_rfsoc_dev.Root(
File "/home/ruckman/projects/rogue/python/pyrogue/_Root.py", line 170, in __enter__
self.start()
File "/afs/slac.stanford.edu/u/re/ruckman/projects/kek-bpm-rfsoc-dev/firmware/python/kek_bpm_rfsoc_dev/_Root.py", line 272, in start
super(Root, self).start(**kwargs)
File "/home/ruckman/projects/rogue/python/pyrogue/_Root.py", line 388, in start
raise pr.NodeError("{} at address={:#x} overlaps {} at address={:#x} with size={}".format(
pyrogue._Node.NodeError: Root.RFSoC.RfDataConverter.dacTile[0].RestartSM at address=0x490004004 overlaps Root.RFSoC.RfDataConverter.RegSpace at address=0x490000000 with size=262144
It apears that this "if" statement in pyrogue._Root.py is NOT properly checking if the overlap bits between nodes is being used
# Detect overlaps
if (tmpList[i].size != 0) and (tmpList[i]._reqSlaveId() == tmpList[i-1]._reqSlaveId()) and \
(tmpList[i].address < (tmpList[i-1].address + tmpList[i-1].size)):
raise pr.NodeError("{} at address={:#x} overlaps {} at address={:#x} with size={}".format(
tmpList[i].path,tmpList[i].address,
tmpList[i-1].path,tmpList[i-1].address,tmpList[i-1].size))