Skip to content

Commit

Permalink
Upgrade from Vivado HLS to Vitis HLS v2024.2
Browse files Browse the repository at this point in the history
Make all csim testbenches self-checking.

fix: fix Makefile HLS compiler flows

Update Makefile to automate HLS project
generation and error handling
improvements

- Add USE_VITIS variable to select vitis
(USE_VITIS=1 default) or vivado_hls
(USE_VITIS=0)
- add spdlog support for debug
- auto-generate Tcl script flow using
python (provide %.tcl rule fails numerous
hls components)
- must enumerate C and CXX hls target
files for Tcl support auto-gen flow and only
a subset of files are actually hls
components
- fix LD_LIBRARY_PATH and add to compile
command ( missing /usr/lib/x86_64-linux-gnu
- allow Makefile to process all targets
despite failing hls compile
- add clean target
- add .PRECIOUS: %.bin to allow debug of
.bin flow

fix: update .gitignore

Update .gitignore to exclude build artifacts,
virtual environments, and auto-generated
files for cleaner repositories

feat: add semantic-release support

feat: add generate HLS csynth script

- include default HLS configuration
- add pytest
- note: this is used by examples/Makefile

fix: remove examples/tcl script auto-gen'ed now

fix: rename gen_hls_csynth_script.py

Rename gen_vivado_hls_csynth_script.py to gen_hls_csynth_script.py

fix: fix missing call to fir

The firI1/I2/Q1/Q2 filter functions are missing fir implementation.

fix: add M-1 stage butterflies in FFT calc

fft_streaming function missing M-1 butterflies.  Only had 1 butterfly.

fix: correct delay line init with in vals for block FIR

fix: incorrect NUM_TAPS - should be 16

fix: remove spurious ap_int.h include

hls compiler fails with ap_int.h include

fix: broken delay line input var access

input var was accessed as scaler not array.

fix: missing include histogram.h

fix: missing variables i and j declaration

fix: missing hls_stream.h inc & var defines

fix: incorrect include file name

fix: incorrect S define and LB & UB declares

LB & UB are not scalers but arrays.

fix: incorrect S definition

fix: incorrect var / wrong pragma defines

pragmas were referencing non-existent vars

fix: incorrect window var access for printf

feat: add hls component csynth log extract script

To track warnings, errors, performance results of hls book
examples add python script to parse hls compiler csynth
log files (for both vivado and vitis hls).  The output is a
yaml file that reports and plots can be generated.

fix: gitignore auto-gen'ed .dat and .bmp files

feat: add gen_template_report.py

Add script to generate a summary report of all hls
component status.  Generate an asciidoc report and
use docToolchain to generate a PDF of the report if
desired.

fix: resolve semantic-release changelog config

fix: rename .commitlintrc.js to .commitlint.config.js

fix: remove leading dot from commitlint.config.js

fix: use more generic rule with broader application

chore(release): 1.0.0 [skip ci]

* add M-1 stage butterflies in FFT calc ([c372981](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/c372981da21b96bf0cfc17f203846f26767775ac))
* broken delay line input var access ([ae66946](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/ae66946e007550ab8af36274debc298d9b3c5edb))
* correct delay line init with in vals for block FIR ([a20fa8a](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/a20fa8a9ca439be37bec06c75f6c9935085e0755))
* fix Makefile HLS compiler flows ([790d01b](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/790d01b842b2a6bcf1d164ae40be6c125521186a))
* fix missing call to fir ([cce6a75](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/cce6a75b303cde96a9c26bc5645055e7ea602edc))
* gitignore auto-gen'ed .dat and .bmp files ([38a11a8](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/38a11a88141434efd4d9dff2ffc1c1f8cbc995a4))
* incorrect include file name ([4ba2adc](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/4ba2adc488338b345d54124b9e91f9167290151d))
* incorrect NUM_TAPS - should be 16 ([5771214](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/5771214b9ef93fa24757a66cfe10fc393e08c399))
* incorrect S define and LB & UB declares ([3791562](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/3791562e0b6dda8664ed52cd970b54ae760f4a46))
* incorrect S definition ([0b8cbdd](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/0b8cbdd3eaa30a95b09baad33da0d9173eb761c9))
* incorrect var / wrong pragma defines ([2c017e4](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/2c017e48bd24a15b2b97eb4e3c228aec4505a670))
* incorrect window var access for printf ([67fb24e](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/67fb24e3b9bab719dce0f0b9d6a2e0d1db24d024))
* missing hls_stream.h inc & var defines ([79b7e6d](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/79b7e6d83f7578de1944fd15e761d87720c3dbae))
* missing include histogram.h ([ef3335e](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/ef3335e96452b1caf5d83fffd5c35407ba549e55))
* missing variables i and j declaration ([0362328](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/036232889663dd6dd23e7bb39331d3018dba3d93))
* remove examples/tcl script auto-gen'ed now ([a96623a](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/a96623aa4adfc3bba50bd8765cbde4fcf198cff3))
* remove leading dot from commitlint.config.js ([11a4071](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/11a4071ca44a9d600b14d387043d258d8e0893cd))
* remove spurious ap_int.h include ([a183982](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/a183982ebaa1477557d55166268af4b98922dda9))
* rename .commitlintrc.js to .commitlint.config.js ([8890542](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/88905424e0be06842df0f8d48977ed8802ed754e))
* rename gen_hls_csynth_script.py ([d55fc63](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/d55fc63b2ce88f860cfdc955ad8dbf4510208ea3))
* resolve semantic-release changelog config ([d040b9c](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/d040b9c200e8cafbb0c3b3850978799e34a2e687))
* update .gitignore ([a67dc13](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/a67dc132a08b96bcd76b39d82d1f2a9568915f2a))
* use more generic rule with broader application ([fe1656e](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/fe1656e4ed74469741b1af872cce7d41fd24b8bb))

* add gen_template_report.py ([5c7ba32](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/5c7ba321fdc50288e5b0b86982e35a22f3acf4f3))
* add generate HLS csynth script ([e08baf6](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/e08baf615ab4d0901563cece5f2425a6e0e8ff87))
* add hls component csynth log extract script ([5657582](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/5657582ed3d2f4dd2c7a2756fd3d2d332f0d0022))
* add semantic-release support ([e91efca](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/e91efca86caeb18718713012dec2e6df718caa90))

fix: disable body-max-line-length during release

Don't throw error when release message line
length too long.

chore(release): 1.0.1 [skip ci]

* disable body-max-line-length during release ([3f31e15](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/3f31e1591fae85f747db10d368b473de5e4d1185))

fix: remove spurious commitlint cfg file

Use commitlint.config.js instead

fix: incorrect factor value

Unlike vitis_hls, vivado_hls with an
ARRAY_PARTION factor value set to a value
larger than the array size will throw an error.
vitis_hls, I think, will simply set the factor to the
array size.

fix: same named variables - vivado_hls

In vivado_hls, it is illegal (bug) if there are 2
same named loop variables in the same
function even if the local scope is exclusive.
This is not a problem in vitis_hls.

chore(release): 1.0.2 [skip ci]

* incorrect factor value ([410e644](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/410e64406de1b4398d8f2effc4653d962979388b))
* remove spurious commitlint cfg file ([451ca97](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/451ca971628a8fe7ede4a65ee09b39f721bc5b31))
* same named variables - vivado_hls ([876016a](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/876016aebc15d4589192cb06fc66b53d1c113498))

fix: add python requirements.txt for venv setup

To setup python venv on xsjapps (without sudo), run:

python -m venv .venv --without-pip
source .venv/bin/activate
pip install -r requirements.txt

fix: update venv requirements.txt

fix: add more robust support for pdflatex

pdflatex (converts Tex to PDF) is
part of Texlive distribution.

include URL ref to distro and
docker image

chore: remove vestigial comments

style: remove commented out code

Much of the code in this codebase get included
into the HLS book doc itself.

chore(release): 1.0.3 [skip ci]

* add more robust support for pdflatex ([cc42632](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/cc426329d0d4cba3ba3b052e9c6d99901c4fbf26))
* add python requirements.txt for venv setup ([db839ba](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/db839ba3ebcade2a2b0bab48f821cd96db8d1b04))
* update venv requirements.txt ([7346e7a](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/7346e7a35e608b94c401de1943197bb84a962e29))

fix: add semantic-release support to Makefile

At top Makefile, run

make manual-release

to auto-update CHANGELOG.md and
create new semantic version tag based
on commit message (conventional
commit format).

docs: remove environ specific notes

feat: replace term Vivado with Vitis

See main.tex vivado and VHLS newcommands.

chore(release): 1.1.0 [skip ci]

* add semantic-release support to Makefile ([c32880a](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/c32880a912ba1824a1fd53ef1cd14699e987abc3))

* replace term Vivado with Vitis ([4817cf6](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/4817cf6a23f959730abb297b7a0ed38b0c57375e))

fix: add synth/impl freq support / rename yml file

Rename __hls_log_csynth_data_extract__.yml to
__hls_log_data_extract__.yml

fix: add complex_fir-top.cpp test / use fir() with fir.h

Use fir.c instead of fir11_initial.c
Add fir.h and update fir-top.c to use fir() signature in
include file.

fix: initialize variables / remove spurious loop

block_fir output is not all value -1452 just the last one.
Modify and only test last output as pass/fail check.

fix: initialize y variable

Should this be a requirement in the testbench instead.
spm2_restructured.cpp also initializes and this is an issue when testing on a host platform if default is nonzero.

fix: fix vitis path detection / set CC=gcc / support mixed C/C++ compile

complex_fir-top.cpp test requires mixed C and C++
compilation

fix: uninitialized out[0] and spurious A variable

fix: add fir11_initial.c testbench

update __hls_config__.ini to include fir11_initial-top.c

fix: add block_mm-top.cpp

This is a merge of blockmatmul_test_init.cpp and
blockmatmul_test.cpp files.  These are both partially
complete testbenches but ought not be changed because they are used in the HLS book itself.

fix: increase to ap_fixed<16,2> to increase CORDIC accuracy

With data type of CORDIC at ap_fixed<12,2> the worst
case error is over 41%.  With 16 bits, it drops to around
3.1% with cordic.cpp and even lower with
cordic_fixed.cpp

fix: make cordic testbenches self-checking

add self-checking support to cordic-top.cpp and cordic_fixed-top.cpp testbenches

chore(release): 1.1.1 [skip ci]

* add block_mm-top.cpp ([98085ee](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/98085ee903cf6d14f9ce53994f05bc5e9efe88fe))
* add complex_fir-top.cpp test / use fir() with fir.h ([7cdc9dc](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/7cdc9dc0e038df2d69701927a1845e038d24ecd4))
* add fir11_initial.c testbench ([f4518a0](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/f4518a073097c45bf62079f857b35991770bef19))
* add synth/impl freq support / rename yml file ([7477364](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/74773644811a9de79383f25889bdee42064bcac1))
* fix vitis path detection / set CC=gcc / support mixed C/C++ compile ([5dc07fb](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/5dc07fb80b4b890dd47cbb18de3d96910b9c0be0))
* increase to ap_fixed<16,2> to increase CORDIC accuracy ([c1b434f](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/c1b434f8b130bc9333c1d374298f9c4d4d06f160))
* initialize variables / remove spurious loop ([9879f92](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/9879f92ce430237e17b1b88d1dab75a100aa6f9d))
* initialize y variable ([34c3d2b](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/34c3d2b8246c9404a918321b33f743a236266edc))
* make cordic testbenches self-checking ([4d9f0c8](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/4d9f0c8f689ef5d2791ceb075c2705d8a9ef8c4d))
* uninitialized out[0] and spurious A variable ([64b134f](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/64b134f28591659ebff47ad33ee85515fe751ae2))

fix: add self-checking support on prefixsum testbenches

fix: add self-checking support to video_2dfilter-top.c

fix: add support file to generate reference test image

Add C++ programs to support video_2dfilter-top.c
testbench.

The support files, video_2dfilter_opencv.cpp and
compare_images_opencv.cpp, use OpenCV API to
generate an independent golden reference file,
test_20x20_filtered_opencv.bmp

fix: add self-check bench for boundary condition 2d filter

fix: add borderType support to video_2dfilter_opencv.cpp

Add option to specify the cv::borderType when
running video_2dfilter_opencv.cpp so you can
set the way the border gets processed when
running cv::filter2D

chore(release): 1.1.2 [skip ci]

* add borderType support to video_2dfilter_opencv.cpp ([16a2f5f](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/16a2f5fc9239f52fa5ff81dee9f08aaef01ea96e))
* add self-check bench for boundary condition 2d filter ([d58e41e](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/d58e41e0d096aa43032ec88f9de4140511416941))
* add self-checking support on prefixsum testbenches ([b61ea8e](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/b61ea8e59b14ece12c3c47607971a8f6e32fdd87))
* add self-checking support to video_2dfilter-top.c ([c67a939](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/c67a9396c72ea17f8064d6e3ebf0d51e183861e5))
* add support file to generate reference test image ([a9b9828](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/a9b9828518906ad38dfa4ff41efea526e1c6b6f1))

fix: add self-check on video linebuffer variant tbs

fix: clean up semantic-release support

chore(release): 1.1.3 [skip ci]

* add self-check on video linebuffer variant tbs ([5443703](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/54437032011a6b4953d1554878240b11de1cf72c))
* clean up semantic-release support ([57eb3c6](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/57eb3c6ac19d2a206eab9dde85c7aeb901a63f4e))

fix: clean up Makefile

remove use of test_20x20_border_replicate.bmp file since it's
same as test_20x20_filtered_opencv.bmp

chore(release): 1.1.4 [skip ci]

* clean up Makefile ([f5efc3c](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/f5efc3c2c7a102c29790343f93f7466d6fc6ed24))

fix: fix author name and keywords in package.json

chore(release): 1.1.5 [skip ci]

* fix author name and keywords in package.json ([7f63f66](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/7f63f665da7120002dd491a3b988f2f0ccbebb1f))

fix: remove unnecessary .npmrc

chore(release): 1.1.6 [skip ci]

* remove unnecessary .npmrc ([35b91d7](https://gitenterprise.xilinx.com/mpettigr/pp4fpgas/commit/35b91d74abc769f0b5437e19f9bf4309d2873700))

fix: VHLS path to use Vitis HLS v2024.2

Vitis v2024.2 moves the Vitis HLS include path from the Vitis_HLS area to Vitis proper.  Update VHLS env var to correct search path.

fix: clean up makefile and add release branch

chore(release): 1.1.7 [skip ci]

* clean up makefile and add release branch ([1e4d691](mpettigr@1e4d691))
* VHLS path to use Vitis HLS v2024.2 ([714d652](mpettigr@714d652))

fix: remove npm semantic-release support

fix: add hls tcl runner script

Auto-generate

fix: test with versal @ 500MHz
  • Loading branch information
Mark Pettigrew committed Nov 22, 2024
1 parent 0d7d0ae commit 1fc270f
Show file tree
Hide file tree
Showing 87 changed files with 3,726 additions and 340 deletions.
28 changes: 27 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,30 @@
*.upa
*.upb
main.pdf
*.bin
*.bin
*.o

# hls projects
**/*.proj/

# ignore any python virtual environments
**/.venv/

# ignore examples/tcl files since they are auto-generated
examples/*.tcl

*.pyc

.vscode/

examples/hls/

.gradle/

examples/*.out.dat
examples/out.*.dat
examples/out.dat
examples/video*.bmp

scripts/tests/___summary_all_header.adoc

19 changes: 15 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,13 +1,24 @@
base=main
all: main.pdf

# pdflatex is part of the Texlive distribution.
#
# See https://tug.org/texlive/ for TexLive installation instructions.
# Docker image available at https://hub.docker.com/r/texlive/texlive/

# NOTE: You *must* put the path to your texlive installation here.
TEXLIVE_BINDIR=/wrk/xsjhdnobkup2/mpettigr/projects_nobkup/texlive/texlive/install-tl-20240625/./texlive/2024/bin/x86_64-linux
PDFLATEX=PATH=$(TEXLIVE_BINDIR):$$PATH $(TEXLIVE_BINDIR)/pdflatex
BIBTEX=PATH=$(TEXLIVE_BINDIR):$$PATH $(TEXLIVE_BINDIR)/bibtex

main.aux: all.bib
pdflatex \\nonstopmode\\input main.tex
bibtex main
$(PDFLATEX) \\nonstopmode\\input main.tex
$(BIBTEX) main

main.pdf: main.aux *.tex
pdflatex \\nonstopmode\\input main.tex
pdflatex \\nonstopmode\\input main.tex
$(PDFLATEX) \\nonstopmode\\input main.tex
$(PDFLATEX) \\nonstopmode\\input main.tex

clean:
rm -rf main.pdf *.log *~ *.aux *.bbl *.blg *.out

4 changes: 4 additions & 0 deletions commitlint.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
module.exports = {
extends: ['@commitlint/config-conventional'],
ignores: [(commit) => commit.includes('chore(release)')],
};
156 changes: 132 additions & 24 deletions examples/Makefile
Original file line number Diff line number Diff line change
@@ -1,59 +1,167 @@
VHLS = $(shell vivado_hls -r)
# This makefile was tested with Vivado HLS 2019.2
# and Vitis v2024.1
#
#

# select the HLS compiler to use (vivado_hls or vitis)
USE_VITIS=1

ifeq ($(USE_VITIS),1)
VITIS_COMPILER := $(shell dirname $(shell which vitis_hls))

VHLS = $(VITIS_COMPILER)/../../../Vitis/2024.2
HLS_COMPILER=vitis-run --mode hls --tcl
else
VHLS := $(shell vivado_hls -r)
HLS_COMPILER=vivado_hls -f
endif

EXAMPLES = $(shell ls *-top.c)
EXAMPLES_CPP = $(shell ls *-top.cpp)
EXAMPLES_BIN = $(patsubst %.c,%,$(EXAMPLES))
EXAMPLES_BIN += $(patsubst %.cpp,%,$(EXAMPLES_CPP))
EXAMPLES_LOG = $(patsubst %.c,%.log,$(EXAMPLES))
EXAMPLES_LOG += $(patsubst %.cpp,%.log,$(EXAMPLES_CPP))

#CC = $(VHLS)/lnx64/tools/gcc/bin/gcc
#CXX = $(VHLS)/lnx64/tools/gcc/bin/g++
#CC = $(VHLS)/lnx64/tools/clang/bin/clang
#CXX = $(VHLS)/lnx64/tools/clang/bin/clang++
CC = gcc
CXX = g++

# insert new LD path to the LD_LIBRARY_PATH if it is not already there
#
LD_PATH_NEW = /usr/lib/x86_64-linux-gnu
LD_LIBRARY_PATH := $(shell echo $(value LD_LIBRARY_PATH) | grep -q $(LD_PATH_NEW) || echo $(LD_PATH_NEW):)$(value LD_LIBRARY_PATH)

#GEN_TCL = $(CURDIR)/../scripts/gen_hls_csynth_script.py
GEN_TCL = $(CURDIR)/../scripts/gen_hls_runner_script.py

#HLS_CONFIG_FILE = $(CURDIR)/__hls_config__.ini
HLS_CONFIG_FILE = $(CURDIR)/__hls_config__versal500__.ini

$(warning $(EXAMPLES_LOG))

INPUTFILE=BBC_HD_test_1920x1080.bmp
INPUTFILE=test_20x20.bmp
INPUTFILE_GOLDEN_REF=test_20x20_filtered_opencv.bmp
video_simple-top.log: video_simple-top.bin
./$< $(INPUTFILE) video_simple.bmp > $@

video_2dfilter-top.log: video_2dfilter-top.bin
./$< $(INPUTFILE) video_2dfilter.bmp > $@
./$< $(INPUTFILE) $(INPUTFILE_GOLDEN_REF) video_2dfilter.bmp > $@

video_2dfilter_boundary_condition-top.log: video_2dfilter_boundary_condition-top.bin
./$< $(INPUTFILE) video_2dfilter_boundary_condition.bmp > $@
./$< $(INPUTFILE) $(INPUTFILE_GOLDEN_REF) video_2dfilter_boundary_condition.bmp > $@

video_2dfilter_linebuffer-top.log: video_2dfilter_linebuffer-top.bin
./$< $(INPUTFILE) video_2dfilter_linebuffer.bmp > $@
./$< $(INPUTFILE) $(INPUTFILE_GOLDEN_REF) video_2dfilter_linebuffer.bmp > $@

video_2dfilter_linebuffer_extended-top.log: video_2dfilter_linebuffer_extended-top.bin
./$< $(INPUTFILE) video_2dfilter_linebuffer_extended.bmp > $@
./$< $(INPUTFILE) $(INPUTFILE_GOLDEN_REF) video_2dfilter_linebuffer_extended.bmp > $@

video_2dfilter_linebuffer_extended_constant-top.log: video_2dfilter_linebuffer_extended_constant-top.bin
./$< $(INPUTFILE) video_2dfilter_linebuffer_extended_constant.bmp > $@
./$< $(INPUTFILE) $(INPUTFILE_GOLDEN_REF) video_2dfilter_linebuffer_extended_constant.bmp > $@

%.o: %.c
$(CC) -I$(VHLS)/include -c $< -o $@
%.o: %.cpp
$(CXX) -I$(VHLS)/include -c $< -o $@

complex_fir-top.bin: complex_fir-top.o complex_fir.o fir.o
LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) $(CXX) -I$(VHLS)/include -g -o $@ $^

%-top.bin: %-top.c %.c bitmap.c
gcc -I$(VHLS)/include -std=c99 $? -g -o $@
LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) $(CC) -I$(VHLS)/include -std=c99 $^ -g -o $@

%-top.bin: %-top.cpp %.cpp
g++ -I$(VHLS)/include $? -g -o $@
LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) $(CXX) -I$(VHLS)/include $? -g -o $@

insertion_cell_sort-top.bin: insertion_cell_sort-top.cpp insertion_cell_sort.cpp insertion_sort.cpp
g++ -I$(VHLS)/include $? -g -o $@

#: %-top.bin
%.tcl:
rm -f $@
echo "open_project $*.proj -reset" > $@
echo "add_file $*.c" >> $@
echo "add_file -tb $*-top.c" >> $@
echo "set_top $*" >> $@
echo "open_solution solution -reset" >> $@
echo "set_part virtex7" >> $@
echo "create_clock -period 5" >> $@
echo "csynth_design" >> $@
echo $(LD_LIBRARY_PATH)
LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) $(CXX) -I$(VHLS)/include $? -g -o $@

# missing cos_table and sin_table definition. No testbench files available
# dft.c \
# dft_precompute.c \

CC_HLS_TARGET_FILES = \
block_fir.c \
fir.c \
fir11_initial.c \
fir_cslowed.c \
firrolled.c \
matrix_vector_base.c \
matrix_vector_base_unroll_inner.c \
matrix_vector_optimized.c \
matrix_vector_unroll_inner2.c \
video_2dfilter.c \
video_2dfilter_boundary_condition.c \
video_2dfilter_linebuffer.c \
video_2dfilter_linebuffer_extended.c \
video_2dfilter_linebuffer_extended_constant.c \
video_simple.c

CXX_HLS_TARGET_FILES = \
block_mm.cpp \
complex_fir.cpp \
cordic.cpp \
cordic_fixed.cpp \
fft_stages.cpp \
fft_stages_loop.cpp \
fft_sw.cpp \
histogramSW.cpp \
histogram_dependence.cpp \
histogram_opt1.cpp \
huffman_encoding.cpp \
insertion_cell_sort.cpp \
insertion_sort.cpp \
insertion_sort_parallel.cpp \
insertion_sort_relaxed.cpp \
matrixmultiplication.cpp \
merge_sort.cpp \
merge_sort_loop_merged.cpp \
merge_sort_parallel.cpp \
merge_sort_restructured.cpp \
prefixsumBO.cpp \
prefixsumHW.cpp \
prefixsumSW.cpp \
prefixsum_optimized.cpp \
prefixsum_unrolled.cpp \
restructured_merge_sort.cpp \
spmv.cpp \
spmv_restructured.cpp \
spmv2.cpp \
spmv2_interleaved.cpp \
spmv2_restructured.cpp \
spmv_unrolled.cpp

HLS_TARGETS = $(patsubst %.c,%.proj,$(CC_HLS_TARGET_FILES))
HLS_TARGETS += $(patsubst %.cpp,%.proj,$(CXX_HLS_TARGET_FILES))

%.proj: %.tcl
vivado_hls $?
# vivado_hls -f $?
$(HLS_COMPILER) $? || (echo "$(HLS_COMPILER) $? failed $$?"; exit 0)

%.tcl: %.c
$(GEN_TCL) -c $(HLS_CONFIG_FILE) -i $< -o $@

%.tcl: %.cpp
$(GEN_TCL) -c $(HLS_CONFIG_FILE) -i $< -o $@

%.log: %.bin
./$< > $@
-./$< > $@ || (echo "./$< > $@ failed $$?"; exit 1)


hls: $(HLS_TARGETS)

test: $(EXAMPLES_LOG)


clean:
rm -rf *.o *.log *.bin *.tcl *.proj logs/* hls/*

.PHONY: clean hls test

# Prevent make from deleting the .bin intermediate files
.PRECIOUS: %.bin %.tcl block_fir-top.bin fir-top.bin
Loading

0 comments on commit 1fc270f

Please sign in to comment.