Electronic – Image processing on alinx board

fpgaimageprocessinglinuxvivado

I'm trying to use the Alinx board to get images from industrial cameras, process those images, and determine the size of the object showing in the image.

I'll read the image using USB (from the PS part), buffer the image, and send it using DMA to PL where it will be filtered and returned to memory. Then I'll detect the size of the object and transmit it via Ethernet.

I started with HLS code, where the image filtration will be done, I created the bloc design using DMA on Vivado. Now I need to put the environment together to detect the size of the object. I am working under windows10, and I have a working SD card from the manufacturer with Debian installed.

Now my questions are:

  1. How can I configure the PL part with my own PL configuration generated from Vivado? (I have the BOOT.bin and the image.ub I generated in petalinux using the .hdl file from my vivado project)

  2. Is it possible to clone the board's SD card to get the Linux filesystem, then use this clone on my own SD card with the substitute BOOT.bin and image.ub I’ve generated?

  3. Can SDK and JTAG do this?

  4. I'm short on time. What's the fastest way to do this?

Best Answer

First, let me congratulate you on getting this far - it sounds like this is your first Zynq Linux project and these are complicated systems to navigate.

It appears your understanding of how this works is correct - you have created a Vivado project with a custom HLS IP connected to the PS via DMA. Now I can infer that you would like to use Linux to control your IP. This is a good choice as a bare metal application would likely require extensive development to support the industrial USB cameras (and it sounds like time is a factor) where the Linux drivers already exist. From your questions, I can also infer that you have chosen to develop your app on the Debian filesystem, also a good choice as development time can be reduced if you do not have experience building apps under petalinux/yocto (I see you are also using Win10 so it will save additional time as you must use a separate computer, or virtual, to produce Linux images with petalinux - it must be produced from Linux only).

To answer your questions:

"How can I configure the PL part with my own PL configuration generated from vivado? (I have the BOOT.bin and the image.ub using the hdf file from my vivado project)"

BOOT.bin contains the FSBL (First Stage Boot Loader). If the petalinux-package command included a bitstream, BOOT.bin will contain the bitstream and the FSBL will configure the PL.

"Is it possible to Clone image from board SD to get Linux filesystem then Put this clone on my own SD card then Replace 1st partition files with BOOT.bin and image.ub I’ve generated?"

Yes. A couple of comments. First, from Win10 you will need a disk utility such as Win32DiskImager. You cannot simply copy files - Debian will be on a 2nd partition as an EXT filesystem. Second, as you must know, for this to work, petalinux must be configured to mount the Debian filesystem by selecting "SD CARD" instead of "INITRAMFS" in petalinux-config. This will configure all of the details such that it will all work.

"Can SDK and JTAG do this?"

Yes and no. SDK is used generally for SDK projects which yours is not. You can in fact use JTAG from petalinux to boot, but if you must install drivers, and you have a Debian image on SD card, there is no advantage in my opinion. The complexity with USB cameras, and that you have an SD card you would like to develop on (most efficient in my experience) there is no advantage. JTAG boot is fine if you want to develop a small embedded image, and you build your kernel modules and apps in petalinux for cross compile. I would recommend you stay on the SD card Debian path to save time and disregard JTAG for now.

"Which is the best way to make it work quicker because of the very limited time I have?"

In my opinion, see (3) the previous question. You have Debian on a SD card already, so you can avoid the time penalty with figuring out how to install this. You can simply clone the SD card, and place your own BOOT.bin and image.ub in the 1st partition (given the configuration step in (2) is followed and no other modifications are made). This is necessary as the original BOOT.bin will contain a different PL configuration and device tree blob than what you will need. It is very likely much of the features shipped with the ALINX image will no longer function (HDMI, etc.) as this is not in your PL project I reckon.