cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

USB secondary boot mode testing on a Versal VCK190 Evaluation Kit using Device Firmware Upgrade (DFU)

aravindb
Moderator
Moderator
0 2 1,263

In this blog entry we will demonstrate how to boot Linux from a USB secondary boot on a Versal AI Core Series VCK190 Evaluation Kit.

To do this we will modify the Boot Image Format (BIF) to load a second Programmable Device Image (PDI) via USB using Vivado 2020.2

We will use JTAG as the first boot device to load the Platform loader and manager (PLM), and use USB as the secondary boot device to load the other partitions (A72, u-boot and Linux.) 

Hardware  setup:

Connect J308 on the VCK190 to the PC host with a USB cable.

Set the SW1 jumpers to JTAG mode.

Please find the JTAG boot mode settings in the below screen capture:

boot_mode_settings.JPG

Block Diagram:

block_diagram.JPG

Note: by default the USB controller is enabled in the PetaLinux BSP.

 

Bootgen and BIF file modifications to create boot images

We will create two BIF files based on the Vivado/PetaLinux  generated BIF file.

  1. The first BIF is used to generate the PDI which will boot the PLM from the primary boot device. In this example, it is JTAG.
  • We name the first BIF A72_primary.bif
  • Two highlights:
    1. "boot_device {usb}" must be added to the BIF. This lets the PLM know that USB is the secondary boot device.
    2. Use plm.elf instead of executable.elf. Executable.elf is used by Vivado to generate the PDI, but it does not support USB as a secondary boot device. As a result we need to use plm.elf which is generated in Vitis/PetaLinux.

A72_primary.bif:

a71_primary_bif.pnga72_primary_bif1.png

 

2. The second bif is used to generate the PDI which contains u-boot and loads via the USB Device Firmware Upgrade (DFU).

  • We will name the second BIF A72_secondary.bif

 A72_secondary.bif:

A72_secondary.bifA72_secondary.bif

3. Generate primary boot image and secondary boot image by Bootgen using following commands.

Primary:

bootgen -arch versal -image a72_primary.bif -w -o boot_primary.bin
****** Xilinx Bootgen v2020.2
  **** Build date : Nov 18 2020-09:50:31
    ** Copyright 1986-2020 Xilinx, Inc. All Rights Reserved.

[WARNING]: BOOTGEN_POST_PROCESSING is enabled, CDOs will be post processed

[INFO]   : Bootimage generated successfully

 

Secondary:

bootgen -arch versal -image a72_secondary.bif -w -o boot_secondary.bin
****** Xilinx Bootgen v2020.2
  **** Build date : Nov 18 2020-09:50:31
    ** Copyright 1986-2020 Xilinx, Inc. All Rights Reserved.

[WARNING]: BOOTGEN_POST_PROCESSING is enabled, CDOs will be post processed

[INFO]   : Bootimage generated successfully

 

Downloading the images to the board

  1. Load the  boot_primary.bin image on the target  using JTAG 
  2. The PLM should wait for the secondary image after printing the below messages:

[7.667278]Xilinx Versal Platform Loader and Manager
[12.376881]Release 2020.2 Aug 31 2020 - 09:50:03
[17.085931]Platform Version: v1.0 PMC: v1.0, PS: v1.0
[21.881875]STDOUT: PS UART
[24.324281]****************************************
[28.985971] 24.515056 ms for PrtnNum: 1, Size: 2432 Bytes
[34.094090]-------Loading Prtn No: 0x2
[38.309037] 0.692037 ms for PrtnNum: 2, Size: 48 Bytes
[42.467100]-------Loading Prtn No: 0x3
[96.268506] 50.276421 ms for PrtnNum: 3, Size: 56912 Bytes
[98.652475]-------Loading Prtn No: 0x4
[102.562750] 0.388331 ms for PrtnNum: 4, Size: 2512 Bytes
[107.286018]-------Loading Prtn No: 0x5
[110.907934] 0.013368 ms for PrtnNum: 5, Size: 3424 Bytes
[116.006421]-------Loading Prtn No: 0x6
[119.620971] 0.004568 ms for PrtnNum: 6, Size: 80 Bytes
[124.622246]+++++++Loading Image No: 0x2, Name: pl_cfi, Id: 0x18700000
[130.830893]-------Loading Prtn No: 0x7
[5791.450975] 5657.002021 ms for PrtnNum: 7, Size: 8407952 Bytes
[5794.366281]-------Loading Prtn No: 0x8
[6174.214668] 376.148515 ms for PrtnNum: 8, Size: 539520 Bytes
[6176.999787]+++++++Loading Image No: 0x3, Name: aie_subsys, Id: 0x0421C005
[6183.671081]-------Loading Prtn No: 0x9
[6190.315521] 2.944596 ms for PrtnNum: 9, Size: 352 Bytes
[6192.665846]+++++++Loading Image No: 0x4, Name: fpd, Id: 0x0420C003
[6198.726037]-------Loading Prtn No: 0xA
[6203.102859] 0.679168 ms for PrtnNum: 10, Size: 1136 Bytes
[6207.766790]Loading PDI from USB
[6210.762365]Monolithic/Master Device

3. Check if the DFU can detect the USB target.

$ sudo dfu-util -l

The USB device should be enumerated with VendorId : ProductId which is 03fd:0050.

You should see something similar to the following:

Found DFU: [03fd:0050] devnum=0, cfg=1, intf=0, alt=1, name="Xilinx DFU Downloader

Note: if you do not see the ‘Found DFU’ message, verify the connection and retry.

4.  In the PC host, run the below command to download the secondary image boot_secondary.bin to the VCK190 using dfu-util.

sudo dfu-util d 03fd:0050 -D  boot_secondary.bin

Check the UART 0 terminal and wait until U-Boot loads. We will get the u-boot console.

5. At the U-Boot prompt, type Enter to terminate autoboot. Verify from the UART1 console that the application has loaded successfully.

6.  In the U-Boot console, start DFU_RAM to enable downloading of the Linux Images:

 U-boot> run dfu_ram

7. Download Linux Image and system.dtb using the following command from the Host Machine Terminal:

$ sudo dfu-util -l

The above command shows the alt info of the DFU RAM as follows:

Found DFU: [03fd:0300] devnum=0, cfg=1, intf=0, alt=0, name="Image"
Found DFU: [03fd:0300] devnum=0, cfg=1, intf=0, alt=1, name="system.dtb"
  1. dfu-util -d 03fd:0300 -D ./Image -a 0
  2. dfu-util -d 03fd:0300 -D ./system.dtb -a 1

8. Once you see the DOWNLOAD message on uboot, use Ctrl+C on the U-Boot console to stop dfu_ram.

##DOWNLOAD ... OK


Press Ctrl+C to exit .

9.Run the booti command from the U-Boot Console to run Linux.

U-boot> booti 0x18000000 0x40000000

  (Check this address in the u-boot environment )

10. Verify that Linux loads successfully on the target.

Host side Logs

root@machine_id:~# dfu-util -l
dfu-util 0.5

(C) 2005-2008 by Weston Schmidt, Harald Welte and OpenMoko Inc.
(C) 2010-2011 Tormod Volden (DfuSe support)
This program is Free Software and has ABSOLUTELY NO WARRANTY

dfu-util does currently only support DFU version 1.0

Found DFU: [03fd:0050] devnum=0, cfg=1, intf=0, alt=1, name="Xilinx DFU Downloader"


root@machine_id:~# dfu-util -D boot_secondary.bin
dfu-util 0.5

(C) 2005-2008 by Weston Schmidt, Harald Welte and OpenMoko Inc.
(C) 2010-2011 Tormod Volden (DfuSe support)
This program is Free Software and has ABSOLUTELY NO WARRANTY

dfu-util does currently only support DFU version 1.0

Opening DFU USB device... ID 03fd:0050
Run-time device DFU version 0110
Found DFU: [03fd:0050] devnum=0, cfg=1, intf=0, alt=1, name="Xilinx DFU Downloader"
Claiming USB DFU Interface...
Setting Alternate Setting #1 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 0110
Device returned transfer size 1024
No valid DFU suffix signature
Warning: File has no DFU suffix
bytes_per_hash=19961
Copying data from PC to DFU device
Starting download: [##################################################] finished!
state(2) = dfuIDLE, status(0) = No error condition is present
Done!


root@machine_id:~# dfu-util -l
dfu-util 0.5

(C) 2005-2008 by Weston Schmidt, Harald Welte and OpenMoko Inc.
(C) 2010-2011 Tormod Volden (DfuSe support)
This program is Free Software and has ABSOLUTELY NO WARRANTY

dfu-util does currently only support DFU version 1.0

Found DFU: [03fd:0300] devnum=0, cfg=1, intf=0, alt=0, name="Image"
Found DFU: [03fd:0300] devnum=0, cfg=1, intf=0, alt=1, name="system.dtb"
root@machine_id:~#
root@machine_id:~#
root@machine_id:~# cp -rf /proj/css/Aravind_babu/Image .
root@machine_id:~# cp -rf /proj/css/Aravind_babu/system.dtb .
root@machine_id:~#

root@machine_id:~# dfu-util -d 03fd:0300 -D Image -a 0
dfu-util 0.5

(C) 2005-2008 by Weston Schmidt, Harald Welte and OpenMoko Inc.
(C) 2010-2011 Tormod Volden (DfuSe support)
This program is Free Software and has ABSOLUTELY NO WARRANTY

dfu-util does currently only support DFU version 1.0

Filter on vendor = 0x03fd product = 0x0300
Opening DFU USB device... ID 03fd:0300
Run-time device DFU version 0110
Found DFU: [03fd:0300] devnum=0, cfg=1, intf=0, alt=0, name="Image"
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 0110
Device returned transfer size 4096
No valid DFU suffix signature
Warning: File has no DFU suffix
bytes_per_hash=347678
Copying data from PC to DFU device
Starting download: [##################################################] finished!
state(7) = dfuMANIFEST, status(0) = No error condition is present
state(2) = dfuIDLE, status(0) = No error condition is present
Done!


root@machine_id:~# dfu-util -d 03fd:0300 -D system.dtb -a 1
dfu-util 0.5

(C) 2005-2008 by Weston Schmidt, Harald Welte and OpenMoko Inc.
(C) 2010-2011 Tormod Volden (DfuSe support)
This program is Free Software and has ABSOLUTELY NO WARRANTY

dfu-util does currently only support DFU version 1.0

Filter on vendor = 0x03fd product = 0x0300
Opening DFU USB device... ID 03fd:0300
Run-time device DFU version 0110
Found DFU: [03fd:0300] devnum=0, cfg=1, intf=0, alt=1, name="system.dtb"
Claiming USB DFU Interface...
Setting Alternate Setting #1 ...
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 0110
Device returned transfer size 4096
No valid DFU suffix signature
Warning: File has no DFU suffix
bytes_per_hash=832
Copying data from PC to DFU device
Starting download: [##################################################] finished!
state(7) = dfuMANIFEST, status(0) = No error condition is present
state(2) = dfuIDLE, status(0) = No error condition is present
Done!

 

Logs

[7.667278]Xilinx Versal Platform Loader and Manager
[12.376881]Release 2020.2   Aug 31 2020  -  09:50:03
[17.085931]Platform Version: v1.0 PMC: v1.0, PS: v1.0
[21.881875]STDOUT: PS UART
[24.324281]****************************************
[28.985971] 24.515056 ms for PrtnNum: 1, Size: 2432 Bytes
[34.094090]-------Loading Prtn No: 0x2
[38.309037] 0.692037 ms for PrtnNum: 2, Size: 48 Bytes
[42.467100]-------Loading Prtn No: 0x3
[96.268506] 50.276421 ms for PrtnNum: 3, Size: 56912 Bytes
[98.652475]-------Loading Prtn No: 0x4
[102.562750] 0.388331 ms for PrtnNum: 4, Size: 2512 Bytes
[107.286018]-------Loading Prtn No: 0x5
[110.907934] 0.013368 ms for PrtnNum: 5, Size: 3424 Bytes
[116.006421]-------Loading Prtn No: 0x6
[119.620971] 0.004568 ms for PrtnNum: 6, Size: 80 Bytes
[124.622246]+++++++Loading Image No: 0x2, Name: pl_cfi, Id: 0x18700000
[130.830893]-------Loading Prtn No: 0x7
[5791.450975] 5657.002021 ms for PrtnNum: 7, Size: 8407952 Bytes
[5794.366281]-------Loading Prtn No: 0x8
[6174.214668] 376.148515 ms for PrtnNum: 8, Size: 539520 Bytes
[6176.999787]+++++++Loading Image No: 0x3, Name: aie_subsys, Id: 0x0421C005
[6183.671081]-------Loading Prtn No: 0x9
[6190.315521] 2.944596 ms for PrtnNum: 9, Size: 352 Bytes
[6192.665846]+++++++Loading Image No: 0x4, Name: fpd, Id: 0x0420C003
[6198.726037]-------Loading Prtn No: 0xA
[6203.102859] 0.679168 ms for PrtnNum: 10, Size: 1136 Bytes
[6207.766790]Loading PDI from USB
[6210.762365]Monolithic/Master Device
[14602.209878]8394.398825 ms: PDI initialization time
[14604.323262]+++++++Loading Image No: 0x0, Name: apu_subsyste, Id: 0x1C000000
[14611.146703]-------Loading Prtn No: 0x0
[14614.942668] 0.012150 ms for PrtnNum: 0, Size: 41632 Bytes
[14620.302859]-------Loading Prtn No: 0x1
[14624.102159] 0.015812 ms for PrtnNum: 1, Size: 59360 Bytes
[14629.458853]-------Loading Prtn No: 0x2
[14633.428109] 0.185400 ms for PrtnNum: 2, Size: 896512 Bytes
[14638.786881]***********Boot PDI Load: Done*************
[14643.873331]765870.806637 ms: ROM Time
[14647.508740]Total PLM Boot Time
NOTICE:  ATF running on Xilinx Versal Silicon
WARNING: BL31: invalid exception level (3)
NOTICE:  BL31: Secure code at 0x0
NOTICE:  BL31: Non secure code at 0x8000000
NOTICE:  BL31: v2.2(debug):rel-v2020.2_SAM_EA2-1-g3e90bb84f
NOTICE:  BL31: Built : 13:22:27, Aug 28 2020
INFO:    GICv3 with legacy support detected. ARM GICv3 driver initialized in EL3
INFO:    BL31: Initializing runtime services
WARNING: BL31: cortex_a72: CPU workaround for 859971 was missing!
INFO:    BL31: cortex_a72: CPU workaround for cve_2017_5715 was applied
INFO:    BL31: cortex_a72: CPU workaround for cve_2018_3639 was applied
INFO:    BL31: Preparing for EL3 exit to normal world
INFO:    Entry point address = 0x8000000
INFO:    SPSR = 0x3c9

U-Boot 2020.01 (Sep 02 2020 - 08:11:32 +0000)

Model: Xilinx Versal vck190 Eval board revA (QSPI)
DRAM:  6 GiB
EL Level:       EL2
MMC:   sdhci@f1050000: 0
In:    serial@ff000000
Out:   serial@ff000000
Err:   serial@ff000000
Bootmode: JTAG_MODE
Net:
ZYNQ GEM: ff0c0000, mdio bus ff0c0000, phyaddr 1, interface rgmii-id

Warning: ethernet@ff0c0000 (eth0) using random MAC address - 86:d3:1d:bd:e8:8e
eth0: ethernet@ff0c0000
ZYNQ GEM: ff0d0000, mdio bus ff0c0000, phyaddr 2, interface rgmii-id

Warning: ethernet@ff0d0000 (eth1) using random MAC address - 76:8d:63:c4:fe:17
, eth1: ethernet@ff0d0000
Hit any key to stop autoboot:  0
Versal>
Versal>  run dfu_ram
#DOWNLOAD ... OK
Ctrl+C to exit ...
#DOWNLOAD ... OK
Ctrl+C to exit ...
Versal>
Versal> pri
arch=arm
baudrate=115200
board=versal
board_name=versal
boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr}
boot_efi_binary=if fdt addr ${fdt_addr_r}; then bootefi bootmgr ${fdt_addr_r};else bootefi bootmgr ${fdtcontroladdr};fi;load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} efi/boot/bootaa64.efi; if fdt addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r};else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi
boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}${boot_syslinux_conf}
boot_net_usb_start=usb start
boot_prefixes=/ /boot/
boot_script_dhcp=boot.scr.uimg
boot_scripts=boot.scr.uimg boot.scr
boot_syslinux_conf=extlinux/extlinux.conf
boot_targets=jtag pxe dhcp jtag mmc0 mmc1 xspi0 dfu_usb pxe dhcp
bootcmd=run distro_bootcmd
bootcmd_dfu_usb=setenv dfu_alt_info boot.scr ram $scriptaddr $script_size_f; dfu 0 ram 0 && echo DFU: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo DFU: SCRIPT FAILED: continuing...;
bootcmd_dhcp=run boot_net_usb_start; if dhcp ${scriptaddr} ${boot_script_dhcp}; then source ${scriptaddr}; fi;setenv efi_fdtfile ${fdtfile}; setenv efi_old_vci ${bootp_vci};setenv efi_old_arch ${bootp_arch};setenv bootp_vci PXEClient:Arch:00011:UNDI:003000;setenv bootp_arch 0xb;if dhcp ${kernel_addr_r}; then tftpboot ${fdt_addr_r} dtb/${efi_fdtfile};if fdt addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r}; else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi;fi;setenv bootp_vci ${efi_old_vci};setenv bootp_arch ${efi_old_arch};setenv efi_fdtfile;setenv efi_old_arch;setenv efi_old_vci;
bootcmd_jtag=echo JTAG: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo JTAG: SCRIPT FAILED: continuing...;
bootcmd_mmc0=devnum=0; run mmc_boot
bootcmd_mmc1=devnum=1; run mmc_boot
bootcmd_pxe=run boot_net_usb_start; dhcp; if pxe get; then pxe boot; fi
bootcmd_xspi0=sf probe 0 0 0 && sf read $scriptaddr $script_offset_f $script_size_f && echo XSPI: Trying to boot script at ${scriptaddr} && source ${scriptaddr}; echo XSPI: SCRIPT FAILED: continuing...;
bootdelay=5
bootm_low=0
bootm_size=80000000
cpu=armv8
dfu_alt_info=Image ram 0x18000000 0x10000000;system.dtb ram 0x40000000 0x400000
dfu_ram=run dfu_ram_info && dfu 0 ram 0
dfu_ram_info=setenv dfu_alt_info Image ram $kernel_addr_r $kernel_size_r\\;system.dtb ram $fdt_addr_r $fdt_size_r
distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
efi_dtb_prefixes=/ /dtb/ /dtb/current/
fdt_addr_r=0x40000000
fdt_high=10000000
fdt_size_r=0x400000
fdtcontroladdr=7ded9b20
initrd_high=79000000
kernel_addr_r=0x18000000
kernel_size_r=0x10000000
load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile}
mmc_boot=if mmc dev ${devnum}; then devtype=mmc; run scan_dev_for_boot_part; fi
pxefile_addr_r=0x10000000
ramdisk_addr_r=0x02100000
scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scripts; done;run scan_dev_for_efi;
scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then run scan_dev_for_boot; fi; done; setenv devplist
scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; for prefix in ${efi_dtb_prefixes}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${efi_fdtfile}; then run load_efi_dtb; fi;done;if test -e ${devtype} ${devnum}:${distro_bootpart} efi/boot/bootaa64.efi; then echo Found EFI removable media binary efi/boot/bootaa64.efi; run boot_efi_binary; echo EFI LOAD FAILED: continuing...; fi; setenv efi_fdtfile
scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${boot_syslinux_conf}; then echo Found ${prefix}${boot_syslinux_conf}; run boot_extlinux; echo SCRIPT FAILED: continuing...; fi
scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${prefix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; done
script_offset_f=7f80000
script_size_f=0x80000
scriptaddr=0x20000000
soc=versal
stderr=serial@ff000000
stdin=serial@ff000000
stdout=serial@ff000000
thor_ram=run dfu_ram_info && thordown 0 ram 0
ubifs_boot=env exists bootubipart || env set bootubipart UBI; env exists bootubivol || env set bootubivol boot; if ubi part ${bootubipart} && ubifsmount ubi${devnum}:${bootubivol}; then devtype=ubi; run scan_dev_for_boot; fi
usb_boot=usb start; if usb dev ${devnum}; then devtype=usb; run scan_dev_for_boot_part; fi
vendor=xilinx

Environment size: 4783/32764 bytes

Versal> booti 0x18000000 - 0x40000000
## Flattened Device Tree blob at 40000000
   Booting using the fdt blob at 0x40000000
   Loading Device Tree to 000000000fff2000, end 000000000ffff294 ... OK

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd083]
[    0.000000] Linux version 5.4.0-xilinx-v2020.1 (oe-user@oe-host) (gcc version 9.2.0 (GCC)) #1 SMP Wed Sep 2 08:07:18 UTC 2020
[    0.000000] Machine model: Xilinx Versal vck190 Eval board revA (QSPI)
[    0.000000] earlycon: pl11 at MMIO32 0x00000000ff000000 (options '115200n8')
[    0.000000] printk: bootconsole [pl11] enabled
[    0.000000] efi: Getting EFI parameters from FDT:
[    0.000000] efi: UEFI not found.
[    0.000000] cma: Reserved 256 MiB at 0x0000000070000000
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: PSCIv1.1 detected in firmware.
[    0.000000] psci: Using standard PSCI v0.2 function IDs
[    0.000000] psci: MIGRATE_INFO_TYPE not supported.
[    0.000000] psci: SMC Calling Convention v1.1
[    0.000000] percpu: Embedded 22 pages/cpu s49880 r8192 d32040 u90112
[    0.000000] Detected PIPT I-cache on CPU0
[    0.000000] CPU features: detected: GIC system register CPU interface

....

root@xilinx-vck190-es1-2020_2:~# 

 

Note: please find the attached the bif files along with boot images and logs.

 

 

2 Comments
Hal1
Newbie
Newbie

Hi ArivanB,

That looks very interesting. I am interested in purchasing the 

Versal AI Core Series VCK190 Evaluation Kit

but I have contacted local Xilinx distributors and am having difficulty purchasing it. Can you give some pointers. 

Thanks,

florentw
Moderator
Moderator

Hi @aravindb 

Unfortunately there is only a limited number of VCK190 board at the moment. Thus this will probably depend on your project

Contacting your local Xilinx distributor (AVNET) to show interest and discussing about your project is the right way.