Open main menu

DAVE Developer's Wiki β

Changes

Helloworld from UART0
|}
<section begin=BELK/>=Introduction=Creating and building example Vivado project==
BELK/BXELK provides an example Vivado project for BORA/BORAX/BORALITE boards. This project allows to:
*generate the PS configuration files to be used with U-boot SPL build
This article describes how two build this project. Two procedures are described, the former is command line based while the latter is GUI based.
The project is stored is a git repository, as described [[Build_system_(BORA_SOM/BELK)-L/Development/Build_system#Setting_up_the_Zynq_development_server_environment|here]].
It is assumed that the Zynq development environment has been set up properly (see [[Build_system_(BORA_SOM/BELK)-L/Development/Build_system|this page]] for more details).
===Command line based procedure===
{{ImportantMessage|text=The following procedure make use of ambient variables to address all our boards.<br>
Define the correct ones according the target SoM.<br>
For Bora SoM use:
*<code>export RECREATE_PRJ recreate_prj_bora_BASE.tcl</code>*<code>export PRJ_DIR BASE_NAME=bora</code>*<code>export BITSTREAM_FILE bora_wrapper</code>*<code>export PS7_DIR bora_processing_system7_0_0</code>*<code>export U-BOOT_PS7_DIR UBOOT_PS7_DIR=bora</code>
For BoraLite SoM use:
*<code>export RECREATE_PRJ recreate_prj_boralite_BASE.tcl</code>*<code>export PRJ_DIR BASE_NAME=boralite</code>*<code>export BITSTREAM_FILE boralite_wrapper</code>*<code>export PS7_DIR boralite_processing_system7_0_0</code>*<code>export U-BOOT_PS7_DIR UBOOT_PS7_DIR=bora</code>
For BoraX SoM use:
*<code>export RECREATE_PRJ recreate_prj_borax_BASE.tcl</code>*<code>export PRJ_DIR BASE_NAME=borax</code>*<code>export BITSTREAM_FILE borax_wrapper</code>*<code>export PS7_DIR borax_processing_system7_0_0</code>*<code>export U-BOOT_PS7_DIR UBOOT_PS7_DIR=borax</code>
}}
<pre>
. /opt/Xilinx/Vivado/<Vivado_version>/settings64.sh
vivado -mode tcl -source scripts/recreate_prj_${RECREATE_PRJBASE_NAME} _BASE.tcl -notrace -tclargs "gen_bitstream"
</pre>
*At the end of the bitstream build process, the <code>build_prj_*</code> script allows to automatically export hardware and lauch SDK.
*The bitstream file is now present in <code><bora_repo>/vivado/${PRJ_DIRBASE_NAME}.runs/impl_1/${BITSTREAM_FILEBASE_NAME}_wrapper.bit</code> and <code><bora_repo>/vivado/${PRJ_DIRBASE_NAME}.runs/impl_1/${BITSTREAM_FILEBASE_NAME}_wrapper.bin</code>.
*By default FSBL is not used anymore in the boot process. U-Boot SPL (first-stage bootloader) is used instead. PS configuration files are used to build U-boot binaries.
**Copy the <code>ps7_init_gpl.c</code> and <code>ps7_init_gpl.h</code> source files into U-boot source code directory using the following command example for Bora:
:<code>cp <bora_repo>/bd/${PRJ_DIRBASE_NAME}/ip/${PS7_DIRBASE_NAME}_processing_system7_0_0/ps7_init_gpl.* <U-boot_src_dir>/board/dave/bora/${U-BOOT_PS7_DIRUBOOT_PS7_DIR}/</code>:*Follow [[BORA_SOM/BELK-L/Development/Building_U-Boot_(BELK/BXELK) Boot | U-boot build instructions]] to build U-boot using new PS configurations. '''Please note that the U-Boot binary images released along with BELK/BXELK were already built upon the <code>ps7_init_gpl.c</code> and <code>ps7_init_gpl.h</code> source files generated by the Vivado project described in this article'''. As such, it is not generally required to rebuild U-Boot.
:**The PS configurations are the same for Bora and BoraLite boards.
===GUI based procedure===
{{ImportantMessage|text=The following procedure make use of ambient variables to address all our boards.<br>
Define the correct ones according the target SoM.<br>
For Bora SoM use:
*<code>export BORA_SOM =Bora</code>*<code>export BASE_NAME =bora</code>*<code>export U-BOOT_PS7_DIR UBOOT_PS7_DIR=bora</code>
For BoraLite SoM use:
*<code>export BORA_SOM =BoraLite</code>*<code>export BASE_NAME =boralite</code>*<code>export U-BOOT_PS7_DIR UBOOT_PS7_DIR=bora</code>
For BoraX SoM use:
*<code>export BORA_SOM =BoraX</code>*<code>export BASE_NAME =borax</code>*<code>export U-BOOT_PS7_DIR UBOOT_PS7_DIR=borax</code>
}}
*The bitstream file is now present in <code><project_directory>/<prj_name>.runs/impl_1/${BASE_NAME}_wrapper.bit</code> and <code><project_directory>/<prj_name>.runs/impl_1/${BASE_NAME}_wrapper.bin</code>.
*Copy the <code>ps7_init_gpl.c</code> and <code>ps7_init_gpl.h</code> source files into U-boot source code directory using the following command example for Bora:
:<code>cp <project_directory>/<prj_name>.srcs/sources_1/bd/${BASE_NAME}/ip/<prj_name>_processing_system7_0_0/ps7_init_gpl.* <U-boot_src_dir>/board/dave/bora/${U-BOOT_PS7_DIRUBOOT_PS7_DIR}/</code>Follow [[BORA_SOM/BELK-L/Development/Building_U-Boot_(BELK/BXELK) Boot | U-boot build instructions]] to build U-boot using new PS configurations. '''Please note that the U-Boot binary images released along with BELK/BXELK were already built upon the <code>ps7_init_gpl.c</code> and <code>ps7_init_gpl.h</code> source files generated by the Vivado project described in this article'''. As such, it is not generally required to rebuild U-Boot.
-----
{{notelist}}
=== Downloading the bitstream to the device ===
Once the bitstream is ready, U-Boot itself can be used to download it onto the device. There are other options, however. For more details, please refer to [[BELK-AN-008:_Programming_the_FPGA_Bitstream_with_U-Boot#Introduction|this section]].
=== Helloworld from UART0 ===
Using the FPGA bitstream previously created, it is possible to use serial tty port on Linux. The serial port is mapped to <code>/dev/ttyPS1</code> (this is because <code>/dev/ttyPS0</code> is the console mapped to UART1).
<pre>
dvdk@vagrant-ubuntu-trusty-64:~/bora/rfs/belk/home/root$ source ~/env.sh dvdk@vagrant:~/bora/rfs/belk/home/root$ $CC hello_UART0.c -o hello_UART0
</pre>
The program executed print out the msg string on the serial console and on <code>/dev/ttyPS1</code> port.
<section end=BELK/>
8,226
edits