ON XILINX ZYNQ
Where software configures the fabric.
Zynq pairs an ARM processing system (PS) with FPGA fabric (PL), and the work that earns its keep sits on the boundary: interfaces built in the programmable logic that the processor configures and drives at runtime over AXI. A few examples from recent Zynq work — and the Linux that runs on top.
Both are hardware/software co-design: the capability lives in the fabric, but the control and the flexibility live in the software that drives it over AXI.
And the Linux that drives it. A Zynq design is only as useful as the software that boots on it, so we build that too — the embedded Linux for the exact hardware, generated and maintained with PetaLinux (Xilinx’s tool, Yocto underneath): the first-stage bootloader, U-Boot, the Linux kernel, the device tree that describes the PL peripherals, and the root filesystem. The device tree is where the two halves meet, and a Linux device driver is what makes a fabric peripheral usable: the configurable UART above, for instance, gets a device-tree node and a kernel driver with its user-space interface, so the application opens it like any other device. That is device driver development in its hardest form — written for custom hardware that has no off-the-shelf driver.