All Projects → cucapra → dahlia

cucapra / dahlia

Licence: MIT License
Time-sensitive affine types for predictable hardware generation

Programming Languages

scala
5932 projects
racket
414 projects
javascript
184084 projects - #8 most used programming language
emacs lisp
2029 projects
Makefile
30231 projects
CSS
56736 projects

Projects that are alternatives of or similar to dahlia

calyx
Intermediate Language (IL) for Hardware Accelerator Generators
Stars: ✭ 157 (+80.46%)
Mutual labels:  open-source-hardware, high-level-synthesis, fpga-programming, dahlia
OpenCGRA
OpenCGRA is an open-source framework for modeling, testing, and evaluating CGRAs.
Stars: ✭ 51 (-41.38%)
Mutual labels:  open-source-hardware
hero-sdk
⛔ DEPRECATED ⛔ HERO Software Development Kit
Stars: ✭ 21 (-75.86%)
Mutual labels:  open-source-hardware
OpenCGRA2
CGRA-Flow is a integrated framework for CGRA synthesis and development.
Stars: ✭ 26 (-70.11%)
Mutual labels:  open-source-hardware
8Q
General Purpose 8 Qubit Optical Quantum Computer
Stars: ✭ 55 (-36.78%)
Mutual labels:  open-source-hardware
PandA-bambu
PandA-bambu public repository
Stars: ✭ 129 (+48.28%)
Mutual labels:  high-level-synthesis
vericert
A formally verified high-level synthesis tool based on CompCert and written in Coq.
Stars: ✭ 63 (-27.59%)
Mutual labels:  high-level-synthesis
DragonArmor
Dragon Armor 3D-printable CAD files (Autodesk Fusion 360)
Stars: ✭ 46 (-47.13%)
Mutual labels:  open-source-hardware
LipSync
An open-source mouth operated sip and puff joystick that enables people with limited hand function emulate a mouse on their computer and/or smartphone.
Stars: ✭ 27 (-68.97%)
Mutual labels:  open-source-hardware
hlsclt
A Vivado HLS Command Line Helper Tool
Stars: ✭ 35 (-59.77%)
Mutual labels:  high-level-synthesis
polyphony
Polyphony is Python based High-Level Synthesis compiler.
Stars: ✭ 90 (+3.45%)
Mutual labels:  high-level-synthesis
soap
🎯 soap - Structural Optimisation of Arithmetic Programs
Stars: ✭ 21 (-75.86%)
Mutual labels:  high-level-synthesis
Awesome-Retro-Docs
A curated collection of technical documentation for Arcades, Handhelds, Consoles, Computers and MCU’s.
Stars: ✭ 128 (+47.13%)
Mutual labels:  fpga-programming
Quasar
Quasar 2.0: Chisel equivalent of SweRV-EL2
Stars: ✭ 19 (-78.16%)
Mutual labels:  open-source-hardware

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 and the documentation.

Fuse is the reference compiler for compiling Dahlia programs to various HLS backends. Vivado HLS is the only currently supported backend.

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 tap AdoptOpenJDK/openjdk && brew cask install adoptopenjdk8.
    • 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.

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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].