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