Skip to content

Install NOA Python Client and connect

Before installing the client, complete the shared Getting started steps: connect the target, identify its address and check network reachability with ping. Those steps do not require Python or noa-client.

This page is the next step for users who choose to control the target from Python on their computer. For MATLAB/Simulink, follow NOA Toolbox instead.

Run these commands on your computer, not in the target's Jupyter notebook.

Install from GitHub

Use Python 3.10 or newer: the current source uses Python 3.10 type syntax. The repository does not yet declare an officially tested Python/OS compatibility matrix.

Clone the repository to obtain the client, example scripts and FPGA files:

git clone https://github.com/ERREETDES/noa-client.git
cd noa-client
python -m venv .venv

Activate the environment:

.\.venv\Scripts\Activate.ps1
source .venv/bin/activate

Then install:

python -m pip install -e .

If GitHub requests authentication, use an account with access to the repository. Keep this environment separate from the target-side PYNQ drivers.

Connect to the target

Use the Rexys-provided PYNQ image for your board. The client connects to its messaging service and NOA manager; opening Jupyter successfully does not by itself verify that these services are available.

Replace arch1-00001.local with your target's hostname or IP address:

python -m noa.noa arch1-00001.local --device-info --disconnect

This reads device information and releases the connection. It does not load a bitstream.

First Python script

Save as device_info.py in the repository root and run python device_info.py:

import asyncio
from noa.noa import Noa

async def main():
    async with Noa("arch1-00001.local") as device:
        info = await device.device_info()
        print(info.model, info.serial_number, info.software_version)

if __name__ == "__main__":
    asyncio.run(main())

async with connects on entry and disconnects on exit, including when an exception occurs inside the block. Network operations generally use await; cached reads such as read_register() do not.

Continue with designs and registers, or troubleshooting if connection fails.