False overlap detected between RemoteVariable in different device classes

XMLWordPrintable

    • 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))
      

              Assignee:
              Unassigned
              Reporter:
              Larry Ruckman
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: