Download PDF1 - Greg Gibeling

Transcript
be complicated and error prone at best, simply because the access needed was not envisioned are part
of the design.
We also intend to shift from the JFlex [60] and
CUP [54] parser generators to ANTLR [73], which
besides using a better parsing algorithm should allow RDLC3 to generate more helpful error messages, a perennial sore spot for users. The more
powerful parser should also allow us to restructure
the language syntax to reduce the reliance on keywords, improve the specification of types, and general reduce the verbosity of RDL. Trivial changes
in this regard can make a programming language
of any kind significantly more accessible to novices,
whose focus is generally on the lexical structure and
syntax rather than the language semantics. Further, given the the number of special purpose keywords (see Section 5.4) in RDL2, we believe an
annotation mechanism integrated with the plugin
framework (see Section 10) may be a more flexible
and simpler choice.
In addition to language level changes, we believe that there are abstraction changes necessary
to grow to truly large designs. In particular we have
found the lack of a platform level I/O abstraction to
be limiting when dealing with a wide variety platforms. Because RDL does not capture platform I/O
it automatically manage it, something novice hardware designers and even some experts will assuredly
require. We believe that adding the concept of platform level firmware to RDL, including the language
and compiler structures to support it will be relatively easy and go a long way to fixing this problem. Furthermore, this should replace the awkward
language and platform qualified plugin system (see
Section 6.5.2).
Since the initial design of the channel model (see
Section 3.3) it has become clear to us that there
are other channel models which would be useful.
In particular shift-register channels, in contrast to
credit-based flow control channels, would not require handshaking and could be used to implement
many designs much more efficiently. Expanding
on this, several users have requested the ability
to specify different variants of the inside edge interface (see Section 3.2), all supporting the same
concepts but with slightly different signaling conventions. Integration of existing code, in particular
reducing the workload described in [84], would be
simplified by features as simple as the option to
specify that certain inside edge signals are active
low.
We believe a generalized inside edge interface
could allow RDLC3 to support several novel features with little cost. Ideas like allowing a unit
implementation to pipeline the simulation of tar-
get cycles, or a link which can undo or redo the
sending of messages within the current target cycle
are good examples. More interesting is the idea of
making space-time tradeoffs by, for example, delivering the elements of an array message at a rate of
one per host cycle to a pipelined unit implementation. A variant of this called implementation multithreading (see Section 16.4.2) is likely to be critical
in larger systems. Taking this to an extreme, ideas
like message cancellations which flow opposite normal messages could lead to very large performance
improvements [35, 34] for certain target systems.
We have planned from the beginning but never
had the time to implement support for the simulation of globally asynchronous, locally synchronous
(GALS) designs, and other such designs without a
single target clock. In particular we have worked
out, but not yet implemented many of the details
to support units to have dependent clocks related
by simple rational divisors.
It should be clear from the above ideas that we
have successfully identified many shortcomings in
RDLC2. Though RDLC2 successfully and greatly
expanded the range of systems for which RDL could
be used, we expect RDLC3 will make a significant
impact by finally delivering on the complete feature
set needed by the majority of projects, in a clean,
simple and unified manner.
16.4.2
Implementation Multithreading
Because the RAMP project hopes to scale to thousands of processor cores without thousands of FPGAs, it is clear that simple structural models will
not be sufficient. To this end, we have been exploring a concept we call implementation multithreading, whereby a single unit implementation simulates multiple instances in the target system. By
time multiplexing the unit implementation, we can
allow a researcher to trade time, of which there is
an infinite amount, for FPGA or CPU space, which
is extremely expensive.
16.4.3
Debugging & RADTools
Debugging any concurrent system is well know to
be difficult, if not impossible in real world conditions thanks to the non-determinism underlying
the synchronization failures we most often would
wish to debug. Because a properly implemented1
RDL simulation is completely deterministic and repeatable it is possible to expose these bugs. Better
1 By this we mean that unit implementations are deterministic.
140