This repo includes an LLVM pass called iiProver that proves that it is safe to use a certain II with the commercial Vitis HLS tool from Xilinx.
Docker (Recommended)
- Clone the source
git clone --recursive [email protected]:JianyiCheng/iiProver.git
cd iiProver
- Build the Docker image
# Check if your Vitis HLS can be found:
ls $YOUR_VHLS_DIR
# You should see the following...
# DocNav Vitis Vivado xic
# Build docker image by specify your directory of Vitis HLS.
make build-docker vhls=$YOUR_VHLS_DIR
If you do not want to use Docker, you need to manually install dependencies for LLVM and Boogie, and export the required environemntal variables manually as illustrated at the end of Docker/Dockerfile
.
- Build iiProver
make build
Enter the Docker container if you are using Docker:
make shell
Let's take examples/top
for example. To prove a given II works for a loop, run iiprover
:
cd examples/top
iiprover top
To automatically find the optimal II for a loop, run iifinder
:
cd examples/top
iifinder top
To verify the results using co-simulation in Vitis HLS, run vhls-cosim
:
cd examples/top
vhls-cosim top
If you use iiProver in your research, please cite our FPL2021 paper
@inproceedings{cheng-fpl2021,
author = {Cheng, Jianyi and Wickerson, John and Constantinides, George A.},
title = {Exploiting the Correlation between Dependence Distance and Latency in Loop Pipelining for HLS},
booktitle = {2021 31th International Conference on Field-Programmable Logic and Applications (FPL)},
year = {2021},
address = {},
pages = {},
numpages = {},
doi = {},
publisher = {IEEE},
}