https://github.com/cucapra/dahlia
Time-sensitive affine types for predictable hardware generation
https://github.com/cucapra/dahlia
dahlia fpga-programming high-level-synthesis open-source-hardware
Last synced: 3 months ago
JSON representation
Time-sensitive affine types for predictable hardware generation
- Host: GitHub
- URL: https://github.com/cucapra/dahlia
- Owner: cucapra
- License: mit
- Created: 2018-05-22T21:12:30.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2025-10-31T19:12:38.000Z (6 months ago)
- Last Synced: 2025-10-31T21:09:22.684Z (6 months ago)
- Topics: dahlia, fpga-programming, high-level-synthesis, open-source-hardware
- Language: Scala
- Homepage: https://capra.cs.cornell.edu/dahlia
- Size: 5.62 MB
- Stars: 146
- Watchers: 6
- Forks: 10
- Open Issues: 29
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
The Dahlia Programming Language
Dahlia is a programming language for designing hardware accelerators. It
provides abstractions that guarantee predictable hardware generation after type
checking. For more details, see [the demo][demo] and [the documentation][docs].
Fuse is the reference compiler for compiling Dahlia programs to various HLS
backends. Vivado HLS is the only currently supported backend.
[docs]: https://capra.cs.cornell.edu/fuse
[demo]: https://capra.cs.cornell.edu/dahlia
## Set It Up
The compiler is written in [Scala][].
To get things running, you will need a Java runtime, Scala itself, and [sbt][].
Here's what you need to do:
- Get Java if you don't already have it.
- For MAC OS: `brew install --cask temurin`.
- **NOTE**: The default adoptopenjdk (Java 13) version does not work with SBT.
- Install Scala and sbt. On macOS, use `brew install scala sbt`.
- Install [Runt][] to run integration tests:
```
cargo install runt \
--version "$(grep ver runt.toml | awk '{print $3}' | tr -d "'")"
```
- Now you can compile the compiler by typing `sbt assembly`.
- Use `sbt test` to run the tests
- Use `runt` to run the integration tests from the repository root.
[scala]: https://www.scala-lang.org/
[sbt]: https://scala-sbt.org
[homebrew]: https://brew.sh
[fat jar]: https://stackoverflow.com/questions/19150811/what-is-a-fat-jar
[runt]: https://github.com/rachitnigam/runt
## Compiler development
If you're working on the compiler, you probably want to use the sbt console instead (it's faster for repeated builds).
Run `sbt` alone to get the console, where you can type commands like `compile`, `test`, and `run [args]`.
Adding the prefix `~` (such as `~compile`) makes `sbt` go into watch mode, i.e., it will re-run the command every time a dependency changes. Use `~assembly` to continously update `./fuse` or `~test` to continously test the changes.
If you want to execute a sequence of `sbt` commands without starting `sbt` console, you can type `sbt "; cmd1; cm2 ..."`. For example, `sbt "; test; assembly"` will run `sbt test` followed by `sbt assembly`.
## Use It
Type `sbt assembly` to package up a [fat jar][] for command-line use.
The short `fuse` shell script here invokes the built jar to run the compiler.
To compile a simple test, for example, run:
$ ./fuse ./file-tests/should-compile/matadd.fuse
The compiler produces HLS C source code on its standard output.
Compiler Infrastructure
### Source
Because of how Docusaurus is structured, the website is stored in the `website/`
directory and the documentation files are stored in `docs/`.
### Building
We use github pages to deploy the page. Read the README under `website/` for
instructions.