diff options
Diffstat (limited to 'mpm/python')
| -rw-r--r-- | mpm/python/usrp_mpm/chips/lmk04828.py | 17 | ||||
| -rw-r--r-- | mpm/python/usrp_mpm/cores/nijesdcore.py | 59 | ||||
| -rw-r--r-- | mpm/python/usrp_mpm/cores/tdc_sync.py | 8 | ||||
| -rw-r--r-- | mpm/python/usrp_mpm/dboard_manager/lmk_mg.py | 11 | ||||
| -rw-r--r-- | mpm/python/usrp_mpm/dboard_manager/magnesium.py | 12 | ||||
| -rw-r--r-- | mpm/python/usrp_mpm/discovery.py | 4 | ||||
| -rw-r--r-- | mpm/python/usrp_mpm/periph_manager/base.py | 1 | 
7 files changed, 57 insertions, 55 deletions
diff --git a/mpm/python/usrp_mpm/chips/lmk04828.py b/mpm/python/usrp_mpm/chips/lmk04828.py index 5075f1bbf..0611ec777 100644 --- a/mpm/python/usrp_mpm/chips/lmk04828.py +++ b/mpm/python/usrp_mpm/chips/lmk04828.py @@ -86,28 +86,31 @@ class LMK04828(object):          cnth = int(math.floor(divide_val/2.0))          reg_val = ((cnth & 0xF) << 4) | (cntl & 0xF)          self.log.trace("From divider value 0d{}, writing CNTH/L as 0x{:02X}." -           .format(divide_val, reg_val)) +                       .format(divide_val, reg_val))          return reg_val -    def divide_to_reg(self, divide_val, in_drive = 0x1, out_drive = 0x1): +    def divide_to_reg(self, divide_val, in_drive=0x1, out_drive=0x1):          """          From the divider value, returns the register value combined with the other          register fields.          """          reg_val = (divide_val & 0x1F) | ((in_drive & 0x1) << 5) | ((out_drive & 0x1) << 6)          self.log.trace("From divider value 0d{}, writing divider register as 0x{:02X}." -           .format(divide_val, reg_val)) +                       .format(divide_val, reg_val))          return reg_val -    def pll2_pre_to_reg(self, prescaler, osc_field = 0x01, xtal_en = 0x0, ref_2x_en = 0x0): +    def pll2_pre_to_reg(self, prescaler, osc_field=0x01, xtal_en=0x0, ref_2x_en=0x0):          """          From the prescaler value, returns the register value combined with the other          register fields.          """          # valid prescaler values are 2-8, where 8 is represented as 0x00. -        assert prescaler in range(2,8+1) -        reg_val = ((prescaler & 0x07) << 5) | ((osc_field & 0x7) << 2) | ((xtal_en & 0x1) << 1) | ((ref_2x_en & 0x1) << 0) +        assert prescaler in range(2, 8+1) +        reg_val = ((prescaler & 0x07) << 5) \ +                  | ((osc_field & 0x7) << 2) \ +                  | ((xtal_en & 0x1) << 1) \ +                  | ((ref_2x_en & 0x1) << 0)          self.log.trace("From prescaler value 0d{}, writing register as 0x{:02X}." -           .format(prescaler, reg_val)) +                       .format(prescaler, reg_val))          return reg_val diff --git a/mpm/python/usrp_mpm/cores/nijesdcore.py b/mpm/python/usrp_mpm/cores/nijesdcore.py index bf2bde6e9..13fd25dbf 100644 --- a/mpm/python/usrp_mpm/cores/nijesdcore.py +++ b/mpm/python/usrp_mpm/cores/nijesdcore.py @@ -208,7 +208,7 @@ class NIMgJESDCore(object):          self.log.trace("%s FPGA SYSREF Receiver..." % {True: 'Enabling', False: 'Disabling'}[enable])          disable_bit = 0b1          if enable: -           disable_bit = 0b0 +            disable_bit = 0b0          reg_val = ((self.lmfc_divider-1) << 23) | (disable_bit << 6)          self.log.trace("Setting SYSREF Capture reg: 0x{:08X}".format(reg_val))          self.regs.poke32(self.SYSREF_CAPTURE_CONTROL, reg_val) @@ -252,9 +252,9 @@ class NIMgJESDCore(object):          # Power down state is when the corresponding bit is set. For the PLLs we wish to          # use, clear those bits.          for x in range(qplls): -           reg_val_on = reg_val_on | 0x1 << x # QPLL bits are 0-3 +            reg_val_on = reg_val_on | 0x1 << x # QPLL bits are 0-3          for y in range(16, 16 + cplls): -           reg_val_on = reg_val_on | 0x1 << y # CPLL bits are 16-23, others are reserved +            reg_val_on = reg_val_on | 0x1 << y # CPLL bits are 16-23, others are reserved          reg_val = reg_val ^ reg_val_on          self.regs.poke32(self.MGT_PLL_POWER_DOWN_CONTROL, reg_val) @@ -281,31 +281,31 @@ class NIMgJESDCore(object):          # Unreset the PLLs in use and check for lock.          if not reset_only: -           if qplls > 0: -              # Unreset only the QPLLs we are using. -              reg_val_on = 0x0 -              for nibble in range(qplls): -                 reg_val_on = reg_val_on | 0x1 << nibble*4 -              reg_val = reg_val ^ reg_val_on -              self.regs.poke32(self.MGT_QPLL_CONTROL, reg_val) -              self.log.trace("Clearing QPLL reset...") +            if qplls > 0: +                # Unreset only the QPLLs we are using. +                reg_val_on = 0x0 +                for nibble in range(qplls): +                    reg_val_on = reg_val_on | 0x1 << nibble*4 +                reg_val = reg_val ^ reg_val_on +                self.regs.poke32(self.MGT_QPLL_CONTROL, reg_val) +                self.log.trace("Clearing QPLL reset...") -              # Check for lock a short time later. -              time.sleep(0.010) -              # Clear all QPLL sticky bits -              self.regs.poke32(self.MGT_QPLL_CONTROL, 0b1 << 16) -              # Check for lock on active quads only. -              rb = self.regs.peek32(self.MGT_QPLL_CONTROL) -              rb_mask = 0x0 -              locked_val = 0x0 -              for nibble in range(qplls): -                 if (rb & (0xF << nibble*4)) != (0x2 << nibble*4): -                    self.log.warning("GT QPLL {} failed to lock!".format(nibble)) -                 locked_val = locked_val | 0x2 << nibble*4 -                 rb_mask    = rb_mask    | 0xF << nibble*4 -              if (rb & rb_mask) != locked_val: -                  raise RuntimeError("One or more GT QPLLs failed to lock!") -              self.log.trace("QPLL(s) reporting locked!") +                # Check for lock a short time later. +                time.sleep(0.010) +                # Clear all QPLL sticky bits +                self.regs.poke32(self.MGT_QPLL_CONTROL, 0b1 << 16) +                # Check for lock on active quads only. +                rb = self.regs.peek32(self.MGT_QPLL_CONTROL) +                rb_mask = 0x0 +                locked_val = 0x0 +                for nibble in range(qplls): +                    if (rb & (0xF << nibble*4)) != (0x2 << nibble*4): +                        self.log.warning("GT QPLL {} failed to lock!".format(nibble)) +                    locked_val = locked_val | 0x2 << nibble*4 +                    rb_mask    = rb_mask    | 0xF << nibble*4 +                if (rb & rb_mask) != locked_val: +                    raise RuntimeError("One or more GT QPLLs failed to lock!") +                self.log.trace("QPLL(s) reporting locked!")      def set_drp_target(self, mgt_or_qpll, dev_num):          """ @@ -327,7 +327,7 @@ class NIMgJESDCore(object):          assert drp_ch_sel in range(MAX_MGTS + MAX_QPLLs)          reg_val = (0b1 << drp_ch_sel) | (DRP_ENABLE_VAL << 16)          self.log.trace("Writing DRP Control Register (offset 0x{:04X}) with 0x{:08X}" -            .format(self.JESD_MGT_DRP_CONTROL, reg_val)) +                       .format(self.JESD_MGT_DRP_CONTROL, reg_val))          self.regs.poke32(self.JESD_MGT_DRP_CONTROL, reg_val)      def disable_drp_target(self): @@ -337,7 +337,7 @@ class NIMgJESDCore(object):          self.regs.poke32(self.JESD_MGT_DRP_CONTROL, 0x0)          self.log.trace("DRP accesses disabled!") -    def drp_access(self, rd = True, addr = 0, wr_data = 0): +    def drp_access(self, rd=True, addr=0, wr_data=0):          """          Provides register access to the DRP ports on the MGTs or QPLLs buried inside          the JESD204b logic. Reads will return the DRP data directly. Writes will return @@ -353,7 +353,6 @@ class NIMgJESDCore(object):          core_offset = 0x2800 + (addr << 2)          if rd:              rd_data = self.regs.peek32(core_offset) -            rd_data_valid = rd_data & 0xFFFF              self.log.trace("Reading DRP register 0x{:04X} at DB Core offset 0x{:04X}... "                             "0x{:04X}"                             .format(addr, core_offset, rd_data)) diff --git a/mpm/python/usrp_mpm/cores/tdc_sync.py b/mpm/python/usrp_mpm/cores/tdc_sync.py index cbed98244..97ee1367c 100644 --- a/mpm/python/usrp_mpm/cores/tdc_sync.py +++ b/mpm/python/usrp_mpm/cores/tdc_sync.py @@ -226,9 +226,9 @@ class ClockSynchronizer(object):          if reset_status != 0x00:              self.log.error(                  "TDC Reset Failed to Clear! " \ -                "Check that your clocks are toggling. Status: 0x{:x}".format( -                    reset_status -            )) +                "Check that your clocks are toggling. Status: 0x{:x}" +                .format(reset_status) +            )              raise RuntimeError("TDC Reset Failed.")          self.log.trace("Enabling the TDC")          # Enable the TDC. @@ -459,7 +459,7 @@ class ClockSynchronizer(object):          return True -    def dac_bist(self, taps_from_center = 100): +    def dac_bist(self, taps_from_center=100):          """          A quick BIST of the DAC, proving it is (a) alive and (b) can shift the clock. diff --git a/mpm/python/usrp_mpm/dboard_manager/lmk_mg.py b/mpm/python/usrp_mpm/dboard_manager/lmk_mg.py index 3cb6ea7c9..e7327ee83 100644 --- a/mpm/python/usrp_mpm/dboard_manager/lmk_mg.py +++ b/mpm/python/usrp_mpm/dboard_manager/lmk_mg.py @@ -40,13 +40,13 @@ class LMK04828Mg(LMK04828):          self.pll2_vco_freq  = (self.vcxo_freq/self.pll2_r_divider)*self.pll2_prescaler*self.pll2_n_divider          self.log.trace("Variable Configuration Report: "                         "clkin1_r = 0d{}, clkout_div = 0d{}, pll1_n = 0d{}" -           .format(self.clkin_r_divider, self.clkout_divider, self.pll1_n_divider)) +                       .format(self.clkin_r_divider, self.clkout_divider, self.pll1_n_divider))          self.log.trace("Variable Configuration Report: "                         "sysref_divider = 0d{}, pll2_pre = 0d{}, pll2_n = 0d{}" -           .format(self.sysref_divider, self.pll2_prescaler, self.pll2_n_divider)) +                       .format(self.sysref_divider, self.pll2_prescaler, self.pll2_n_divider))          self.log.trace("Variable Configuration Report: "                         "pll2_vco_freq = 0d{}" -           .format(self.pll2_vco_freq)) +                       .format(self.pll2_vco_freq))          # Run .init() and .config() right off the bat. Save clock shifty-ness for later.          self.init()          self.config() @@ -232,7 +232,8 @@ class LMK04828Mg(LMK04828):          Apply time shift using the dynamic digital delays inside the LMK.          """          self.log.trace("Clock Shifting Commencing using Dynamic Digital Delay...") -        ddly_value = self.divide_to_cnth_cntl_reg(self.clkout_divider+1) if num_shifts >= 0 else self.divide_to_cnth_cntl_reg(self.clkout_divider-1) +        ddly_value = self.divide_to_cnth_cntl_reg(self.clkout_divider+1) \ +                if num_shifts >= 0 else self.divide_to_cnth_cntl_reg(self.clkout_divider-1)          ddly_value_sysref = self.sysref_divider+1 if num_shifts >= 0 else self.sysref_divider-1          self.pokes8((              (0x141, 0xB1), # Dynamic digital delay enable on outputs 0, 8, 10 @@ -248,7 +249,7 @@ class LMK04828Mg(LMK04828):              (0x13D, (ddly_value_sysref & 0x00FF) >> 0), # SYSREF DDLY value [7:0]              (0x144, 0x4E), # Enable SYNC on outputs 0, 8, 10          )) -        for x in range(abs(num_shifts)): +        for _ in range(abs(num_shifts)):              self.poke8(0x142, 0x1)          # Put everything back the way it was before shifting.          self.poke8(0x144, 0xFF) # Disable SYNC on all outputs including SYSREF diff --git a/mpm/python/usrp_mpm/dboard_manager/magnesium.py b/mpm/python/usrp_mpm/dboard_manager/magnesium.py index 7d56dea67..0eaf25ae1 100644 --- a/mpm/python/usrp_mpm/dboard_manager/magnesium.py +++ b/mpm/python/usrp_mpm/dboard_manager/magnesium.py @@ -933,8 +933,8 @@ class Magnesium(DboardManagerBase):      def dump_jesd_core(self):          " Debug method to dump all JESD core regs "          with open_uio( -                label="dboard-regs-{}".format(self.slot_idx), -                read_only=False +            label="dboard-regs-{}".format(self.slot_idx), +            read_only=False          ) as dboard_ctrl_regs:              for i in range(0x2000, 0x2110, 0x10):                  print(("0x%04X " % i), end=' ') @@ -947,8 +947,8 @@ class Magnesium(DboardManagerBase):          Debug for accessing the DB Core registers via the RPC shell.          """          with open_uio( -                label="dboard-regs-{}".format(self.slot_idx), -                read_only=False +            label="dboard-regs-{}".format(self.slot_idx), +            read_only=False          ) as dboard_ctrl_regs:              rd_data = dboard_ctrl_regs.peek32(addr)              self.log.trace("DB Core Register 0x{:04X} response: 0x{:08X}".format(addr, rd_data)) @@ -959,8 +959,8 @@ class Magnesium(DboardManagerBase):          Debug for accessing the DB Core registers via the RPC shell.          """          with open_uio( -                label="dboard-regs-{}".format(self.slot_idx), -                read_only=False +            label="dboard-regs-{}".format(self.slot_idx), +            read_only=False          ) as dboard_ctrl_regs:              self.log.trace("Writing DB Core Register 0x{:04X} with 0x{:08X}...".format(addr, data))              dboard_ctrl_regs.poke32(addr, data) diff --git a/mpm/python/usrp_mpm/discovery.py b/mpm/python/usrp_mpm/discovery.py index 2efd25b80..3adf98b28 100644 --- a/mpm/python/usrp_mpm/discovery.py +++ b/mpm/python/usrp_mpm/discovery.py @@ -81,14 +81,14 @@ def _discovery_process(state, discovery_addr):                  continue              if data.strip(b"\0") == b"MPM-DISC":                  log.debug("Sending discovery response to %s port: %d", -                         sender[0], sender[1]) +                          sender[0], sender[1])                  resp_str = create_response_string(state)                  send_data = resp_str                  log.trace("Return data: %s", send_data)                  send_sock.sendto(send_data, sender)              elif data.strip(b"\0").startswith(b"MPM-ECHO"):                  log.debug("Received echo request from {sender}" -                         .format(sender=sender[0])) +                          .format(sender=sender[0]))                  send_data = data                  try:                      send_sock.sendto(send_data, sender) diff --git a/mpm/python/usrp_mpm/periph_manager/base.py b/mpm/python/usrp_mpm/periph_manager/base.py index 6e72950fb..60eaee244 100644 --- a/mpm/python/usrp_mpm/periph_manager/base.py +++ b/mpm/python/usrp_mpm/periph_manager/base.py @@ -13,7 +13,6 @@ from hashlib import md5  from time import sleep  from concurrent import futures  from builtins import str -from builtins import range  from builtins import object  from six import iteritems, itervalues  from usrp_mpm.mpmlog import get_logger  | 
