Go to main content

School of Computer Science Intranet

APT research areas

Discover our main research areas

The Balsa Asynchronous Synthesis System

Balsa Project Manager Window

Balsa is an asynchronous circuit synthesis system developed over a number of years at the APT group of the School Of Computer Science, The University of Manchester.

Balsa is built around the Handshake Circuits methology and can generate gate level netlists from high-level descriptions in the Balsa language. Both dual-rail (QDI) and single-rail (bundled data) circuits can be generated.

The approach adopted by Balsa is that of syntax-directed compilation into communicating handshaking components and closely follows the Tangram system of Philips. The advantage of this approach is that the compilation is transparent: there is a one-to-one mapping between the language constructs in the specification and the intermediate handshake circuits that are produced. It is relatively easy for an experienced user to envisage the architecture of the circuit that results from the original description. Incremental changes made at the language level result in predictable changes at the circuit implementation level.

This release includes an example technology and a Xilinx FPGA technology targets.

For technology packages to support other cell libraries, please contact us (balsa@cs.man.ac.uk).

Download Balsa

June 10, 2010: Major release, Balsa version 4.0

Balsa is licensed under the GNU GPL Version 2.
Source code for Balsa version 4.0 can be found at ftp://ftp.cs.man.ac.uk/pub/apt/balsa/4.0

Read file balsa-release-notes-4.0 for installation details.

May 19, 2006: Major release, Balsa version 3.5

Balsa is licensed under the GNU GPL Version 2.
Source code for Balsa version 3.5 can be found at ftp://ftp.cs.man.ac.uk/pub/amulet/balsa/3.5.1

Read file INSTALL for installation details.

Older Balsa versions and snapshots can be found in the subdirectories of:

The Balsa manual can be found here.

Submit a bug

Our brand new bug report system is available at http://solem.cs.man.ac.uk/.

Mailing list

If you wish to get notified when we release a new version of Balsa, you can fill these boxes:

Name: Email:


Balsa 4.0 (June 2010):

Version 4.0 of Balsa is mostly a "clean up and prune" release. Unused and partially completed features have been removed to try and make the package easier to navigate and maintain.

In particular:

  • Gtkwave is no longer bundled. The new version 3 gtkwave's can be used to view handshake files as balsa-sim-ctrl now generates VCD files (using signals with values 0, 1, X and Z to represent handshake states).
  • Scheme script source files are now in a single directory and have had a lot of miscellaneous functions which are provided by guile removed. This makes balsa-netlist quite a bit faster than in previous versions.
  • balsa-netlist has had a number of switches removed/made default making command line use of the tool easier. This is also reflected in the technology packages use of balsa-netlist switches when used from balsa-mgr.
  • balsa-mgr has been reworked to use gtk+-2.0 rather than gtk+-1.2. This should make it easier to build the package on newer Linux installations.
  • balsa-c doesn't require the KCT/Cocktail tools in order to be built. You will still need KCT to modify balsa-c, but removing it as a dependency for the released version of balsa-c will make Balsa easier to build.
  • New handshake protocols can now be defined in `style' packages separate from Balsa without modifying code in share/scheme. An example of a synchronous set of Balsa components (along with a small example) is given in the package balsa-style-sync.
  • balsa-tech-minimal is an example technology using only one logic gate.

For more details on building Balsa, read the files README and INSTALL in the balsa-4.0.tar.gz package.

Balsa 3.5 (May 2006):

  • Performance Enhancement.
    • New FalseVariable, Concur and SequenceOptimised Handshake Component implementations. These were described in a paper at ICCD05. These new implementations overlap the RTZ phase of the command, resulting in better performance with no area penalty. These are now the default implementations. The user can get the old, "conventional" implementations using the style options FV=conv, PAR=conv and SEQ=conv respectively when setting the BALSATECH environment variable or from balsa-mgr.
    • In the single-rail (bundled-data) backend, the new FalseVariable implementations are only allowed if the new PassivatorPush implementation is used. If the PP=conv style option is used, the FV style option is ignored. This is required for correct implementation of the single-rail circuits.
    • Variable and FalseVariable Handshake Components are now implemented with variable-sized read ports. This results in better area and performance by eliminating the need to split Variable and FalseVariable components (using the balsa-c option var-read-split) introducing additional split and combine components. This makes the var-read-split balsa-c option unnecessary.
    • New average-case adder in DR. Previous releases only had a worst-case (time-balanced) adder in DR. This release introduces an average-case DR adder, with a quick return-to-zero phase. This results in better performance. The user can still get the balanced adder using the style option LOGIC=balanced when setting the BALSATECH environment variable or from balsa-mgr.
  • Experimental features
    • Several experimental features are included in this release. See the Balsa manual (end of chapter 1) for a full description of these new features.
  • Bug Fixes
    • Single-rail data validity protocol problem.
    • A new Fetch component is introduced. As an alternative, a new PassivatorPush with data storage is introduced which also solves the problem resulting in better performance albeit at the cost of larger area.
      The new PassivatorPush component is the default, to target better performance. The user can still get the old, "conventional" implementation of the PassivatorPush using the style option PP=conv when setting the BALSATECH environment variable. This will automatically introduce the new Fetch component implementation (resulting in better area and reduced performance).
    • Added handling of global signals by balsa-make-impl-test
    • Dual-rail implementation of CaseFetch was not guaranteed QDI for certain specifications
    • Insertion of suggest-buffers in Variable, FalseVariable and PassivatorPush components is done in a better way in all design styles.
  • Other Changes
    • Support for builtin functions in verilog was added for the 1-of-4 style.
    • balsa-make-helpers has been updated. It supports all design styles (single-rail, dual-rail, 1-of-4). It generates a helpers-cells file and a gate-mappings file which include the new, generated cells only. The user must concatenate these files with the original ones.
    • The reference sections of the manual have been updated to correct errors and to reflect the latest changes to the system.

Balsa 3.4.3 (May 2005):

  • Bugfixes in balsa simulator.
  • Improvements in Xilinx technology backend .

Balsa 3.4 (May 2004), includes the following major changes:

  • The addition of builtin types for file I/O, string handling and memory models to allow realistic test benches to be constructed without leaving the Balsa system.
  • Updated simulation engine, improved links to GTKWave as the waveform viewer of choice.
  • Visualisation support allowing animation of the handshake circuit graph as a description executes.
  • Better support for a wide range of Verilog simulators.
  • Several bug fixes.
  • A much expanded 135 pages user manual including a much requested section on how to add new technologies and implementation styles.
  • An expanded set of examples with source code and project files.
  • Binary releases for Linux and MacOSX.

Balsa 3.3 was first released in July 2003, but several later snapshots were distributed to selected sites over the next 6 months. Version 3.3 introduced:

  • conditional ports and variables
  • new loop constructs
  • simulation time printing
  • parameterised case statements
  • active enclosure
  • GTKWave as a waveform viewer

A full list of the changes can be found in the new user manual.

All users are recommended to update all components of the Balsa system to version 3.4.



Main download site: ftp://ftp.cs.man.ac.uk/pub/amulet/balsa/3.5
Thanks to the following websites for referencing Balsa: freshmeat.net , gentoo-portage.com , gnomefiles.org , linux.softpedia.org .