Beispiel #1
0
    def __init__(self, core_file=None, name=None, core_root=None):
        if core_file:
            basename = os.path.basename(core_file)
        self.depend = []
        self.simulators = []

        self.plusargs = None
        self.provider = None
        self.system   = None

        for s in section.SECTION_MAP:
            assert(not hasattr(self, s))
            setattr(self, s, None)

        self.core_root = os.path.dirname(core_file)
        self.files_root = self.core_root

        if core_file:

            self.name = basename.split('.core')[0]
            config = FusesocConfigParser(core_file)

            #FIXME : Make simulators part of the core object
            self.simulator        = config.get_section('simulator')

            for s in section.load_all(config, name=self.name):
                setattr(self, s.TAG, s)
            self.depend     = self.main.depend
            self.simulators = self.main.simulators

            self.pre_build_scripts  = config.get_list('scripts','pre_build_scripts')
            self.pre_run_scripts  = config.get_list('scripts','pre_run_scripts')
            self.post_run_scripts = config.get_list('scripts','post_run_scripts')

            cache_root = os.path.join(Config().cache_root, self.name)
            if config.has_section('plusargs'):
                self.plusargs = Plusargs(dict(config.items('plusargs')))
            if config.has_section('provider'):
                items    = dict(config.items('provider'))

                provider_name = items.get('name')
                if provider_name is None:
                    raise RuntimeError('Missing "name" in section [provider]')
                try:
                    provider_module = importlib.import_module(
                            'fusesoc.provider.%s' % provider_name)
                    self.provider = provider_module.PROVIDER_CLASS(self.name,
                        items, self.core_root, cache_root)
                except ImportError:
                    raise
            if self.provider:
                self.files_root = self.provider.files_root

            system_file = os.path.join(self.core_root, self.name+'.system')
            if os.path.exists(system_file):
                self.system = System(system_file)
        else:
            self.name = name
            self.provider = None
Beispiel #2
0
    def _merge_system_file(self, system_file, config):
        def _replace(sec, src=None, dst=None):
            if not system.has_section(sec):
                return

            if not config.has_section(sec):
                config.add_section(sec)

            if src:
                if system.has_option(sec, src):
                    items = [src]
                else:
                    items = []
            else:
                items = system.options(sec)

            for item in items:
                if dst:
                    _dst = dst
                else:
                    _dst = item
                if not config.has_option(sec, _dst):
                    config.set(sec, _dst, system.get(sec, item))

        system = FusesocConfigParser(system_file)
        for section in ['icestorm', 'ise', 'quartus', 'vivado']:
            _replace(section)

        _replace('main', 'backend')
        _replace('scripts', 'pre_build_scripts', 'pre_synth_scripts')
        _replace('scripts', 'post_build_scripts', 'post_impl_scripts')
Beispiel #3
0
    def __init__(self, system_file):
        self.backend_name = None

        self.system_root = os.path.dirname(system_file)
        self.config = FusesocConfigParser(system_file)

        self.pre_build_scripts = self.config.get_list('scripts',
                                                      'pre_build_scripts')
        self.post_build_scripts = self.config.get_list('scripts',
                                                       'post_build_scripts')

        if self.config.has_option('main', 'backend'):
            self.backend_name = self.config.get('main', 'backend')
            self.backend = section.load_section(self.config,
                                                self.backend_name,
                                                file_name=system_file)
Beispiel #4
0
class System:
    def __init__(self, system_file):
        self.backend_name = None

        self.system_root = os.path.dirname(system_file)
        self.config = FusesocConfigParser(system_file)


        self.pre_build_scripts  = self.config.get_list('scripts','pre_build_scripts')
        self.post_build_scripts = self.config.get_list('scripts','post_build_scripts')

        if self.config.has_option('main', 'backend'):
            self.backend_name = self.config.get('main','backend')
            self.backend = section.load_section(self.config, self.backend_name,
                                                file_name=system_file)


    def info(self):
        print("\nSYSTEM INFO")
        print(self.backend)
Beispiel #5
0
    def __init__(self, system_file):
        logger.debug('__init__() *Entered*' + '\n    system_file=' +
                     str(system_file))
        self.backend_name = None

        system_root = os.path.dirname(system_file)
        self.config = FusesocConfigParser(system_file)

        self.name = os.path.basename(system_file).split('.')[0]

        self.pre_build_scripts = self.config.get_list('scripts',
                                                      'pre_build_scripts')
        self.post_build_scripts = self.config.get_list('scripts',
                                                       'post_build_scripts')

        if self.config.has_option('main', 'backend'):
            self.backend_name = self.config.get('main', 'backend')
            if self.backend_name and self.config.has_section(
                    self.backend_name):
                self.backend = dict(self.config.items(self.backend_name))

        logger.debug('__init__() -Done-')
Beispiel #6
0
class System:
    def __init__(self, system_file):
        self.backend_name = None

        self.system_root = os.path.dirname(system_file)
        self.config = FusesocConfigParser(system_file)

        self.name = os.path.basename(system_file).split('.')[0]

        self.pre_build_scripts = self.config.get_list('scripts',
                                                      'pre_build_scripts')
        self.post_build_scripts = self.config.get_list('scripts',
                                                       'post_build_scripts')

        if self.config.has_option('main', 'backend'):
            self.backend_name = self.config.get('main', 'backend')
            self.backend = section.load_section(self.config,
                                                self.backend_name,
                                                name=self.name)

    def info(self):
        print("\nSYSTEM INFO")
        print(self.backend)
Beispiel #7
0
class System:
    def __init__(self, system_file):
        logger.debug('__init__() *Entered*' +
                     '\n    system_file=' + str(system_file)
                    )
        self.backend_name = None

        self.system_root = os.path.dirname(system_file)
        self.config = FusesocConfigParser(system_file)

        self.name = os.path.basename(system_file).split('.')[0]

        self.pre_build_scripts  = self.config.get_list('scripts','pre_build_scripts')
        self.post_build_scripts = self.config.get_list('scripts','post_build_scripts')

        if self.config.has_option('main', 'backend'):
            self.backend_name = self.config.get('main','backend')
            self.backend = Section.factory(self.backend_name, self.config.get_section(self.backend_name))

        logger.debug('__init__() -Done-')

    def info(self):
        logger.debug('info() *Entered*')
        print("\nSYSTEM INFO")
        print("Name:                   " + self.name)

        show_list = lambda s: "\n                        ".join(s.split('\n'))

        if self.backend_name:
            print("Backend name:           " + self.backend_name)
            print("    family:             " + self.backend['family'])
            print("    device:             " + self.backend['device'])

            print("\n    tcl_files:          " + show_list(self.backend['tcl_files']))
            print("\n    sdc_files:          " + show_list(self.backend['sdc_files']))
            logger.debug('info() -Done-')
Beispiel #8
0
    def __init__(self, system_file):
        self.backend_name = None

        self.system_root = os.path.dirname(system_file)
        self.config = FusesocConfigParser(system_file)

        self.name = os.path.basename(system_file).split('.')[0]

        self.pre_build_scripts  = self.config.get_list('scripts','pre_build_scripts')
        self.post_build_scripts = self.config.get_list('scripts','post_build_scripts')

        if self.config.has_option('main', 'backend'):
            self.backend_name = self.config.get('main','backend')
            self.backend = section.load_section(self.config, self.backend_name,
                    name=self.name)
Beispiel #9
0
    def __init__(self, system_file):
        logger.debug('__init__() *Entered*' +
                     '\n    system_file=' + str(system_file)
                    )
        self.backend_name = None

        self.system_root = os.path.dirname(system_file)
        self.config = FusesocConfigParser(system_file)

        self.name = os.path.basename(system_file).split('.')[0]

        self.pre_build_scripts  = self.config.get_list('scripts','pre_build_scripts')
        self.post_build_scripts = self.config.get_list('scripts','post_build_scripts')

        if self.config.has_option('main', 'backend'):
            self.backend_name = self.config.get('main','backend')
            self.backend = Section.factory(self.backend_name, self.config.get_section(self.backend_name))

        logger.debug('__init__() -Done-')
Beispiel #10
0
class System:
    def __init__(self, system_file):
        logger.debug('__init__() *Entered*' + '\n    system_file=' +
                     str(system_file))
        self.backend_name = None

        system_root = os.path.dirname(system_file)
        self.config = FusesocConfigParser(system_file)

        self.name = os.path.basename(system_file).split('.')[0]

        self.pre_build_scripts = self.config.get_list('scripts',
                                                      'pre_build_scripts')
        self.post_build_scripts = self.config.get_list('scripts',
                                                       'post_build_scripts')

        if self.config.has_option('main', 'backend'):
            self.backend_name = self.config.get('main', 'backend')
            if self.backend_name and self.config.has_section(
                    self.backend_name):
                self.backend = dict(self.config.items(self.backend_name))

        logger.debug('__init__() -Done-')

    def info(self):
        logger.debug('info() *Entered*')
        print("\nSYSTEM INFO")
        print("Name:                   " + self.name)

        show_list = lambda s: "\n                        ".join(s.split('\n'))

        if self.backend_name:
            print("Backend name:           " + self.backend_name)
            print("    family:             " + self.backend['family'])
            print("    device:             " + self.backend['device'])

            print("\n    tcl_files:          " +
                  show_list(self.backend['tcl_files']))
            print("\n    sdc_files:          " +
                  show_list(self.backend['sdc_files']))
            logger.debug('info() -Done-')
Beispiel #11
0
    def __init__(self, core_file=None, name=None, core_root=None):
        logger.debug('__init__() *Entered*' +
                     '\n    core_file=' + str(core_file) +
                     '\n    name=' + str(name) + 
                     '\n    core_root=' + str(core_root)
                    )
        if core_file:
            basename = os.path.basename(core_file)
        self.depend = []
        self.simulators = []

        self.plusargs = None
        self.provider = None
        self.system   = None
        self.verilog  = None
        self.vpi = None
        if core_file:
            config = FusesocConfigParser(core_file)

            if config.has_option('main', 'name'):
                self.name = config.get('main','name')
            else:
                self.name = basename.split('.core')[0]

            self.depend     = config.get_list('main', 'depend')
            self.simulators = config.get_list('main', 'simulators')

            #FIXME : Make simulators part of the core object
            self.simulator        = config.get_section('simulator')
            self.icarus    = IcarusSection(config.get_section('icarus'))
            self.modelsim  = ModelsimSection(config.get_section('modelsim'))
            self.verilator = VerilatorSection(config.get_section('verilator'))
            self.pre_run_scripts  = config.get_list('scripts','pre_run_scripts')
            self.post_run_scripts = config.get_list('scripts','post_run_scripts')

            logger.debug('name=' + str(self.name))
            self.core_root = os.path.dirname(core_file)

            if config.has_section('plusargs'):
                self.plusargs = Plusargs(dict(config.items('plusargs')))
            if config.has_section('provider'):
                self.cache_dir = os.path.join(Config().cache_root, self.name)
                self.files_root = self.cache_dir
                items    = config.items('provider')
                self.provider = ProviderFactory(dict(items))
            else:
                self.files_root = self.core_root

            if config.has_section('verilog'):
                self.verilog = Verilog()
                items = config.items('verilog')
                self.verilog.load_items((dict(items)))
                logger.debug('verilog.src_files=' + str(self.verilog.src_files))
                logger.debug('verilog.include_files=' + str(self.verilog.include_files))
                logger.debug('verilog.include_dirs=' + str(self.verilog.include_dirs))
            if config.has_section('vpi'):
                items = config.items('vpi')
                self.vpi = VPI(dict(items))
            system_file = os.path.join(self.core_root, self.name+'.system')
            if os.path.exists(system_file):
                self.system = System(system_file)
        else:
            self.name = name

            self.core_root = core_root
            self.cache_root = core_root
            self.files_root = core_root

            self.provider = None
        logger.debug('__init__() -Done-')
Beispiel #12
0
    def __init__(self, core_file=None, name=None, core_root=None):
        if core_file:
            basename = os.path.basename(core_file)
        self.depend = []
        self.simulators = []

        self.plusargs = None
        self.provider = None
        self.system   = None

        for s in section.SECTION_MAP:
            assert(not hasattr(self, s))
            if(section.SECTION_MAP[s].named):
                setattr(self, s, OrderedDict())
            else:
                setattr(self, s, None)

        self.core_root = os.path.dirname(core_file)
        self.files_root = self.core_root

        self.export_files = []
        if core_file:

            config = FusesocConfigParser(core_file)

            #FIXME : Make simulators part of the core object
            self.simulator        = config.get_section('simulator')

            for s in section.load_all(config, core_file):
                if type(s) == tuple:
                    _l = getattr(self, s[0].TAG)
                    _l[s[1]] = s[0]
                    setattr(self, s[0].TAG, _l)
                else:
                    setattr(self, s.TAG, s)

            if self.main.name:
                self.name = self.main.name
            else:
                self.name = basename.split('.core')[0]

            self.sanitized_name = self.name

            self.depend     = self.main.depend
            self.simulators = self.main.simulators

            self._collect_filesets()

            cache_root = os.path.join(Config().cache_root, self.sanitized_name)
            if config.has_section('plusargs'):
                utils.pr_warn("plusargs section is deprecated and will not be parsed by FuseSoC. Please migrate to parameters in " + str(self.name))
                self.plusargs = Plusargs(dict(config.items('plusargs')))
            if config.has_section('provider'):
                items    = dict(config.items('provider'))

                provider_name = items.get('name')
                if provider_name is None:
                    raise RuntimeError('Missing "name" in section [provider]')
                try:
                    provider_module = importlib.import_module(
                            'fusesoc.provider.%s' % provider_name)
                    self.provider = provider_module.PROVIDER_CLASS(self.name,
                        items, self.core_root, cache_root)
                except ImportError:
                    raise
            if self.provider:
                self.files_root = self.provider.files_root

            # We need the component file here, but it might not be
            # available until the core is fetched. Try to fetch first if any
            # of the component files are missing
            if False in [os.path.exists(f) for f in self.main.component]:
                self.setup()

            for f in self.main.component:
                self._parse_component(os.path.join(self.files_root, f))

            system_file = os.path.join(self.core_root, basename.split('.core')[0]+'.system')
            if os.path.exists(system_file):
                self.system = System(system_file)
        else:
            self.name = name
            self.provider = None
Beispiel #13
0
    def __init__(self, core_file):
        basename = os.path.basename(core_file)
        self.depend = []
        self.simulators = []

        self.plusargs = None
        self.provider = None
        self.backend = None

        for s in section.SECTION_MAP:
            assert (not hasattr(self, s))
            if (section.SECTION_MAP[s].named):
                setattr(self, s, OrderedDict())
            else:
                setattr(self, s, None)

        self.core_root = os.path.dirname(core_file)
        self.files_root = self.core_root

        self.export_files = []

        config = FusesocConfigParser(core_file)

        #Add .system options to .core file
        system_file = os.path.join(self.core_root,
                                   basename.split('.core')[0] + '.system')
        if os.path.exists(system_file):
            self._merge_system_file(system_file, config)

        #FIXME : Make simulators part of the core object
        self.simulator = config.get_section('simulator')
        if not 'toplevel' in self.simulator:
            self.simulator['toplevel'] = 'orpsoc_tb'

        for s in section.load_all(config, core_file):
            if type(s) == tuple:
                _l = getattr(self, s[0].TAG)
                _l[s[1]] = s[0]
                setattr(self, s[0].TAG, _l)
            else:
                setattr(self, s.TAG, s)

        if self.main.name:
            self.name = Vlnv(self.main.name)
        else:
            self.name = Vlnv(basename.split('.core')[0])

        self.sanitized_name = self.name.sanitized_name

        self.depend = self.main.depend
        self.simulators = self.main.simulators

        if self.main.backend:
            self.backend = getattr(self, self.main.backend)

        self._collect_filesets()

        cache_root = os.path.join(Config().cache_root, self.sanitized_name)
        if config.has_section('plusargs'):
            logger.warning(
                "plusargs section is deprecated and will not be parsed by FuseSoC. Please migrate to parameters in "
                + str(self.name))
            self.plusargs = Plusargs(dict(config.items('plusargs')))
        if config.has_section('provider'):
            items = dict(config.items('provider'))
            patch_root = os.path.join(self.core_root, 'patches')
            patches = self.main.patches
            if os.path.exists(patch_root):
                for p in sorted(os.listdir(patch_root)):
                    patches.append(os.path.join('patches', p))
            items['patches'] = patches
            provider_name = items.get('name')
            if provider_name is None:
                raise RuntimeError('Missing "name" in section [provider]')
            provider_module = importlib.import_module('fusesoc.provider.%s' %
                                                      provider_name)
            self.provider = provider_module.PROVIDER_CLASS(
                items, self.core_root, cache_root)
        if self.provider:
            self.files_root = self.provider.files_root

        # We need the component file here, but it might not be
        # available until the core is fetched. Try to fetch first if any
        # of the component files are missing
        if False in [os.path.exists(f) for f in self.main.component]:
            self.setup()

        for f in self.main.component:
            self._parse_component(f)
Beispiel #14
0
    def __init__(self, core_file=None, name=None, core_root=None):
        if core_file:
            basename = os.path.basename(core_file)
        self.depend = []
        self.simulators = []

        self.plusargs = None
        self.provider = None
        self.system = None

        for s in section.SECTION_MAP:
            assert (not hasattr(self, s))
            setattr(self, s, None)

        self.core_root = os.path.dirname(core_file)
        self.files_root = self.core_root

        if core_file:

            self.name = basename.split('.core')[0]
            config = FusesocConfigParser(core_file)

            #FIXME : Make simulators part of the core object
            self.simulator = config.get_section('simulator')

            for s in section.load_all(config, name=self.name):
                setattr(self, s.TAG, s)
            self.depend = self.main.depend
            self.simulators = self.main.simulators

            self.pre_build_scripts = config.get_list('scripts',
                                                     'pre_build_scripts')
            self.pre_run_scripts = config.get_list('scripts',
                                                   'pre_run_scripts')
            self.post_run_scripts = config.get_list('scripts',
                                                    'post_run_scripts')

            cache_root = os.path.join(Config().cache_root, self.name)
            if config.has_section('plusargs'):
                self.plusargs = Plusargs(dict(config.items('plusargs')))
            if config.has_section('provider'):
                items = dict(config.items('provider'))

                provider_name = items.get('name')
                if provider_name is None:
                    raise RuntimeError('Missing "name" in section [provider]')
                try:
                    provider_module = importlib.import_module(
                        'fusesoc.provider.%s' % provider_name)
                    self.provider = provider_module.PROVIDER_CLASS(
                        self.name, items, self.core_root, cache_root)
                except ImportError:
                    raise
            if self.provider:
                self.files_root = self.provider.files_root

            system_file = os.path.join(self.core_root, self.name + '.system')
            if os.path.exists(system_file):
                self.system = System(system_file)
        else:
            self.name = name
            self.provider = None
Beispiel #15
0
    def __init__(self, core_file=None, name=None, core_root=None):
        logger.debug('__init__() *Entered*' + '\n    core_file=' +
                     str(core_file) + '\n    name=' + str(name) +
                     '\n    core_root=' + str(core_root))
        if core_file:
            basename = os.path.basename(core_file)
        self.depend = []
        self.simulators = []

        self.plusargs = None
        self.provider = None
        self.system = None
        self.verilog = None
        self.vpi = None
        if core_file:
            config = FusesocConfigParser(core_file)

            if config.has_option('main', 'name'):
                self.name = config.get('main', 'name')
            else:
                self.name = basename.split('.core')[0]

            self.depend = config.get_list('main', 'depend')
            self.simulators = config.get_list('main', 'simulators')

            #FIXME : Make simulators part of the core object
            self.simulator = config.get_section('simulator')
            self.icarus = IcarusSection(config.get_section('icarus'))
            self.modelsim = ModelsimSection(config.get_section('modelsim'))
            self.verilator = VerilatorSection(config.get_section('verilator'))
            self.pre_run_scripts = config.get_list('scripts',
                                                   'pre_run_scripts')
            self.post_run_scripts = config.get_list('scripts',
                                                    'post_run_scripts')

            logger.debug('name=' + str(self.name))
            self.core_root = os.path.dirname(core_file)

            if config.has_section('plusargs'):
                self.plusargs = Plusargs(dict(config.items('plusargs')))
            if config.has_section('provider'):
                self.cache_dir = os.path.join(Config().cache_root, self.name)
                self.files_root = self.cache_dir
                items = config.items('provider')
                self.provider = ProviderFactory(dict(items))
            else:
                self.files_root = self.core_root

            if config.has_section('verilog'):
                self.verilog = Verilog()
                items = config.items('verilog')
                self.verilog.load_items((dict(items)))
                logger.debug('verilog.src_files=' +
                             str(self.verilog.src_files))
                logger.debug('verilog.include_files=' +
                             str(self.verilog.include_files))
                logger.debug('verilog.include_dirs=' +
                             str(self.verilog.include_dirs))
            if config.has_section('vpi'):
                items = config.items('vpi')
                self.vpi = VPI(dict(items))
            system_file = os.path.join(self.core_root, self.name + '.system')
            if os.path.exists(system_file):
                self.system = System(system_file)
        else:
            self.name = name

            self.core_root = core_root
            self.cache_root = core_root
            self.files_root = core_root

            self.provider = None
        logger.debug('__init__() -Done-')