PYNQ-Z1 – The first dev board to support Pynq, a Python platform for Zync SoC
forums.xilinx.com
forums.xilinx.com
On the other hand, I have a pile of nice iCE40 FPGAs and they are awesome. Thanks to Clifford Wolf, I can go from verilog to bitcode with a quality, free toolchain. I don't need to worry about which machine it's locked to, what random bugs will manifest in the random version of Eclipse required to run it, etc.
A side note - the Zynq is one of the better documented SoCs out there (aside from the FPGA bitstream itself), so it might be worth considering just for that.
I also have tried Clifford Wolf's tools, and they are absolutely wonderful. It's the way I wish all FPGAs worked. It's amazingly complete - I wouldn't hesitate to ship a product using a bitstream generated from yosys/arachne/icestorm.
Extra extra side note - in some cases that used to require FPGAs, you can now get away with bit-banging from a normal microcontroller. Most newish micros can do single cycle GPIO writes, and can be clocked over 100MHz.
I got over it eventually, but I think me having some experience with very low level kernel programming and digital electronics in general probably helped a lot. Since then, it's been great fun.
Overall, I don't think I'm a big fan of Vivado (though it's hard to say without any experience with any competitor's environment), but the Zybo itself it so packed full of fun components, and the Zynq itself such an apparently versatile and well documented chip (though again, not much personal reference in that) that I still recommend it.
I use Vivado to build the bitstream for my Zynq board, but then just treat it as another ARM dev board and build the OS for it myself. Once the OS has booted you can compile your "hello world" application on the board itself.
And hardcore user of linux for nearly 12 years. For example, I managed to replace the firmware of my ISP propreitary router nearly without any documentation (not supported by openwrt and co).
But I wasted days to try to understand the xilinx way we are supposed to use.
Every tutorials (I found) just explain how to install the vivado toolchain and stop there. So I assumed they had the same problems...
Do you have more recommendations, please?
Now, download and install the Xilinx SDK. Write a hello world program. Run the settings64.sh script that was installed to get the toolchain in your path. Compile the code with arm-xilinx-linux-gnueabi-gcc. Put the output ELF file on a SD card. Insert the SD card to your board, mount it, chmod +x your exe, then execute it.
If your board didn't come with Linux, find a prebuilt kernel and put it on a SD card. There are usually just two files you need, BOOT.BIN and image.ub.
Try reading the Xilinx Petalinux documentation. It's quite good. Also try Sven's Zynq tutorials.
Finally, the Zynq has a complex bootloader architecture. If you want to run bare metal, your bare metal app can run in place of the SSBL (U-Boot). And you don't need to load the FPGA at first, the Zynq works fine if the PL is not configured
When it powers up, the CPU reads the bootloader, typically u-boot, from somewhere and starts running it. The bootloader then reads the kernel from somewhere, maybe a ramdisk too and starts running Linux. The only difference with the Zynq is that before jumping into the kernel the bootloader will read the FPGA bitstream from somewhere and reconfigure the chip.
The design of the board itself will tell the CPU where to look for the bootloader, the location of the files for subsequent stages will come from what defaults had been compiled into the bootloader or from an external config file.
If you are already comfortable with cross-compiling Linux then you can just build a kernel from the official tree [1] and add it to the sample SDCard image. You may as well download the Xilinx SDK to get a pre-built cross-compiler.
One thing that I find helps is to have a SDCard reader/writer for the desktop or laptop that I'm using as my development machine.
There are about 20 example notebooks that ship with PYNQ using opencv, HDMI out AND in, wifi, and grove periperals.
Also, this is a Zynq-7020 part (same part found on Zedboard) - approximately 2.5x the FPGA resources of low-cost Zynq-7010 boards.