- We tested the hardware code generation on two different machines based on Ubuntu 18.04 and Centos OS 7.6 respectively.
- We used Xilinx Vitis Unified Platform and Vivado HLx toolchains 2019.2
- We used python 3.6 with
argparsenumpymathpackets on the generation machine - a) As host machines, or hardware design machines, we used Pynq 2.5 on the Zynq based platforms (Pynq-Z2, Ultra96, Zcu104), where we employ
cv2,numpy,pandas,multiprocessing,statistics,argparse, andpydicompacketes. - b) We tested the Alveo u200 on a machine with CentOS 7.6, i7-4770 CPU @ 3.40GHz, and 16 GB of RAM, and we installed Pynq 2.5.1 following the instructions by the Pynq team with the same packets as point 4a.
- [Optional] Possible issues with locale: export LANG="en_US.utf8"
src/source code for HLS based design, miscellaneous utilities, python host and testing code, and various scriptshls/HLS source code for both design and testbench.misc/this folder contains only the board definition files (BDF), that are properties of the board producer, we report here just for the sake of the userpython/python host source code for single MI testscripts/miscellaneous scripts for the design generation, from tcl for Vivado and Vivado HLS to design configurator and design results extractionsplatforms/specific platforms makefile for the current supported boards: Pynq-Z2, Ultra96, Zcu104, Alveo u200
- Source the necessary scripts, for example:
source <my_path_to_vitis>/settings64.sh; for Alveo you will need to source xrt, e.g.,source /opt/xilinx/xrt/setup.sh - Install the board definition files (misc folder contains them and a guide on how to install them)
- Just do a
make, ormake helpin the top folder for viewing an helper (print all helpersmake helpall) - use/modify the design space exploration script (i.e.,
dse.shortop_build.sh) or generate your designs or use single instance specific generation - a)
make hw_gen TRGT_PLATFORM=<trgt_zynq>for generating an instance of a Zynq-based design, wheretrgt_zynq=zcu104|ultra96|pynqz2 - b)
make hw_gen TARGET=hw OPT_LVL=3 CLK_FRQ=$FREQZ TRGT_PLATFORM=alveo_u200for generating an instance of the design on the Alveo u200 with target clock frequencyCLK_FRQ=$FREQZ - [Optional] Generate other instances changing the design parameters. Look at Makefile parameters section for details.
- Complete at least one design in the previous section
make swcreates a deploy folder for the python codemake deploy BRD_IP=<target_ip> BRD_USR=<user_name_on_remote_host> BRD_DIR=<path_to_copy>copy onto the deploy folders the needed files- connect to the remote device, i.e., via ssh
ssh <user_name_on_remote_host>@<target_ip> - [Optional] install all needed python packages as above, or the pynq package on the Alveo host machine
- set
BITSTREAM=<path_to_bits>,CLK=200,CORE_NR=<target_core_numbers>,PLATFORM=Alveo|Zynq,RES_PATH=path_results, and source xrt on the Alveo host machine, e.g.,source /opt/xilinx/xrt/setup.sh - [Optional]
python3 test-single-mi.py --helpfor a complete view of input parameters - Execute the test
python3 test-single-mi.py -ol $BITSTREAM -clk $CLK -t $CORE_NR -p $PLATFORM -im 512 -rp $RES_PATH(if on Zynq you will needsudo)
Follows some makefile parameters
- TRGT_PLATFORM=
pynqz2|ultra96_v2|zcu104|alveo_u200 - Histogram Computation type HT=
float|fixed - Histogram PE Number PE=
1|2|4|8|16|32|64 - Entropy PE Number PE_ENTROP=
1|2|4|8|16|32 - Use caching or not CACHING=
true|false - Use URAM caching URAM=
true|false, not effective if CACHING=false - Core Number CORE_NR=
1|2|3|4
- HLS_CLK=
default 10clock period for hls synthesis - FREQ_MHZ=
150clock frequency for vivado block design and bitstream generation - TOP_LVL_FN=
mutual_information_mastertarget top function for HLS - HLS_OPTS=
5HLS project flow. Supported options: 0 for only project build; 1 for sim only; 2 synth; 3 cosim; 4 synth and ip downto impl; 5 synth and ip export; 6 for ip export
- REPORT_FLAG=
R0|R1|R2to report detail levels - OPT_LVL=
0|1|2|3|s|quickto optimization levels - CLK_FRQ=
<target_mhz>to ClockID 0 (board) target frequency, should be PCIe clock
- a)
make resyn_extr_zynq_<trgt_zynq>e.g., trgt_zynq=zcu104|ultra96|pynqz2, set FREQ_MHZ parameter if different from default. - b)
make resyn_extr_vts_<trgt_alveo>e.g., trgt_alveo=alveo_u200 - You will find in the
build/folder a new folder with all the generated bitstreams, and in thebuild/<TRGT_PLATFORM>/directory you will find a .csv with all the synthesis results
Contributors: Conficconi, Davide and D'Arnese, Eleonora and Del Sozzo, Emanuele and Sciuto, Donatella and Santambrogio, Marco D.
If you find this repository useful, please use the following citation(s):
@inproceedings{iron2021,
author = {Conficconi, Davide and D'Arnese, Eleonora and Del Sozzo, Emanuele and Sciuto, Donatella and Santambrogio, Marco D},
title = {A Framework for Customizable FPGA-based Image Registration Accelerators},
booktitle = {The 2021 ACM/SIGDA International Symposium on Field-Programmable Gate Arrays},
pages={251--261},
year = {2021}
}