# Build and test firmware ## Kasli standalone ### Checklist 1. Build firmware (see commands below) 2. Flash firmware and settings 3. Test hardware 4. Create a flash-drive with `device_db.py` file for customers (FAT32) ### CLI commands ```shell mkdir cd / git clone git@github.com:m-labs/artiq.git cd artiq/ git checkout origin/release-7 nix develop artiq_mkfs -s ip 192.168.1.75 kasli.config artiq_flash storage -f kasli.config artiq_ddb_template -o device_db.py .json python -m artiq.gateware.targets.kasli_generic .json artiq_flash --srcbuild -d artiq_kasli// artiq_sinara_tester ``` Follow `artiq_sinara_tester` instructions for testing the hardware. For more detailed information, you can use this book's pages, or if there is no instruction for testing your hardware, please add them to this book. ## Kasli-SoC (zynq) ### Checklist 1. Build firmware (see commands below) for SD card variant 2. Copy `results/boot.bin` to the SD card 3. Insert SD card to the Kasli-SoC and boot 4. Change IP from the default one: `artiq_coremgmt -D 192.168.1.56 config write -s ip 192.168.1.75` 5. Reboot and check it works on new IP address 6. Test hardware 7. Create a flash-drive with `device_db.py` file for customers (FAT32) ### CLI commands ```shell mkdir cd / git clone gitea@git.m-labs.hk:M-Labs/artiq-zynq.git cd artiq-zynq/ git checkout origin/release-7 nix develop artiq_ddb_template -o device_db.py .json nix build -L --impure --expr 'let fl = builtins.getFlake "git+file://"; in (fl.makeArtiqZynqPackage {target="kasli_soc"; variant="[master, standalone, satellite]"; json=;}).kasli_soc-[master, standalone, satellite]-sd' # copy `results/boot.bin` to the SD card # insert SD card to the Kasli-SoC and boot artiq_coremgmt -D 192.168.1.56 config write -s ip 192.168.1.75 # or just place extra/CONFIG.TXT near the boot.bin on SD card # update firmware artiq_coremgmt config write -f boot result/boot.bin # reboot via power supply artiq_sinara_tester ``` ## Master-satellite setups 1. Change `base` in JSON to the respective `master` or `satellite`, add `"enable_sata_drtio": true` if needed to the master, remove `core_addr` in satellites 2. Build and flash firmware for each crate with JSONs (see instructions above) 3. Create composed `device_db.py`: `artiq_ddb_template -o device_db.py -s 1 .json -s 2 .json .json` 4. Connect satellite crates to the master respective to their numbers via the fiber (see example picture) ![](img/master_sat_connection.jpg) 5. Ethernet is needed only for master 6. Test hardware as it would be one crate