コード例 #1
0
ファイル: base.py プロジェクト: yunqu/RFSoC2x2-PYNQ
    def init_rf_clks(self, lmk_freq=122.88, lmx_freq=409.6):
        """Initialise the LMK and LMX clocks for the radio hierarchy.

        The radio clocks are required to talk to the RF-DCs and only need
        to be initialised once per session.

        """
        if not self.rfclks_initialized:
            self.assert_lmk_reset()
            self.deassert_lmk_reset()
            if not self.i2c_initialized:
                self.init_i2c()
            xrfclk.set_ref_clks(lmk_freq=lmk_freq, lmx_freq=lmx_freq)
            self.rfclks_initialized = True
コード例 #2
0
    def __init__(self,
                 bitfile_name=None,
                 init_rf_clks=True,
                 dark_theme=False,
                 presentation_mode=False,
                 **kwargs):
        """Construct a new QpskOverlay

        bitfile_name: Optional. If left None, the 'rfsoc_qpsk.bit' bundled with this
                      rfsoc-qpsk package will be used.

        init_rf_clks: If true (default), the reference clocks are configured
                      for all tiles. If the clocks are already configured, set
                      to false for faster execution.

        dark_theme: Flat to enable a dark theme for plots

        presentation_mode: Flag to enable a dark theme with thick lines and
                           bigger font

        """

        # Generate default bitfile name
        if bitfile_name is None:
            this_dir = os.path.dirname(__file__)
            bitfile_name = os.path.join(this_dir, 'bitstream',
                                        'rfsoc_qpsk.bit')

        # Set optional theming for dark mode
        if dark_theme:
            from IPython.display import display, HTML
            import plotly.io as pio

            # Apply plotly theming
            dark_template = pio.templates['plotly_dark']
            dark_template.layout.paper_bgcolor = 'rgb(0,0,0,0)'
            dark_template.layout.plot_bgcolor = 'rgb(0,0,0,0)'
            dark_template.layout.legend.bgcolor = 'rgb(0,0,0,0)'
            pio.templates['dark_plot'] = dark_template
            pio.templates.default = 'dark_plot'

        # Set optional theming for presentation mode
        if presentation_mode:
            from IPython.display import display, HTML
            import plotly.io as pio

            # Apply plotly theming
            pio.templates.default = 'plotly_dark+presentation'

            # Force dark style for ipywidget tab background
            display(
                HTML("""
            <style>
            .jupyter-widgets.widget-tab > .widget-tab-contents {
              background: inherit !important;
            }
            </style>
            """))

        # Create Overlay
        super().__init__(bitfile_name, **kwargs)

        # Extact in-use dataconverter objects with friendly names
        self.rf = self.usp_rf_data_converter_0
        self.adc_tile = self.rf.adc_tiles[0]
        self.adc_block = self.adc_tile.blocks[0]
        self.init_i2c()
        self.dac_tile = self.rf.dac_tiles[0]
        self.dac_block = self.dac_tile.blocks[0]

        # Start up LMX clock
        if init_rf_clks:
            xrfclk.set_ref_clks()

        # Set sane DAC defaults
        self.dac_tile.DynamicPLLConfig(1, 409.6, 1228.8)
        self.dac_block.NyquistZone = 2
        self.dac_block.MixerSettings = {
            'CoarseMixFreq': xrfdc.COARSE_MIX_BYPASS,
            'EventSource': xrfdc.EVNT_SRC_IMMEDIATE,
            'FineMixerScale': xrfdc.MIXER_SCALE_1P0,
            'Freq': 1000,
            'MixerMode': xrfdc.MIXER_MODE_C2R,
            'MixerType': xrfdc.MIXER_TYPE_FINE,
            'PhaseOffset': 0.0
        }
        self.dac_block.UpdateEvent(xrfdc.EVENT_MIXER)
        self.dac_tile.SetupFIFO(True)

        # Set sane ADC defaults
        self.adc_tile.DynamicPLLConfig(1, 409.6, 1228.8)
        self.adc_block.NyquistZone = 2
        self.adc_block.MixerSettings = {
            'CoarseMixFreq': xrfdc.COARSE_MIX_BYPASS,
            'EventSource': xrfdc.EVNT_SRC_TILE,
            'FineMixerScale': xrfdc.MIXER_SCALE_1P0,
            'Freq': 1000,
            'MixerMode': xrfdc.MIXER_MODE_R2C,
            'MixerType': xrfdc.MIXER_TYPE_FINE,
            'PhaseOffset': 0.0
        }
        self.adc_block.UpdateEvent(xrfdc.EVENT_MIXER)
        self.adc_tile.SetupFIFO(True)

        # Touch RX and TX drivers for strict evaluation
        self.qpsk_tx.qpsk_tx.enable = 1
        self.qpsk_rx.qpsk_rx_dec.enable = 1
        self.qpsk_rx.qpsk_rx_csync.enable = 1
        self.qpsk_rx.qpsk_rx_rrc.enable = 1
        self.qpsk_rx.qpsk_rx_tsync.enable = 1

        self.timers = TimerRegistry()
コード例 #3
0
ファイル: overlay.py プロジェクト: lbrown65/rfsoc_sam
 def init_rf_clks(self, lmk_freq=122.88, lmx_freq=409.6):
     """Initialise the LMX and LMK clocks for RF-DC operation.
     """
     xrfclk.set_ref_clks(lmk_freq=lmk_freq, lmx_freq=lmx_freq)
コード例 #4
0
    def __init__(self, bitfile_name=None, init_rf_clks=True, **kwargs):

        # Generate default bitfile name
        if bitfile_name is None:
            this_dir = os.path.dirname(__file__)
            bitfile_name = os.path.join(this_dir, 'bitstream',
                                        'rfsoc_radio.bit')

        # Create Overlay
        super().__init__(bitfile_name, **kwargs)

        # Initialise I2C
        self.init_i2c()

        # Extract friendly dataconverter names
        self.rf = self.usp_rf_data_converter
        self.dac_tile = self.rf.dac_tiles[1]
        self.dac_block = self.dac_tile.blocks[0]
        self.adc_tile = self.rf.adc_tiles[2]
        self.adc_block = self.adc_tile.blocks[0]

        # Start up LMX clock
        if init_rf_clks:
            xrfclk.set_ref_clks()

        # Set DAC defaults
        self.dac_tile.DynamicPLLConfig(1, 409.6, 1024)
        self.dac_block.NyquistZone = 1
        self.dac_block.MixerSettings = {
            'CoarseMixFreq': xrfdc.COARSE_MIX_BYPASS,
            'EventSource': xrfdc.EVNT_SRC_IMMEDIATE,
            'FineMixerScale': xrfdc.MIXER_SCALE_1P0,
            'Freq': 64,
            'MixerMode': xrfdc.MIXER_MODE_C2R,
            'MixerType': xrfdc.MIXER_TYPE_FINE,
            'PhaseOffset': 0.0
        }
        self.dac_block.UpdateEvent(xrfdc.EVENT_MIXER)
        self.dac_tile.SetupFIFO(True)

        # Set ADC defaults
        self.adc_tile.DynamicPLLConfig(1, 409.6, 1024)
        self.adc_block.NyquistZone = 1
        self.adc_block.MixerSettings = {
            'CoarseMixFreq': xrfdc.COARSE_MIX_BYPASS,
            'EventSource': xrfdc.EVNT_SRC_TILE,
            'FineMixerScale': xrfdc.MIXER_SCALE_1P0,
            'Freq': 64,
            'MixerMode': xrfdc.MIXER_MODE_R2C,
            'MixerType': xrfdc.MIXER_TYPE_FINE,
            'PhaseOffset': 0.0
        }
        self.adc_block.UpdateEvent(xrfdc.EVENT_MIXER)
        self.adc_tile.SetupFIFO(True)

        # Obtain friendly names for IP Cores and associated drivers
        self.receiver = BpskReceiver(
            self.axi_dma_rx, self.bpsk_receiver,
            self.DataInspector)  # The receiver is coupled with an inspector
        self.transmitter = BpskTransmitter(self.axi_dma_tx,
                                           self.bpsk_transmitter)

        # Receiver setup requirements - pull resets low
        self.receiver.controller.reset_time_sync = 0
        self.receiver.controller.reset_phase_sync = 0
        self.receiver.controller.reset_frame_sync = 0