--- title: "FPGA JTAG" slug: "maintenance-gen4-fpga-jtag" updated: 2026-10-30T07:24:06Z published: 2026-10-30T07:24:06Z canonical: "docs.fmad.io/maintenance-gen4-fpga-jtag" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.fmad.io/llms.txt > Use this file to discover all available pages before exploring further. # FPGA JTAG ## FMADIO Gen4 200G - CLI In cases where the FPGA can not be recovered from the AMD/Xilinx golden image, updating the FPGA via JTAG is the next process. The following steps is a guide on how to update the FPGA image. The software is packaged as an LXC container, contact support for the download link ### Step 1) Connect a Micro USB cable to the FPGA Install a Micro USB to USB A cable with the following mapping. NOTE: the MicroUSB port might require nudging in, as its very close to the top of the PCI Bracket ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(423).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) Example shown below ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(447).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) ### Step 2) Confirm the USB JTAG can be seen Run the following command ```plaintext lsusb ``` The USB JTAG shows up as the following device ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(424).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) If the device does not show up, it may be cause the MicroUSB is not fully connected due to the edge of the PCI bracket. Try reseat it / push the connector in further. ### Step 3) Copy the LXC container to the system Download the FPGA recovery LXC images (contact support for the URL) and copy to the following directory ```plaintext sudo cp fpgarecover-20261030-0000.tar.gz /opt/fmadio/lxc/ ``` Extract the tarball ```plaintext cd /opt/fmadio/lxc/ tar xfzv fpgarecover-20261030-0000.tar.gz ``` Total disk space is about 1.8GB ### Step 4) Run the Recovery script The recvoery script in the LXC starts the the host tools + starts and stops the LXC container. This makes for a simple JTAG flashing of the device in the directory (sudo required) ```plaintext cd /opt/fmadio/lxc/fpgarecover-20261030-0000 ``` Run the recovery software ```plaintext ./jtag_fpga.lua ``` The output should look similar to below ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(563).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) Note the status is GOOD. Any other status check the ./log/jtag* files ### Step 5) Warm reboot the system Issue a WARM reboot (a cold reboot will loose the just programed image) ```plaintext sudo reboot ``` ### Step 6) Confirm the FPGA image is present Now the FPGA has been programed and the system rebooted, confirm the FPGA is present on the PCIe bus ```plaintext lspci | grep e1 ``` The device shows up at bus address e1:00 as shown below ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(440).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) ### Step 7) Program a new FPGA image in the NAND Program a new FPGA image, as recommended by FMADIO Support. To do this use the fnic_flash utility example shown below. ```plaintext sudo fnic_flash --write fNICBoard_U55C_2x40G.bin ``` Example output looks as below, this writes the image into the non-volatile NAND memory on the FPGA. It will take about 5min to complete ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(441).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) When complete it looks per below ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(442).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) ### Step 8) Cold power cycle A cold power cycle is required to activate the new FPGA image. Run the following command ```plaintext sudo ipmitool power cycle ``` ### Step 9) Confirm new FPGA Confirm the new FPGA image is present using ```plaintext lspci| grep e1 ``` Depending on the FPGA image the expected output looks similar to below. If no entries are found please contact support for further assistance ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(443).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) And confirm the FPGA version, support will provide the expected version output ```plaintext cat /opt/fmadio/status/fpga_version ``` Example shown below ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(444).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) ### Step 10) Finished Recovery completed. --- ## FMADIO Gen4 200G -GUI DEPRECIATED (in favor of CLI version) In cases where the FPGA can not be recovered from the AMD/Xilinx golden image, updating the FPGA via JTAG is the next process. The following steps is a guide on how to update the FPGA image. ### Step 1) Connect a Micro USB cable to the FPGA Install a Micro USB to USB A cable with the following mapping. NOTE: the MicroUSB port might require nudging in, as its very close to the top of the PCI Bracket ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(423).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) Example shown below ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(447).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) ### Step 2) Confirm the USB JTAG can be seen Run the following command ```plaintext lsusb ``` The USB JTAG shows up as the following device ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(424).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) If the device does not show up, it may be cause the MicroUSB is not fully connected due to the edge of the PCI bracket. Try reseat it / push the connector in further. ### Step 3) Install the remote JTAG Software Download the JTAG install package (contact support for the URL) and copy to the following directory ```plaintext cp vivado_lab_2023.2.tar.gz /mnt/store0/tmp2/ ``` Extract the tarball ```plaintext cd /mnt/store0/tmp2 tar xfzv vivado_lab_2023.2.tar.gz ``` Total disk space is about 3.6GB ### Step 4) Run the remote JTAG software Using the Vivado Lab remote hardware device allows a base JTAG device to be controlled remotely over the network. This enables Vivado Lab to run on a windows PC or on a desktop system with minimal install on the FMADIO device. in the directory ```plaintext cd /mnt/store0/tmp2/2023.3/bin ``` Run the jtag software ```plaintext ./hw_server ``` The output should look similar to below ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(425).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) Here the JTAG software is listening on TCP port 3121, if a firewall port needs to be opened or SSH tunnel is required this is the port to use. ### Step 5) Download the recovery image Please download the bitstream provided from the support team, this is the recovery image and save it to where Vivado is ### Step 6) Connect Vivado Lab Open Vivado Lab Hardware Manager per below ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(426).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) Open target ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(427).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) Open New target ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(428).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) Next ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(429).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) Remote server ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(431).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) Expected to find a device as highlighted below ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(432).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) Next ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(433).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) Finish GUI should look like the following ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(434).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) ### Step 7) Program the bitstream Using the right mouse button , select Program Device ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(435).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) Select the bitstream file provided by support ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(437).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) It may ask about a debug file, Cancel is ok ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(436).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) Finally program the device ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(438).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) When completed it displays ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(439).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) The FPGA is now programmed with a new image, it requires a reboot for the image to become active. ### Step 8) Warm reboot the system Issue a WARM reboot (a cold reboot will loose the just programed image) ```plaintext sudo reboot ``` ### Step 9) Confirm the FPGA image is present Now the FPGA has been programed and the system rebooted, confirm the FPGA is present on the PCIe bus ```plaintext lspci | grep e1 ``` The device shows up at bus address e1:00 as shown below ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(440).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) ### Step 10) Program a new FPGA image in the NAND Program a new FPGA image, as recommended by FMADIO Support. To do this use the fnic_flash utility example shown below. ```plaintext sudo fnic_flash --write fNICBoard_U55C_2x40G.bin ``` Example output looks as below, this writes the image into the non-volatile NAND memory on the FPGA. It will take about 5min to complete ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(441).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) When complete it looks per below ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(442).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) ### Step 11) Cold power cycle A cold power cycle is required to activate the new FPGA image. Run the following command ```plaintext sudo ipmitool power cycle ``` ### Step 12) Confirm new FPGA Confirm the new FPGA image is present using ```plaintext lspci| grep e1 ``` Depending on the FPGA image the expected output looks similar to below. If no entries are found please contact support for further assistance ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(443).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) And confirm the FPGA version, support will provide the expected version output ```plaintext cat /opt/fmadio/status/fpga_version ``` Example shown below ![](https://cdn.document360.io/b9aab0c4-36d0-4616-9673-30b661455571/Images/Documentation/image(444).png?sv=2026-02-06&spr=https&st=2026-11-13T19%3A56%3A44Z&se=2026-11-13T20%3A56%3A44Z&sr=c&sp=r&sig=kdJ%2BPmqkL%2BI%2FAgkMTKFzoLQl5e2ieK1SgjbAYI0jFwM%3D) ### Step 13) Finished Recovery completed.