Go to file
Hanchen Ye ac1c9966a8 [HLSKernelToAffine] impl of GemmOp and SymmOp lowering 2020-11-30 22:57:42 -06:00
config [BenchmarkGen] start of cnn test case generation 2020-11-10 23:34:40 -06:00
include [HLSKernelToAffine] impl of GemmOp and SymmOp lowering 2020-11-30 22:57:42 -06:00
lib [HLSKernelToAffine] impl of GemmOp and SymmOp lowering 2020-11-30 22:57:42 -06:00
samples [BenchmarkGen] impl benchmark-gen tool command line entry (#12) 2020-11-09 22:39:34 -06:00
test [HLSKernelToAffine] impl of GemmOp and SymmOp lowering 2020-11-30 22:57:42 -06:00
tools [HLSKernel] rewrite def of CNNOps, all input and output are bufferized now; add mergeOp; [HLSKernelToAffine] update a compact lowering impl; [HLSKernelToLinalg] removed because this will not bring us significant simplification/convenience 2020-11-30 12:39:41 -06:00
.clang-format mechanical rename hlsld to scalehls; update file structure 2020-09-06 18:05:16 -05:00
.gitignore build code structure; update readme; remove pymlir directory 2020-08-25 14:11:30 -05:00
CMakeLists.txt change lit report style 2020-09-14 19:56:06 -05:00
README.md [Readme] add LLVM install instruction 2020-11-05 17:56:34 -06:00

README.md

ScaleHLS Project (scalehls)

This project aims to create a framework that ultimately converts an algorithm written in a high level language into an efficient hardware implementation. With multiple levels of intermediate representations (IRs), MLIR appears to be the ideal tool for exploring ways to optimize the eventual design at various levels of abstraction (e.g. various levels of parallelism). Our framework will be based on MLIR, it will incorporate a backend for high level synthesis (HLS) C/C++ code. However, the key contribution will be our parametrization and optimization of a tremendously large design space.

Quick Start

1. Install LLVM and MLIR

IMPORTANT This step assumes that you have cloned LLVM from (https://github.com/circt/llvm) to $LLVM_DIR. To build LLVM and MLIR, run

$ mkdir $LLVM_DIR/build
$ cd $LLVM_DIR/build
$ cmake -G Ninja ../llvm \
    -DLLVM_ENABLE_PROJECTS="mlir" \
    -DLLVM_TARGETS_TO_BUILD="X86;RISCV" \
    -DLLVM_ENABLE_ASSERTIONS=ON \
    -DCMAKE_BUILD_TYPE=DEBUG
$ ninja
$ ninja check-mlir

2. Install ScaleHLS

This step assumes this repository is cloned to $SCALEHLS_DIR. To build and launch the tests, run

$ mkdir $SCALEHLS_DIR/build
$ cd $SCALEHLS_DIR/build
$ cmake -G Ninja .. \
    -DMLIR_DIR=$LLVM_DIR/build/lib/cmake/mlir \
    -DLLVM_DIR=$LLVM_DIR/build/lib/cmake/llvm \
    -DLLVM_ENABLE_ASSERTIONS=ON \
    -DCMAKE_BUILD_TYPE=DEBUG
$ ninja check-scalehls

After the installation and test successfully completed, you should be able to play with

$ export PATH=$SCALEHLS_DIR/build/bin:$PATH
$ cd $SCALEHLS_DIR
$ scalehls-opt -convert-to-hlscpp test/Conversion/ConvertToHLSCpp/test_*.mlir
$ scalehls-opt -convert-to-hlscpp test/EmitHLSCpp/test_*.mlir | scalehls-translate -emit-hlscpp
$ scalehls-opt -qor-estimation test/Analysis/QoREstimation/test_for.mlir
$ scalehls-opt -hlskernel-to-affine test/Conversion/HLSKernelToAffine/test_*.mlir

References

  1. MLIR documents
  2. mlir-npcomp github
  3. onnx-mlir github
  4. circt github
  5. comba github
  6. dahlia github