JBits Arithmetic Cores

This page presents some developments in JBits made in the Arénaire. project at ENS Lyon.

JBits is a development framework for Xilinx FPGAs based on the Java language. For more information, please follow this link. The support of Xilinx and Celoxica University Programs is also gratefully acknowledged. This work was also supported by an Action Concertée Incitative Jeunes Chercheurs of the French Government.

DISCLAIMER: According to the documentation, bitstreams produced by JBits programs such as those presented here may potentially damage an actual chip. These programs are provided as is, and you will use them at your own risk. Neither I nor my employer will assume any responsibility for any hardware damage that could occur.

This being said, the cores simulate perfectly in BoardScope, are based on pieces of code cut-and-pasted from the examples given with JBits, and all their routing is handled by JRoute. I'm pretty confident.

Function generator using multipartite tables

This core is a generator for an arbitrary function, for arbitrary input and output precisions up to 24 bits. Typical area is less than 1000 LUTs for a 16-bit function (that is 250 Virtex CLBs), which is much smaller than a straightforward table implementation. For comparison, the Xilinx sine/cosine cores, for example, don't allow for more than 10 bits. For this size of 10 bits, our cores are approximately twice smaller.

To learn more about it

The techniques used (mutipartite tables) have been presented in the 15th IEEE Symposium on Computer Arithmetic. An earlier version is available as INRIA research report RR-4059.

This core is available in the form of a java archive containing the source and compiled classes.

To lauch it, type java -jar multipartite.jar

or double-click on it if your system allows.

To unpack it and see the source files, type jar -xvf multipartite.jar


If you are only interested in the multipartite method, follow this link.

If you want to use this program to build a core for a function wich is not predefined, you simply need to define your function and its interval in the Function class.

This program has been developped and tested using java 1.2.2 and JBits 2.7. Unfortunately both Java and JBits are quick-varying species, so I don't guarantee it will work with other versions.

This program is distributed under the GPL. See inside the archive for details.

I will be very happy to answer questions and provide details.

Constant multiplier using Canonical Signed Recoding

This core instantiates a multiplier with a constant, using the well-known technique of Canonical Signed Recoding. It is smaller than the standard KCM but its size is dependent on the constant. Its routing is also constant-dependent.

Warning: This core was written using JBits 2.3 and has not been supported since...

To learn more about it

There is a research report describing how it works. It was published at the ENREGLE conference in June 2000 at Las Vegas.

You will probably want to have a look at the Java source of this core. I hope it is correctly documented. If not, mail me to complain.

And the JavaDoc documentation is also inline, as well as a test program demonstrating it.

  This image shows in BoardScope two multipliers of 16-bit numbers by 16-bits constants, one by 58995 (left) and one by 57311 (right). The multipliers are 8 CLBs high, and respectively 1 and 5 CLBs wide. On the left of each multiplier there is a row of registers holding the input value (on 16 bits) and the output value (32 bits).

To play with it

Florent de Dinechin (address at insa-lyon.fr)
Last modified: Wed Dec 5 19:42:28 MET 2001