Skip to content

Releases: EPFL-LAP/dynamatic

dynamatic-v2.0.0

03 Mar 21:14
0cab874
Compare
Choose a tag to compare

This is the first official release of Dynamatic, version 2.0.0 🎉!

Compared to our last pre-release version (v0.3.0), this version only contains a couple bug fixes, updates to the high-level documentation/tutorials/guidelines, and incremental improvements to the interactive dataflow visualizer.

Version Naming Rational

This first release is named v2.0.0 instead of v1.0.0 to avoid confusion with the legacy LLVM IR-based version of Dynamatic, which we consider to be Dynamatic's "first offical version" in this context.

What's Changed

Full Changelog: dynamatic-v0.3.0...dynamatic-v2.0.0

dynamatic-v0.3.0

19 Feb 14:16
c0c703e
Compare
Choose a tag to compare
dynamatic-v0.3.0 Pre-release
Pre-release

This is the third internal release of Dynamatic---version 0.3.0 🎉--and our last pre-release before we officially launch ⭐ Dynamatic 2.0.0 ⭐ toward the end of this month!

The feature-set present in this release is slightly different from the one we announced around October, with some important changes in our dependencies to improve the process of building and using Dynamatic, and the introduction of multiple passes to increase the quality of the circuits we generate.

Release Overview

  • Farewell to legacy Dynamatic 👋
    • Temporary transfer of dot2vhdl to tools/export-dot, with clean-up.
      • The LSQ generation process is now separate from the tool itself, which just creates LSQ configuration files parsed by the old LSQ generator separately.
      • This tool will soon be superseeded by our new backend.
    • Transfer of hls-verifier to tools/hls-verifier, with clean-up. Kernel input generation is now handled by integration tests directly, as opposed to by the verifier.
    • Removal of set-legacy-path command from frontend.
  • Farewell to CIRCT 👋
    • Dynamatic no longer depends on CIRCT, which removes one submodule and one version of LLVM from our build process (this roughly divides by 2 our build time and size).
    • Transfer of remaining compiler passes we used from CIRCT (fork/sink materialization pass and cf-to-handshake pass) to Dynamatic.
    • Transfer of (modified) Handshake dialect (and HW dialect, for lowering to RTL) from CIRCT to Dynamatic.
    • The version of LLVM we depend on is now the one within Polygeist (polygeist/llvm-project), which we have forked to have more control over its passes and over the underlying LLVM commit that it references.
  • Graduation of the dataflow visualizer (visual-dataflow) to non-experimental: worked on by @alicepotter, @albertfares, and @Tikipiou.
    • New visualize command supported by the frontend to prepare data for the visualizer.
    • Cleaner file layout.
    • Visual and build process improvements coming soon.
  • Smarter buffer placement, as introduced in FPL'22.
    • Unlike the previously implemented approach, takes into account all paths in the circuit.
    • Now the default placement strategy in our compilation flow.
  • LSQ elimination/reduction pass, as introduced in FPT'19.
    • Memory access dependence analysis at the dataflow level (post cf-to-handshake conversion), for increased performance and modularity.
    • Identical or better performance compared to legacy Dynamatic's implementation.
    • Memory interface creation process identical between cf-to-handshake pass and LSQ optimization pass thanks to new helper classes, allowing future work to reuse the same logic without code duplication.
  • More fine-grained Handshake operations.
    • handshake::LoadOp now broken down into handshake::MCLoadOp and handshake::LSQLoadOp, for MCs and LSQs, respectively.
    • handshake::StoreOp now broken down into handshake::MCStoreOp and handshake::LSQStoreOp, for MCs and LSQs, respectively.
    • handshake::BufferOp now broken down into handshake::OEHBOp and handshake::TEHBOp, for opaque and transparent buffers, respectively.
  • Initial support for speculative execution: worked on by @asleix.
    • Introduction of 5 new Handshake operations to model necessary dataflow components.
    • Initial speculative-component placement support in HandshakeSpeculationPass.
  • New "Introduction to Dynamatic" tutorial, in two chapters.
    • First chapter teaches the reader to use the frontend and visualizer.
    • Second chapter guides the reader through the design of a simple pass and through its debugging using the visualizer.
    • Designed for Dynamatic Reloaded tutorial @ FPGA'24.
  • Smaller miscellaneous changes.
    • Cleaner layout, labels, and arrow styles in DOT files, yielding cleaner-looking graphs.
    • More memory-oriented integration tests.
    • Better CFG analysis support.
    • Improved IR canonicalization (materialization)
    • Bug fixes all over the place.

What's Changed

  • [DOC] Add description and diagram to illustrate the compilation flow. by @qianxu1998 in #53
  • Visual Dataflow 1.0 by @Tikipiou in #57
  • [handshake-sim] Added buffers and rising edge abstractions by @Polymeth in #58
  • [Speculation] Add a basic Pass that reads from a JSON file by @asleix in #60
  • [export-vhdl] fixing the handling of constant widths in the export-vhdl tool by @Jiahui17 in #63
  • [Experimental][Buffers] A simple pass for inserting a single buffer at a specific channel by @Jiahui17 in #62

New Contributors

Full Changelog: dynamatic-v0.2.0...dynamatic-v0.3.0

dynamatic-v0.2.0

20 Nov 23:11
7ec408f
Compare
Choose a tag to compare
dynamatic-v0.2.0 Pre-release
Pre-release

This is the second (slightly late) internal release of Dynamatic, version 0.2.0 🎉!

The feature-set present in this release is somewhat different from the one we initially announced, with more backend/support changes that are not necessarily obvious but which nonetheless are key to the stability, performance, and flexibility of the compiler.

Release Overview

  • LSQ support.
    • From polyhedral analysis to Verilog generation. Still missing FPT'19 flow analysis.
    • Fully modular flow with separate passes for memory dependence tagging, memory interface tagging, and memory interface placement. Each step can be ran independently from the others, allowing custom logic to be injected at any point.
    • Improved abstractions for iterating over and querying logical memory ports of memory interfaces (MCs or LSQs).
  • Buffer placement modeling improvements.
    • MILP formulation now takes into account channel delays, specifiable on a per-channel basis.
    • Better code architecture, allowing more code sharing and personalization of the buffer placement pass.
  • Integration tests.
    • From 10 to 40 integration tests (all those from legacy Dynamatic are included).
    • Automated input generation for software-level profiling (for buffer placement): gone are the manually generated inputs.txt files!
  • Significant supporting infrastructure improvements.
    • Introduction of the DynamaticPass, a superclass to almost all our compiler passes that factors in commonly needed logic and performs automated and customizable pre/post-pass semantic verification.
    • Introduction of our naming analysis infrastructure, providing unique names to all IR operations automatically throughout the flow.
    • Generic back-annotation pass and formalized support for channel-based attributes (not natively supported by MLIR), allowing one to set attributes on IR operations/operands from a JSON-formatted file and at any point in the flow.
  • Frontend stability improvements.
    • Better handling of relative paths overall.
    • Better bookkeeping of intermediate compilation files.
  • Dataflow simulator and visualizer progress.
    • Architectural improvements to the Handshake simulator, laying the groudwork to reach cycle-accuracy when simulating Handshake-level IR in C++: worked on by @Polymeth.
    • Initial work on the interactive dataflow visualizer, which is nearing a working state, allowing users to watch the execution of their circuits cycle-per-cycle to help in debugging (and/or marvel at their creation): worked on by @albertfares, @alicepotter, and @Tikipiou.

What's Changed

New Contributors

Full Changelog: dynamatic-v0.1.0...dynamatic-v0.2.0

Dynamatic v0.1.0 Release

02 Oct 12:59
57a0655
Compare
Choose a tag to compare
Pre-release

This is the first internal release of Dynamatic, version 0.1.0 🎉!
The repository is made public at the same time as this release.

Features

  • Elastic pass, as introduced in FPGA'18.
  • Bitwidth optimization based on a forward/backward approach (worked on by @yuxwang99).
  • Smart buffer placement, as introduced in FPGA'20 (worked on by @yuxwang99).
  • Memory controller placement in all circuits (even when it leads to incorrect behavior). LSQ support will come in the next release.
  • High-level code transformations (e.g., loop rotation) for simpler and more optimizable CFGs.
  • Arithmetic strength reduction for shorter simulation times and smaller area numbers.
  • High-level project design documentation, MLIR tutorials, and heavy documentation throughout the codebase.
  • Streamlined build process for Ubuntu-like machines (works on WSL and Linux on ARM too!).
  • Dynamatic shell/frontend supporting automated compilation using Dynamatic, simulation and verification using Modelsim, and synthesis using Vivado HLS (still using the dot2vhd/hls_verifier tools of legacy Dynamatic internally).

What's Changed

  • Bit optim by @yuxwang99 in #1
  • Bit optim by @yuxwang99 in #2
  • check the attribute of new inserted op, ignore if not exists by @yuxwang99 in #3
  • Extract CFDFC from standard level by @yuxwang99 in #4
  • [handshake-sim] Default code for handshake simulator by @Polymeth in #5
  • [CDGAnalysis] Support functions and test pass by @teodorcvijovic in #6
  • [handshake-sim] Added JSON configuration for execution model by @Polymeth in #11
  • [HandshakeToNetlist] Improved components' names by @Liudmila-Paskonova in #10
  • [OptimizeBitwidths] Forward cycle optimization by @RamirezLucas in #20
  • Buffer place by @yuxwang99 in #8
  • [handshake-sim] Added complete modularity for execution models by @Polymeth in #13
  • [ExportDOT] Fixes for bitwidth optimized DOTs by @RamirezLucas in #23
  • [export-VHDL] Json library and vhd components by @Liudmila-Paskonova in #25
  • [export-dot] Use timing modeling in DOT legacy mode by @RamirezLucas in #34
  • [Buffers] Fix all bugs in FPGA'20 buffer placement by @RamirezLucas in #35
  • [ReduceStrength] Reintroduce arith::CmpIOp promotion by @RamirezLucas in #37
  • [handshake-sim] Added support for Dynamatic operations by @Polymeth in #32
  • [ScfToCf] Signedness-aware scf::ForOp lowering by @RamirezLucas in #38
  • [Export-VHDL] A new tool that exports netlist to VHDL. by @Liudmila-Paskonova in #39

New Contributors

Full Changelog: https://github.com/EPFL-LAP/dynamatic/commits/dynamatic-v0.1.0