# Copyright lowRISC contributors. # Licensed under the Apache License, Version 2.0, see LICENSE for details. # SPDX-License-Identifier: Apache-2.0 from typing import List from .field import Field class RegBase: '''An abstract class inherited by Register and MultiRegister This represents a block of one or more registers with a base address. ''' def __init__(self, offset: int): self.offset = offset def get_n_bits(self, bittype: List[str]) -> int: '''Get the size of this register / these registers in bits See Field.get_n_bits() for the precise meaning of bittype. ''' raise NotImplementedError() def get_field_list(self) -> List[Field]: '''Get an ordered list of the fields in the register(s) Registers are ordered from low to high address. Within a register, fields are ordered as Register.fields: from LSB to MSB. ''' raise NotImplementedError() def is_homogeneous(self) -> bool: '''True if every field in the block is identical For a single register, this is true if it only has one field. For a multireg, it is true if the generating register has just one field. Note that if the compact flag is set, the generated registers might have multiple (replicated) fields. ''' raise NotImplementedError()