Coverage for hdl_registers/field/bit.py: 100%
26 statements
« prev ^ index » next coverage.py v7.7.0, created at 2025-03-18 20:51 +0000
« prev ^ index » next coverage.py v7.7.0, created at 2025-03-18 20:51 +0000
1# --------------------------------------------------------------------------------------------------
2# Copyright (c) Lukas Vik. All rights reserved.
3#
4# This file is part of the hdl-registers project, an HDL register generator fast enough to run
5# in real time.
6# https://hdl-registers.com
7# https://github.com/hdl-registers/hdl-registers
8# --------------------------------------------------------------------------------------------------
10from .register_field import RegisterField
13class Bit(RegisterField):
14 """
15 Used to represent a bit field in a register.
16 """
18 _width = 1
20 def __init__(self, name: str, index: int, description: str, default_value: str) -> None:
21 """
22 Arguments:
23 name: The name of the bit.
24 index: The zero-based index of this bit within the register.
25 description: Textual field description.
26 default_value: Default value. Either "1" or "0".
27 """
28 self.name = name
29 self._base_index = index
30 self.description = description
32 self._default_value = ""
33 # Assign self._default_value via setter
34 self.default_value = default_value
36 @property
37 def default_value(self) -> str:
38 """
39 Getter for private member.
40 """
41 return self._default_value
43 @default_value.setter
44 def default_value(self, value: str) -> None:
45 """
46 Setter for ``default_value`` that performs sanity checks.
47 """
48 if not isinstance(value, str):
49 message = (
50 f'Bit "{self.name}" should have string value for "default_value". Got "{value}".'
51 )
52 raise TypeError(message)
54 if value not in ["0", "1"]:
55 message = f'Bit "{self.name}" invalid binary value for "default_value". Got: "{value}".'
56 raise ValueError(message)
58 self._default_value = value
60 @property
61 def default_value_uint(self) -> int:
62 return int(self.default_value, base=2)
64 def __repr__(self) -> str:
65 return f"""{self.__class__.__name__}(\
66name={self.name},\
67_base_index={self._base_index},\
68description={self.description},\
69_default_value={self._default_value},\
70)"""