[[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)
```