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

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# -------------------------------------------------------------------------------------------------- 

9 

10from .register_field import RegisterField 

11 

12 

13class Bit(RegisterField): 

14 """ 

15 Used to represent a bit field in a register. 

16 """ 

17 

18 _width = 1 

19 

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 

31 

32 self._default_value = "" 

33 # Assign self._default_value via setter 

34 self.default_value = default_value 

35 

36 @property 

37 def default_value(self) -> str: 

38 """ 

39 Getter for private member. 

40 """ 

41 return self._default_value 

42 

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) 

53 

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) 

57 

58 self._default_value = value 

59 

60 @property 

61 def default_value_uint(self) -> int: 

62 return int(self.default_value, base=2) 

63 

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)"""