Importer#

The SystemRDL Importer class provides some base utilities for constructing your own register model tree from an external source. For a more detailed walkthrough, see the Importing from JSON tutorial.

class systemrdl.importer.RDLImporter(compiler: RDLCompiler)#

Base class for external parsers to import data into the register model

Parameters:

compiler (RDLCompiler) – Reference to compiler instance where the import is being performed.

import_file(path: str) None#

Importer entry point.

Extend this function to read the file and perform the import. Be sure to call super().import_file(path)

Parameters:

path (str) – Path to file

add_child(parent: Component, child: Component) None#

Add a child component instance to an existing parent definition or instance

Added in version 1.16.

assign_property(component: Component, prop_name: str, value: Any, src_ref: SourceRefBase | None = None) None#

Assign a property to a component.

Parameters:
  • prop_name (str) – Name of the SystemRDL property

  • value – Value to assign

  • src_ref (SourceRefBase) – Optionally provide a more detailed source reference object associated with this assignment

register_root_component(definition: Component) None#

Register a component definition with the root namespace so that it is visible to other compiled files.

Parameters:

definition (comp.Component) – Component definition to register

lookup_root_component(type_name: str) Component | None#

Lookup a component definition from the root namespace. If the type name is not defined, returns None

compiler#

Reference to the current compiler instance

default_src_ref: SourceRefBase#

Source reference used by default when not specified in importer model construction methods By default, this simply points to the file currently being imported, without any line offset information

msg#

Reference to the compiler message handler

Warning

This will be deprecated in a future release. See this page for more details: SystemRDL/systemrdl-compiler#168

Create Definitions#

Added in version 1.16.

Use these methods to create a named definition, and instantiate one or more times using the methods described in the following section.

If type_name is not specified, then an anonymous definition is created and can therefore only be instantiated once.

RDLImporter.create_field_definition(type_name: str | None = None, src_ref: SourceRefBase | None = None) Field#
Parameters:
  • type_name (str)

  • src_ref (SourceRefBase)

Returns:

Component definition

Return type:

Field

RDLImporter.create_reg_definition(type_name: str | None = None, src_ref: SourceRefBase | None = None) Reg#
Parameters:
  • type_name (str)

  • src_ref (SourceRefBase)

Returns:

Component definition

Return type:

Reg

RDLImporter.create_regfile_definition(type_name: str | None = None, src_ref: SourceRefBase | None = None) Regfile#
Parameters:
  • type_name (str)

  • src_ref (SourceRefBase)

Returns:

Component definition

Return type:

Regfile

RDLImporter.create_addrmap_definition(type_name: str | None = None, src_ref: SourceRefBase | None = None) Addrmap#
Parameters:
  • type_name (str)

  • src_ref (SourceRefBase)

Returns:

Component definition

Return type:

Addrmap

RDLImporter.create_mem_definition(type_name: str | None = None, src_ref: SourceRefBase | None = None) Mem#
Parameters:
  • type_name (str)

  • src_ref (SourceRefBase)

Returns:

Component definition

Return type:

Mem

Instantiate Definitions#

Added in version 1.16.

These methods take a component definition, and create an instance.

If given a named component definition, then an instantiated copy is returned. If the given component definition is anonymous, then it is converted to an instantiation in-place. Anonymous definitions can only be instantiated once.

To complete the instantiation, you must attach it to a valid parent component using add_child().

RDLImporter.instantiate_field(comp_def: Field, inst_name: str, bit_offset: int, bit_width: int, src_ref: SourceRefBase | None = None) Field#
Parameters:
  • comp_def (comp.Field)

  • inst_name (str)

  • bit_offset (int)

  • bit_width (int)

  • src_ref (SourceRefBase)

Returns:

Component instance

Return type:

Field

RDLImporter.instantiate_reg(comp_def: Reg, inst_name: str, addr_offset: int, array_dimensions: List[int] | None = None, array_stride: int | None = None, src_ref: SourceRefBase | None = None) Reg#
Parameters:
  • comp_def (comp.Reg)

  • inst_name (str)

  • addr_offset (int)

  • array_dimensions (int)

  • array_stride (int)

  • src_ref (SourceRefBase)

Returns:

Component instance

Return type:

Field

RDLImporter.instantiate_regfile(comp_def: Regfile, inst_name: str, addr_offset: int, array_dimensions: List[int] | None = None, array_stride: int | None = None, src_ref: SourceRefBase | None = None) Regfile#
Parameters:
  • comp_def (comp.Regfile)

  • inst_name (str)

  • addr_offset (int)

  • array_dimensions (int)

  • array_stride (int)

  • src_ref (SourceRefBase)

Returns:

Component instance

Return type:

Field

RDLImporter.instantiate_addrmap(comp_def: Addrmap, inst_name: str, addr_offset: int, array_dimensions: List[int] | None = None, array_stride: int | None = None, src_ref: SourceRefBase | None = None) Addrmap#
Parameters:
  • comp_def (comp.Addrmap)

  • inst_name (str)

  • addr_offset (int)

  • array_dimensions (int)

  • array_stride (int)

  • src_ref (SourceRefBase)

Returns:

Component instance

Return type:

Field

RDLImporter.instantiate_mem(comp_def: Mem, inst_name: str, addr_offset: int, array_dimensions: List[int] | None = None, array_stride: int | None = None, src_ref: SourceRefBase | None = None) Mem#
Parameters:
  • comp_def (comp.Mem)

  • inst_name (str)

  • addr_offset (int)

  • array_dimensions (int)

  • array_stride (int)

  • src_ref (SourceRefBase)

Returns:

Component instance

Return type:

Field