Tools


Several tools, written in Go, have been developed to handle various aspects of the ecosystem. Some of them are used to build and handle the BondMachines at the architecture level, others are used to build the architecture and the software from a higher level (codesign).

Architecture level tools

These tools allow control over every aspect of BM building, such as building a specific architecture based on the task, modifying the CP behavior, connecting the CP and the shared objects (SOs), simulating the behavior, and checking the functionality with the aim of generating the Hardware Description Language (HDL) code for a programmable device, i.e., an FPGA device.

The major tools for the BMs building are two:

  • procbuilder a CP builder manages the configuration parameters of the CPs

  • bondmachine a BM builder manages the interconnection between the CPs and SOs

Moreover, the tools share the possibility of using the generated BM architecture that can be directly emulated on a workstation without the need of an FPGA. This application is called simbox.

Codesign tools (low level)

The low-level codesign tools are used to build the software that runs on the BMs. The software is written in a specific assembly language, called Basm. The Bondgo compiler is a Go compiler that generates the code from a high-level language, in this case, Go. Both the tools share the possibility of generating the BM architecture as well as the software that runs on it. This is the major achievement of the BondMachine ecosystem, the possibility of generating the hardware and the software from the same source code.

The Basm assembler

basm is the assembly language of the BondMachine. It is a RISC-like language with a few instructions and a few addressing modes. The main goal of Basm is to be simple and to be easily translated into the BM architecture.

The Bondgo compiler

bondgo is a compiler for the BondMachine that starts from an high level language, in this case Go, and compiles the code to generate the assembly code of the architecture. The generated assembly code may be assembled with the procbuilder tool resulting in the generation of the binary code for a CP. Unlike other compilers, Bondgo can create the assembly code in a way that a given processor can run it, or can even create the CP optimized for that code. The resulting architecture has only the needed resources and is highly specialized to run that code. Moreover Bondgo handle the concurrency of the source code by creating a multicore BM so it creates a new CP in the BM every time a Goroutine is encountered, that is optimized to run the code produced by the compilation.

Codesign tools (high level)

The low-level codesing tools can be thinked as the building blocks for these high-level tools. Each of these tools is specialized in a particular task, such as neural network modeling, quantum computing simulation, matrix calculation, etc.

A few of these tools are:

  • neuralbond is an application that models a neural network over BondMachines. The final result of the process is a device composed of many CPs acting as neuron-like computing units.
  • bmqsim is a quantum simulator that uses BMs to simulate quantum circuits.
  • symbond permits the creation of BMs that compute particular mathematical expressions.
  • boolbond handles BMs that manage boolean expressions.
  • matrixwork performs matrix calculations with BondMachines.