Janus
Compiler for Run Time Reconfiguring
Applications |
|
The Java based Hardware Description Language:
JHDL
JHDL is a language developed with the intent of
elegantly embodying the run-time reconfiguration paradigm in a commonly
used (familiar) programming environment. This approach allows the user
to describe, netlist, simulate, and execute full run-time reconfigurable
systems, all with a single Java description. Java is used to implement
a simulation kernel that models hardware execution with a set of classes
such as "Wire", "Synchronous", "CombinationalLogic", and so forth. The
dynamic creation/destruction of these objects is exploited to model run-time
hardware reconfiguration. Furthermore, the component classes provide built-in
hierarchical netlisting. Finally, the system is bundled into wrapper classes
that can either perform the computation by running the simulation kernel,
or by making device driver calls to load a corresponding circuit into an
FPGA system. Thus, software simulation and hardware execution are performed
with the same piece of code, enabling a true codesign methodology.
The primary objective of this research project is to
develop a tool-suite/design-environment for describing configurable computing
applications that merges the circuit description and the control program
into a single, integrated piece of software. This project has the following
additional requirements and potential benefits:
It must use an existing programming language with no
extensions. This will make the tool accessible to a wider range of programmers
by allowing them to use commercially-available compilers.
The CCM-control paradigm must be CCM independent. CCM
control details should be abstracted to a higher level programming abstraction.
This will make CCMs more accessible to programmers and will also ease the
process of retargetting an applications to run on a variety of different
CCMs.
The description method must support run-time and partial
configuration. These are the most demanding CCM applications and will be
used from the outset to stress the design environment.
The integrated description must serve for both simulation
and final execution with no modifications. For simulation, it must support
end-to-end simulation of applications that may consist of many configurations.
For execution, it should be possible to switch transparently
from a software simulation to hardware execution on the CCM simply by changing
a software switch.
JHDL Approach
The primary distinction of JHDL and indeed the primary
goal of this project is the creation of a single integrated API that allows
the designer to express circuit organizations that dynamically change over
time. Stated another way, the primary goal is to allow the designer to
specify, in a reasonably natural way, when hardware gets loaded and removed
from a CCM without exposing any of the details normally associated with
CCM operation. Rather than invent a new language feature to schedule the
configuration of circuits, we chose to adopt the object-instance construction/destruction
mechanism used in object-oriented languages.
The current JHDL system is implemented as a set of Java
class libraries with functionality divided into two basic areas: circuit
simulation and CCM runtime support. Circuit simulation classes allow the
designer to design circuit models that can be simulated at the clock level
through the JHDL simulation kernel. CCM runtime support classes provide
transparent access to CCM control functions via the construction/destruction
mechanism. Designers develop circuits in JHDL by selecting from a set of
synchronous and combinational elements and wiring these together to form
any arbitrary synchronous circuit. There are three different classes that
can be used to implement a circuit: CL (combinational), Synchronous (clocked),
and Structural (interconnection of combinational or synchronous elements).
When creating a new circuit, the designer decides whether the outputs of
the circuit are updated continuously, i.e., it is a combinational circuit
(a CL object), or are updated only on a clock edge, i.e., it is a synchronous
circuit (a Synchronous object), or if it is a structural circuit (Structural
object), i.e., one that is just a set of existing synchronous or combinational
circuit elements interconnected together. In each case, the designer defines
a new class that inherits from the appropriate class and implements the
desired functionality in the constructor and other methods. Individual
circuits are interconnected by instantiating Wire objects and passing these
to the object as arguments to the object constructors.
JHDL Examples
JHDL has been used to describe and execute several "real"
applications, such as the "shapesum" and "correlation" functions of the
Chunky-SLD Automatic Target Recognition (ATR) problem. These applications
have been implemented on the Xilinx 6200 using partial reconfiguration,
as well as on other platforms. For this initial feasibility study, the
original circuits are being used as they were originally implemented via
schematic capture and manual placement. The main difference is that the
entire circuit is now described in JHDL. This description provides a comprehensive
simulation model of the ATR application.
Benefits and Progress of JHDL
JHDL is based on a popular language and requires no
language extensions for circuit design.
The CCM control paradigm is CCM independent, adopting
the object-instance construction metaphor from object-oriented languages.
The abstraction will work with any standard CCM.
JHDL supports both partial and global configuration
and demonstration applications from ATR have been implemented to show this
capability.
A JHDL application description serves as both simulation
and execution for CCM applications. No code modifications are required
and switching between software simulation and hardware execution on the
CCM requires the setting of a single boolean variable.
For more information on the JHDL tools go to the
JHDL home page at http://www.jhdl.org




