Пример #1
0
    def __init__(self,
                 name="Top",
                 description="Container for HPS BLD",
                 ipAddr='10.0.1.101',
                 memBase=0,
                 **kwargs):
        super().__init__(name=name, description=description, **kwargs)

        ################################################################################################################
        # UDP_SRV_XVC_IDX_C         => 2542,  -- Xilinx XVC
        # UDP_SRV_SRPV0_IDX_C       => 8192,  -- Legacy SRPv0 register access (still used for remote FPGA reprogramming)
        # UDP_SRV_RSSI0_IDX_C       => 8193,  -- Legacy Non-interleaved RSSI for Register access and ASYNC messages
        # UDP_SRV_RSSI1_IDX_C       => 8194,  -- Legacy Non-interleaved RSSI for bulk data transfer
        # UDP_SRV_BP_MGS_IDX_C      => 8195,  -- Backplane Messaging
        # UDP_SRV_TIMING_IDX_C      => 8197,  -- Timing ASYNC Messaging
        # UDP_SRV_RSSI_ILEAVE_IDX_C => 8198);  -- Interleaved RSSI
        ################################################################################################################

        # Create SRP/ASYNC_MSG interface
        if False:
            # UDP only
            self.udp = rogue.protocols.udp.Client(ipAddr, 8192, 0)

            # Connect the SRPv0 to RAW UDP
            self.srp = rogue.protocols.srp.SrpV0()
            pyrogue.streamConnectBiDir(self.srp, self.udp)

        if True:
            self.rudp = pyrogue.protocols.UdpRssiPack(name='rudpReg',
                                                      host=ipAddr,
                                                      port=8193,
                                                      packVer=1,
                                                      jumbo=False)

            # Connect the SRPv3 to tDest = 0x0
            self.srp = rogue.protocols.srp.SrpV3()
            pr.streamConnectBiDir(self.srp, self.rudp.application(dest=0x0))

            # Create stream interface
            #self.stream = pr.protocols.UdpRssiPack( name='rudpData', host=ipAddr, port=8194, packVer = 1, jumbo = False)

        ######################################################################

        # Add devices
        self.add(
            axi.AxiVersion(
                memBase=self.srp,
                offset=0x00000000,
                expand=False,
            ))

        self.add(
            xil.AxiSysMonUltraScale(memBase=self.srp,
                                    offset=0x01000000,
                                    expand=False))

        self.add(
            micron.AxiMicronN25Q(
                memBase=self.srp,
                name="MicronN25Q",
                offset=0x02000000,
                addrMode=True,
                expand=False,
                hidden=True,
            ))

        self.add(microchip.AxiSy56040(
            memBase = self.srp,
            offset       =  0x03000000,
            expand       =  False,
            description  = "\n\
                Timing Crossbar:  https://confluence.slac.stanford.edu/x/m4H7D   \n\
                -----------------------------------------------------------------\n\
                OutputConfig[0] = 0x0: Connects RTM_TIMING_OUT0 to RTM_TIMING_IN0\n\
                OutputConfig[0] = 0x1: Connects RTM_TIMING_OUT0 to FPGA_TIMING_IN\n\
                OutputConfig[0] = 0x2: Connects RTM_TIMING_OUT0 to BP_TIMING_IN\n\
                OutputConfig[0] = 0x3: Connects RTM_TIMING_OUT0 to RTM_TIMING_IN1\n\
                -----------------------------------------------------------------\n\
                OutputConfig[1] = 0x0: Connects FPGA_TIMING_OUT to RTM_TIMING_IN0\n\
                OutputConfig[1] = 0x1: Connects FPGA_TIMING_OUT to FPGA_TIMING_IN\n\
                OutputConfig[1] = 0x2: Connects FPGA_TIMING_OUT to BP_TIMING_IN\n\
                OutputConfig[1] = 0x3: Connects FPGA_TIMING_OUT to RTM_TIMING_IN1 \n\
                -----------------------------------------------------------------\n\
                OutputConfig[2] = 0x0: Connects Backplane DIST0 to RTM_TIMING_IN0\n\
                OutputConfig[2] = 0x1: Connects Backplane DIST0 to FPGA_TIMING_IN\n\
                OutputConfig[2] = 0x2: Connects Backplane DIST0 to BP_TIMING_IN\n\
                OutputConfig[2] = 0x3: Connects Backplane DIST0 to RTM_TIMING_IN1\n\
                -----------------------------------------------------------------\n\
                OutputConfig[3] = 0x0: Connects Backplane DIST1 to RTM_TIMING_IN0\n\
                OutputConfig[3] = 0x1: Connects Backplane DIST1 to FPGA_TIMING_IN\n\
                OutputConfig[3] = 0x2: Connects Backplane DIST1 to BP_TIMING_IN\n\
                OutputConfig[3] = 0x3: Connects Backplane DIST1 to RTM_TIMING_IN1\n\
                -----------------------------------------------------------------\n"\
            ))

        #        self.add(ti.AxiCdcm6208(
        #            memBase = self.srp,
        #            offset       =  0x05000000,
        #            expand       =  False,
        #        ))

        self.add(
            timing.TimingFrameRx(
                memBase=self.srp,
                name='UsTiming',
                offset=0x08000000,
            ))

        self.add(
            hps.AmcCarrierBsa(
                memBase=self.srp,
                name='AmcCarrierBsa',
                offset=0x09000000,
            ))
Пример #2
0
    def __init__(self,
                 name="Top",
                 description="Container for XPM",
                 ipAddr='10.0.1.101',
                 memBase=0,
                 fidPrescale=200,
                 **kwargs):
        super().__init__(name=name, description=description, **kwargs)

        ################################################################################################################
        # UDP_SRV_XVC_IDX_C         => 2542,  -- Xilinx XVC
        # UDP_SRV_SRPV0_IDX_C       => 8192,  -- Legacy SRPv0 register access (still used for remote FPGA reprogramming)
        # UDP_SRV_RSSI0_IDX_C       => 8193,  -- Legacy Non-interleaved RSSI for Register access and ASYNC messages
        # UDP_SRV_RSSI1_IDX_C       => 8194,  -- Legacy Non-interleaved RSSI for bulk data transfer
        # UDP_SRV_BP_MGS_IDX_C      => 8195,  -- Backplane Messaging
        # UDP_SRV_TIMING_IDX_C      => 8197,  -- Timing ASYNC Messaging
        # UDP_SRV_RSSI_ILEAVE_IDX_C => 8198);  -- Interleaved RSSI
        ################################################################################################################

        # Create SRP/ASYNC_MSG interface
        if False:
            # UDP only
            self.udp = rogue.protocols.udp.Client(ipAddr, 8192, 0)

            # Connect the SRPv0 to RAW UDP
            self.srp = rogue.protocols.srp.SrpV0()
            pyrogue.streamConnectBiDir(self.srp, self.udp)

        if True:
            self.rudp = pyrogue.protocols.UdpRssiPack(name='rudpReg',
                                                      host=ipAddr,
                                                      port=8193,
                                                      packVer=1,
                                                      jumbo=False)

            # Connect the SRPv3 to tDest = 0x0
            self.srp = rogue.protocols.srp.SrpV3()
            pr.streamConnectBiDir(self.srp, self.rudp.application(dest=0x0))

            # Create stream interface
            self.stream = pr.protocols.UdpRssiPack(name='rudpData',
                                                   host=ipAddr,
                                                   port=8194,
                                                   packVer=1,
                                                   jumbo=False)

        ######################################################################

        # Add devices
        self.add(
            axi.AxiVersion(
                memBase=self.srp,
                offset=0x00000000,
                expand=False,
            ))

        self.add(
            xil.AxiSysMonUltraScale(memBase=self.srp,
                                    offset=0x01000000,
                                    expand=False))

        self.add(
            micron.AxiMicronN25Q(
                memBase=self.srp,
                name="MicronN25Q",
                offset=0x2000000,
                addrMode=True,
                expand=False,
                hidden=True,
            ))

        self.add(microchip.AxiSy56040(
            memBase = self.srp,
            offset       =  0x03000000,
            expand       =  False,
            description  = "\n\
                Timing Crossbar:  https://confluence.slac.stanford.edu/x/m4H7D   \n\
                -----------------------------------------------------------------\n\
                OutputConfig[0] = 0x0: Connects RTM_TIMING_OUT0 to RTM_TIMING_IN0\n\
                OutputConfig[0] = 0x1: Connects RTM_TIMING_OUT0 to FPGA_TIMING_IN\n\
                OutputConfig[0] = 0x2: Connects RTM_TIMING_OUT0 to BP_TIMING_IN\n\
                OutputConfig[0] = 0x3: Connects RTM_TIMING_OUT0 to RTM_TIMING_IN1\n\
                -----------------------------------------------------------------\n\
                OutputConfig[1] = 0x0: Connects FPGA_TIMING_OUT to RTM_TIMING_IN0\n\
                OutputConfig[1] = 0x1: Connects FPGA_TIMING_OUT to FPGA_TIMING_IN\n\
                OutputConfig[1] = 0x2: Connects FPGA_TIMING_OUT to BP_TIMING_IN\n\
                OutputConfig[1] = 0x3: Connects FPGA_TIMING_OUT to RTM_TIMING_IN1 \n\
                -----------------------------------------------------------------\n\
                OutputConfig[2] = 0x0: Connects Backplane DIST0 to RTM_TIMING_IN0\n\
                OutputConfig[2] = 0x1: Connects Backplane DIST0 to FPGA_TIMING_IN\n\
                OutputConfig[2] = 0x2: Connects Backplane DIST0 to BP_TIMING_IN\n\
                OutputConfig[2] = 0x3: Connects Backplane DIST0 to RTM_TIMING_IN1\n\
                -----------------------------------------------------------------\n\
                OutputConfig[3] = 0x0: Connects Backplane DIST1 to RTM_TIMING_IN0\n\
                OutputConfig[3] = 0x1: Connects Backplane DIST1 to FPGA_TIMING_IN\n\
                OutputConfig[3] = 0x2: Connects Backplane DIST1 to BP_TIMING_IN\n\
                OutputConfig[3] = 0x3: Connects Backplane DIST1 to RTM_TIMING_IN1\n\
                -----------------------------------------------------------------\n"\
            ))

        self.add(
            ti.AxiCdcm6208(
                memBase=self.srp,
                offset=0x05000000,
                expand=False,
            ))

        self.add(
            xpm.TimingFrameRx(
                memBase=self.srp,
                name='UsTiming',
                offset=0x08000000,
            ))

        self.add(
            xpm.TimingFrameRx(
                memBase=self.srp,
                name='CuTiming',
                offset=0x08400000,
            ))

        self.add(
            xpm.CuGenerator(
                memBase=self.srp,
                name='CuGenerator',
                offset=0x08800000,
            ))

        for i in range(len(Top.mmcmParms)):
            self.add(
                xpm.MmcmPhaseLock(
                    memBase=self.srp,
                    name=Top.mmcmParms[i][0],
                    offset=Top.mmcmParms[i][1],
                ))

        hsrParms = [['HSRep0', 0x09000000], ['HSRep1', 0x09010000],
                    ['HSRep2', 0x09020000], ['HSRep3', 0x09030000],
                    ['HSRep4', 0x09040000], ['HSRep5', 0x09050000]]
        for i in range(len(hsrParms)):
            self.add(
                xpm.Ds125br401(
                    memBase=self.srp,
                    name=hsrParms[i][0],
                    offset=hsrParms[i][1],
                ))

        self.amcs = []
        for i in range(2):
            amc = xpm.MpsSfpAmc(
                memBase=self.srp,
                name='Amc%d' % i,
                offset=0x09000000 + (i + 1) * 0x100000,
            )
            self.add(amc)
            self.amcs.append(amc)

#        self.add(timing.GthRxAlignCheck(
        self.add(
            xpm.GthRxAlignCheck(
                memBase=self.srp,
                name='UsGthRxAlign',
                offset=0x0b000000,
            ))

        #        self.add(timing.GthRxAlignCheck(
        self.add(
            xpm.GthRxAlignCheck(
                memBase=self.srp,
                name='CuGthRxAlign',
                offset=0x0c000000,
            ))

        self.add(
            xpm.XpmApp(
                memBase=self.srp,
                name='XpmApp',
                offset=0x80000000,
                fidPrescale=fidPrescale,
            ))

        self.add(
            AxiLiteRingBuffer(
                memBase=self.srp,
                name='AxiLiteRingBuffer',
                datawidth=16,
                offset=0x80010000,
            ))

        self.add(
            xpm.XpmSequenceEngine(
                memBase=self.srp,
                name='SeqEng_0',
                offset=0x80020000,
            ))

        #        self.add(xpm.CuPhase(
        #            memBase = self.srp,
        #            name = 'CuPhase',
        #            offset = 0x80050000,
        #        ))

        self.add(
            xpm.XpmPhase(
                memBase=self.srp,
                name='CuToScPhase',
                offset=0x80050000,
            ))
Пример #3
0
        self._Data   = [[None for elink in range(6)]   for sfp in range(2)]

        # Create the mmap interface
        self._RceMemMap = rogue.hardware.axi.AxiMemMap('/dev/rce_memmap')

        # Add RCE version device
        self.add(rce.RceVersion(
            description = 'firmware/submodules/rce-gen3-fw-lib/python/RceG3/_RceVersion.py'
            intOffset   = 0xB0000000, # Internal registers offset (zynq=0x80000000, zynquplus=0xB0000000)
            bsiOffset   = 0xB0010000, # BSI I2C Slave Registers   (zynq=0x84000000, zynquplus=0xB0010000)
            memBase     = self._RceMemMap,
        ))

        # Add the AxiVersion device
        self.add(axi.AxiVersion(
            description = 'firmware/submodules/surf/python/surf/axi/_AxiVersion.py',
            offset      = (0xB400_0000 + 0*0x0010_0000),
            memBase     = self._RceMemMap,
        ))

        # Add Jitter cleaner PLL device
        self.add(silabs.Si5345(
            name        = 'Pll[0]',
            description = 'firmware/submodules/surf/python/surf/devices/silabs/_Si5345.py: FMC_HPC[1]',
            offset      = (0xB400_0000 + 1*0x0010_0000),
            memBase     = self._RceMemMap,
        ))

        self.add(silabs.Si5345(
            name        = 'Pll[1]',
            description = 'firmware/submodules/surf/python/surf/devices/silabs/_Si5345.py: FMC_HPC[0]',