I'm bootstrapping a new stand-alone, network-attached project based on an FPGA. The target chip is from the Xilinx Zynq UltraScale+ series.

The architecture I'm thinking of is:

  • All the network stack and latency-critical logic is implemented in hardware, and attached to a 100GE interface.
  • The ARM cores would run Linux, handle all management systems (statistics and management agent, cluster maintenance server, ...), and be attached to a 1GE interface.
  • The two would be connected via a PCI-Express bus using Riffa (for example).

One question I'm asking myself is whether it is possible to program the FPGA right from the linux distribution running on the ARM cores, using command-line tools. Or does it have to be done right from an external device?

Doing so would allow seamless user logic updates without adding yet another chip in the box dedicated to performing remote upgrades.


  • 3
    \$\begingroup\$ What does the Xilinx documentation have to say about this? \$\endgroup\$
    – pjc50
    Commented Nov 23, 2017 at 13:26
  • \$\begingroup\$ I have not managed to find any information about this in the docs, unfortunately. \$\endgroup\$
    – Pierre
    Commented Nov 23, 2017 at 13:48

2 Answers 2


Looks like there is a path but you should read the docs to be sure. From the Xilinx docs

The PL can be configured and reconfigured by PS software in secure or non-secure mode. The PCAP path is the most commonly deployed method as it does not require that the PL be pre-programmed with a bitstream. The PL can also be configured by the TAP controller on the JTAG chain in non-secure mode. Multiplexing of the datapath is done in the PL configuration module using the devc.CTRL [PCAP_MODE] and [PCAP_PR] bits. Also refer to section 6.5 Reference Section.

  • \$\begingroup\$ Looks like I did not use the right keywords for my search. Thanks a lot for the help! \$\endgroup\$
    – Pierre
    Commented Nov 23, 2017 at 13:54

If you use a linux made with petalinux up to 2017.4 you might have a look at this:


In a linux console try


cat MyBitstream.bit > /dev/xdevcfg

Check if succesful (==1)

cat /sys/class/xdevcfg/xdevcfg/device/prog_done

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.