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

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:
ftp://ftp.cs.man.ac.uk/pub/amulet/balsa

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:

Changelog

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.

Contributions

Links

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 .