[[Glasgow Notes]] ## register syntax Add input/writeable register: ```python target.registers.add_rw() ``` Add output/readable register: ```python target.registers.add_ro() ``` Arguments: - default arg: width (in bits) of register (default = 1) - reset Example: 4 bit register with default value of 9 ```python target.registers.add_rw(4, reset = 9) ``` ## using registers in applet ### build A good place to define these is in `build()`. ```python def build(self, target, args): resolution, self.resolution = target.registers.add_rw(4, reset = 9) reset, self.reset = target.registers.add_rw() enable, self.enable = target.registers.add_rw(reset=0) ``` The output of .add_rw() or .add_ro() is a tuple - First value: an Amaranth Signal -> pass this to `Subtarget(Elaboratable)` - Second value: an int, which I think represents the address of the register. Use this identifier to select the register to write to later. ### run/interact Syntax to read/write from a register: ```python await device.write_register(address, value) await device.read_register(address, value) ``` Example: ```python await device.write_register(self.enable, 0) ```