C++ Device API Reference Manual
Reference documentation for the Simics C++ Device API.
 
Loading...
Searching...
No Matches
simics::Register Class Reference

Base class to represent a Simics register. More...

#include <register.h>

Inheritance diagram for simics::Register:
simics::RegisterInterface simics::HierarchicalObject simics::ValueAccessorInterface simics::ValueMutatorInterface simics::HierarchicalObjectInterface simics::AliasRegister simics::BankRegister< TRegister, Args > simics::ClearOnReadRegister simics::ConstantRegister simics::DesignLimitationRegister simics::IgnoreWriteRegister simics::Read0Register simics::ReadConstantRegister simics::ReadOnlyRegister simics::ReadUnimplRegister simics::ReservedRegister simics::SilentConstantRegister simics::SilentUnimplRegister simics::UndocumentedRegister simics::UnimplRegister simics::UnmappedRegister simics::Write0OnlyRegister simics::Write1ClearsRegister simics::Write1OnlyRegister simics::WriteOnceRegister simics::WriteOnlyRegister simics::WriteUnimplRegister

Public Member Functions

 Register (MappableConfObject *dev_obj, const std::string &hierarchical_name)
 
 Register (const Register &)=delete
 
Registeroperator= (const Register &)=delete
 
 Register (Register &&rhs)
 
Registeroperator= (Register &&rhs)
 
virtual ~Register ()=default
 
std::string_view name () const override
 
const std::string & hierarchical_name () const override
 
const std::string & description () const override
 
MappableConfObjectdev_obj () const override
 
ConfObjectRef bank_obj_ref () const override
 
unsigned number_of_bytes () const override
 
void init (std::string_view desc, unsigned number_of_bytes, uint64_t init_val) override
 Initialize the register with a description, size in bytes and an initial value.
 
void reset () override
 Reset to the initial value.
 
bool is_read_only () const override
 
bool is_mapped () const override
 
void set_byte_pointers (const register_memory_t &byte_pointers) override
 Set the byte address of the register.
 
uint64_t get () const override
 
void set (uint64_t value) override
 
uint64_t read (uint64_t enabled_bits) override
 
void write (uint64_t value, uint64_t enabled_bits) override
 
void parse_field (const field_t &f) override
 Parse the field information.
 
std::vector< field_tfields_info () const override
 
BankInterfaceparent () const override
 
- Public Member Functions inherited from simics::RegisterInterface
virtual ~RegisterInterface ()=default
 
virtual std::string_view name () const =0
 Get the name of the register without level delimiters.
 
virtual MappableConfObjectdev_obj () const =0
 Get the device object.
 
virtual const std::string & description () const =0
 Get the description of the register.
 
virtual const std::string & hierarchical_name () const =0
 Get the full name of the register including bank name.
 
virtual ConfObjectRef bank_obj_ref () const =0
 Get the bank object.
 
virtual unsigned number_of_bytes () const =0
 
virtual void init (std::string_view desc, unsigned number_of_bytes, uint64_t init_val)=0
 Initialize the register with a description, size in bytes and an initial value.
 
virtual void reset ()=0
 Reset to the initial value.
 
virtual bool is_read_only () const =0
 
virtual bool is_mapped () const =0
 
virtual void parse_field (const field_t &f)=0
 Parse the field information.
 
virtual void add_field (std::string_view field_name, std::string_view desc, Offset offset, BitWidth width)=0
 Add a field to the register.
 
virtual std::vector< field_tfields_info () const =0
 
virtual BankInterfaceparent () const =0
 
virtual void set_byte_pointers (const register_memory_t &byte_pointers)=0
 Set the byte address of the register.
 
- Public Member Functions inherited from simics::ValueAccessorInterface
virtual ~ValueAccessorInterface ()=default
 
virtual uint64_t get () const =0
 
virtual uint64_t read (uint64_t enabled_bits)=0
 
- Public Member Functions inherited from simics::ValueMutatorInterface
virtual ~ValueMutatorInterface ()=default
 
virtual void set (uint64_t value)=0
 
virtual void write (uint64_t value, uint64_t enabled_bits)=0
 
- Public Member Functions inherited from simics::HierarchicalObject
 HierarchicalObject (MappableConfObject *dev_obj, const std::string &name)
 Constructor for HierarchicalObject.
 
virtual ~HierarchicalObject ()
 
 HierarchicalObject (const HierarchicalObject &)=delete
 
HierarchicalObjectoperator= (const HierarchicalObject &)=delete
 
 HierarchicalObject (HierarchicalObject &&rhs) noexcept
 
HierarchicalObjectoperator= (HierarchicalObject &&rhs) noexcept
 
template<typename T >
T * dev_ptr ()
 
const std::string & hierarchical_name () const override
 
std::string_view name () const override
 
const std::string & description () const override
 
void set_description (std::string_view desc) override
 
Level hierarchy_level () const override
 
std::string_view bank_name () const override
 
MappableConfObjectdev_obj () const override
 
ConfObjectRef bank_obj_ref () const override
 
std::string_view parent_name () const override
 
FieldInterfacelookup_field (const std::string &name) const override
 
RegisterInterfacelookup_register (const std::string &name) const override
 
BankInterfacelookup_bank (const std::string &name) const override
 
virtual const std::string & hierarchical_name () const =0
 
virtual std::string_view name () const =0
 
virtual const std::string & description () const =0
 
virtual void set_description (std::string_view desc)=0
 
virtual Level hierarchy_level () const =0
 
virtual std::string_view bank_name () const =0
 
virtual MappableConfObjectdev_obj () const =0
 
virtual ConfObjectRef bank_obj_ref () const =0
 
virtual std::string_view parent_name () const =0
 
virtual FieldInterfacelookup_field (const std::string &name) const =0
 
virtual RegisterInterfacelookup_register (const std::string &name) const =0
 
virtual BankInterfacelookup_bank (const std::string &name) const =0
 

Static Public Member Functions

static std::size_t offset (const RegisterInterface *reg_iface)
 Utility function to get the offset of the register, returns size_t(-1) when register is not mapped.
 
- Static Public Member Functions inherited from simics::HierarchicalObject
static bool is_valid_hierarchical_name (std::string_view name)
 
static std::string_view::size_type level_of_hierarchical_name (std::string_view name)
 

Protected Member Functions

 Register (BankInterface *parent, std::string_view reg_name)
 
void add_field (std::string_view field_name, std::string_view desc, Offset offset, BitWidth width) override
 Add a field to the register.
 
void set_init_value (uint64_t init_val)
 

Friends

std::ostream & operator<< (std::ostream &stream, const Register &reg)
 

Additional Inherited Members

- Static Public Attributes inherited from simics::HierarchicalObject
static const uint64_t Register_Read {1}
 Log group ID for Register_Read and Register_Write is fixed.
 
static const uint64_t Register_Write {2}
 
static const uint64_t Register_Read_Exception {3}
 
static const uint64_t Register_Write_Exception {4}
 

Detailed Description

Base class to represent a Simics register.

Register with default behavior which allows access to any bit, without any side-effects.

Constructor & Destructor Documentation

◆ Register() [1/4]

simics::Register::Register ( MappableConfObject dev_obj,
const std::string &  hierarchical_name 
)
Parameters
dev_objis the device object which contains the register
hierarchical_namebegins with the bank name, e.g, "bankA.registerB"

◆ Register() [2/4]

simics::Register::Register ( const Register )
delete

◆ Register() [3/4]

simics::Register::Register ( Register &&  rhs)

◆ ~Register()

virtual simics::Register::~Register ( )
virtualdefault

◆ Register() [4/4]

simics::Register::Register ( BankInterface parent,
std::string_view  reg_name 
)
protected
Parameters
parentis the parent bank interface
reg_nameis the name of the register, e.g., "r0"

Member Function Documentation

◆ add_field()

void simics::Register::add_field ( std::string_view  field_name,
std::string_view  desc,
Offset  offset,
BitWidth  width 
)
overrideprotectedvirtual

Add a field to the register.

Implements simics::RegisterInterface.

◆ bank_obj_ref()

ConfObjectRef simics::Register::bank_obj_ref ( ) const
overridevirtual
Returns
the bank ConfObjectRef that the hierarchical object associated with

Reimplemented from simics::HierarchicalObject.

◆ description()

const std::string & simics::Register::description ( ) const
overridevirtual
Returns
the description of the object

Reimplemented from simics::HierarchicalObject.

◆ dev_obj()

MappableConfObject * simics::Register::dev_obj ( ) const
overridevirtual
Returns
the device object holds the bank

Reimplemented from simics::HierarchicalObject.

◆ fields_info()

std::vector< field_t > simics::Register::fields_info ( ) const
overridevirtual
Returns
information of fields in the register

Implements simics::RegisterInterface.

◆ get()

uint64_t simics::Register::get ( ) const
overridevirtual

◆ hierarchical_name()

const std::string & simics::Register::hierarchical_name ( ) const
overridevirtual
Returns
the full name of the object starts with the bank name

Reimplemented from simics::HierarchicalObject.

◆ init()

void simics::Register::init ( std::string_view  desc,
unsigned  number_of_bytes,
uint64_t  init_val 
)
overridevirtual

Initialize the register with a description, size in bytes and an initial value.

Typically called after the register is instantiated.

Implements simics::RegisterInterface.

◆ is_mapped()

bool simics::Register::is_mapped ( ) const
overridevirtual
Returns
if the register is mapped with an offset on the bank

Implements simics::RegisterInterface.

◆ is_read_only()

bool simics::Register::is_read_only ( ) const
overridevirtual
Returns
if the register is read-only

Implements simics::RegisterInterface.

◆ name()

std::string_view simics::Register::name ( ) const
overridevirtual
Returns
the name of the object only

Reimplemented from simics::HierarchicalObject.

◆ number_of_bytes()

unsigned simics::Register::number_of_bytes ( ) const
overridevirtual
Returns
the register size in bytes

Implements simics::RegisterInterface.

◆ offset()

static std::size_t simics::Register::offset ( const RegisterInterface reg_iface)
static

Utility function to get the offset of the register, returns size_t(-1) when register is not mapped.

◆ operator=() [1/2]

Register & simics::Register::operator= ( const Register )
delete

◆ operator=() [2/2]

Register & simics::Register::operator= ( Register &&  rhs)

◆ parent()

BankInterface * simics::Register::parent ( ) const
overridevirtual
Returns
the parent bank interface

Implements simics::RegisterInterface.

◆ parse_field()

void simics::Register::parse_field ( const field_t f)
overridevirtual

Parse the field information.

Add the field or field array into the resource map. The field reuses the memory allocated for the enclosing register. offset 0 is always the least significant bit regardless of bit order e.g. 2 bytes value 0b10100111 | | offset:7 offset:0 => width = 8

Implements simics::RegisterInterface.

◆ read()

uint64_t simics::Register::read ( uint64_t  enabled_bits)
overridevirtual

◆ reset()

void simics::Register::reset ( )
overridevirtual

Reset to the initial value.

Implements simics::RegisterInterface.

◆ set()

void simics::Register::set ( uint64_t  value)
overridevirtual

◆ set_byte_pointers()

void simics::Register::set_byte_pointers ( const register_memory_t byte_pointers)
overridevirtual

Set the byte address of the register.

Implements simics::RegisterInterface.

◆ set_init_value()

void simics::Register::set_init_value ( uint64_t  init_val)
protected

◆ write()

void simics::Register::write ( uint64_t  value,
uint64_t  enabled_bits 
)
overridevirtual

Friends And Related Function Documentation

◆ operator<<

std::ostream & operator<< ( std::ostream &  stream,
const Register reg 
)
friend

The documentation for this class was generated from the following file: