[net.lsi] Self timed vs synchronous, lets discuss

sher@rochester.UUCP (08/27/84)

From: David Sher  <sher>
This group has been very quiet for the past year.  There are some
interesting issues in vlsi that bear discussion.  Of course if no one
wants to discuss them then ... .   Anyway does anyone want to bradcast
an opinion on the issue of self timed vs synchronous hardware?  My
personal bias is towards synchronous hardware.  I have designed and
participated in the design of several synchronous systems but not
self timed so I am more comfortable and find it easier to reason about
synchronous hardware.  Self timed hardware is faster than synchronous
hardware (potentially) but requires more hardware to implement.  Also
I think feedback should create problems in a self timed system that do
not exist for synchronous systems.  Any partisans for either side?
-David Sher
sher@rochester
seismo!rochester!sher

padpowell@wateng.UUCP (PAD Powell) (08/31/84)

I contemplate the testing of self timed systems, shudder, and then
think about the power requirements of synchronous systems, and shake.

I quiver a lot these days.  I am thinking of giving up on this design
stuff and doing a stint as a large bowl of jelly.

Patrick Powell

jc@sdcsvax.UUCP (John Cornelius) (09/01/84)

The major advantage of synchronous designs is that they can be debugged. For
those of you who design error free circuitry that is not a problem. For my
part, I need all of the help I can get.

John Cornelius
Western Scientific

padpowell@wateng.UUCP (PAD Powell) (09/05/84)

O.K., O.K.- I said that I looked at testing self timed circuits, and
shuddered.  Somebody said that selftimed are "no harder to debug" ...
using "a couple of lights and a logic probe".  I have the most hilarious
picture of me sitting at a binocular microscope, probing a wafer...

I should have said that "designing a self timed chip which is easily testable"
seems to be a major problem.  I have had several thoughts that would seem
to make the job feasible, but perhaps not simple.

First, one of the techniques in designing testable circuits is to partition
the design into blocks of combinatorial logic, separated by latches/shift
registers.  Circuitry is provided to externally load the shift registers
with a value is used to "probe" the combinatorial logic.  The output of the
combinatorial logic can be latched, and resused to generate new values,
or read out, and checked for a correct value.  There are many variations on this
them, published in proceedings, conferences, etc.  Keywords are BILBO,
LSSD (Level Sensitive Scan Design), Self Testing, etc.

If a self timed system is designed with the data tranfer paths between
blocks to have latches/shift registers placed in critical places, then
it is possible to use the same method to test the logic blocks.
Now you have to figure some way of testing the self time circuitry.

I was playing around with some self timed controller circuits, and noticed
that they all seemed to incorportate some memory elements;  I wondered
if they couldn't be used as a shift-register latch.  No, not quite, but
you could use them as "pass-through/shifters"; now what you could do would
be to fake up a set of "syndrome tests", load these values into the
pass-through/shifters externally, then enable the logic.  By enabling
a critical set of the latches at a time (much handwaving at this point)
and then looking at the values/using them to generate more,
it should be possible to generate tests.

What is the big problem?  Designing test sequences.  I have heard from
people that designing test sequences for asychronous logic is the most
difficult part of test engineering.   Comments like "The stupid program
ran for 60 HOURS on a Mach IV, with a Gigabyte/Megaflop unit, and only
gave me 90% coverage" seems to be common...  The partitioning of the
logic seems to simplify the problems, and and make better test generation
feasible, but not EASIER.

Patrick ("Test? what is this test B.S.?  Real engineers use scopes and
	logic probes!") Powell

qwerty@drutx.UUCP (JonesBD) (09/06/84)

Self timed circuits/chips become even more of a headache when used in larger
circuits/assemblies.  If no provision is made for external control of the
self timing circuitry, the circuit becomes nearly untestable with any
technique other than overall functional operation.  This yields zero
diagnostics when something is wrong.  People who design/use self timed
circuits without any provisions for testing manage to keep life interesting
for those of us employed in the test area.

stevens@utah-cs.UUCP (Ken Stevens) (09/09/84)

In general, curcuit designers are quite ignorant of the attributes of
asynchronous circuits, as witnessed by previous comments.  It is totally wrong
that self-timed circuits are harder to debug (they are actually much easier to
debug).  Unfortunately, most of these myths are propagated by people who have
little knowledge or experience in the design of self-timed circuits.

Comparing asynchronous and synchronous circuits is analogous to comparing
FORTRAN with functional or object oriented languages.  There are certain
advantages to the functional style, although you can do anything in FORTRAN
that you could in LISP, just as you can do anything with a synchronous circuit
that you could with an asynchronous one (but I can't figure out why anyone
would want to!).  Some of the advantages:

	* Easier to make abstractions

	* The constraints for elements are local, rather than global

	* Self-timed circuits are highly modular

	* Elements are directly replacable by improved versions

	* Easier to debug

	* Copes with problems of improved technology

THE MAIN DIFFERENCE:  Function and sequencing are necessary elements for any
design to work.  However, synchronous circuits also require the additional
constraint that requires events to occur during an absolute time window.  In
some ways this is good, in others it is bad.  It allows designers to be
somewhat sloppy and allow certain types of races and glitches, so long as the
circuit is stable by the end of the clock period.  That is a big win.  Self-
timed circuits will not function correctly with glitches, races or hazards.

EASIER TO ABSTRACT:  The LSI designer benefits greatly from the ability to
abstract through block diagrams, logic diagrams, stick diagrams, etc.  In async
circuits, this abstraction applies directly to the actual timing of the
circuit.  Smaller self-timed elements are used as functional black boxes to
build larger systems, and the only constraints necessary are those directly
applicable to the current level of abstraction.  A functional description alone
is not sufficient information to build and interface synchronous circuits.

LOCALITY OF CONSTRAINTS:  In FORTRAN, globals and commons are generally used,
whereas in an applicative language their usage is rare.  Most constraints in
computations in self-timed systems are also local.  Each element has it's own
speed, critical path, storage nodes, etc.  There is no concept of global
critical path analysis or timing verification.  Data is passed as a parameter
to an element along with a request to process the data.

MODULARITY:  Asynchronous systems are extremely modular.  Larger systems are
simply built out of smaller ones.  This aids in replacability and debugging.
Each module can be viewed as a black box-- request a function with data, and
some unknown (but hopefully short) time later the answer will be returned.

REPLACEABILITY:  Because of the modularity, all elements in self-timed systems
are replaceable.  For example, I had a design where a slow ripple-carry counter
was used.  I replaced the slow counter with a fast full lookahed counter, and
there was no need to similate or verify the change.  The only difference came
in a possible area missmatch and quicker circuit.

DEBUGGING: At the functional level, sync and async circuits are equally hard to
debug.  Asynchronous circuits generally require more care in the design since
timing must be generated internally and there may not be races or hazards.
However, once the functional element is designed, you are way ahead because
self-timed SYSTEMS are much easier to debug than synchronous ones.  There is no
global clock driving the error ahead.  If a self-timed system fails, you can
generally go to lunch, get your tool box, and nothing will have changed.  There
is also no real need for expensive equipment such as logic analyzers, etc.  The
system can be debugged with a switch and light panel and logic probe.  The
handshaking signals can be intercepted in between each module, and you have all
the time you desire to examine the data.  The most common problems are that the
function you specified was not really what is required, or the signals were
connected wrong.  An interesting observation:  In the vast majority of the
cases, a failure in self-timed systems will cause the machine to hang.  From
there it is usually quite clear where the fault originated.

FUTURE TECHNOLOGY: Just as functional languages adapt better to AI and the
newer technology, self timed systems adapt much better to decreased lambda and
tau.  Global synchrony on a chip will likely be impossible in the future.
Speed independent designs are scaleable and will still function at lambda =
0.25u, just as they did at lambda = 2u.

SPEED:  If the granularity of self-timed systems is small, sync systems will be
faster because the overhead for the handshaking operation will be a substantial
fraction of the time required to carry out the desired function.  Again, as in
debugging, self-timed systems, if designed correctly, can be much faster than
synchronous systems.  This is due to the fact that there is no need for
components to run at worst-case speeds, there is no need for concurrent
operations to run at nearly the same speed, etc.

SUMMARY:  Hopefully this dispells some of the myths which surrounds self-timed
circuits.  Given my choice I would much rather design self-timed circuits!  I
suggest that you read Mead-Conway chapter 7 by Chuck Seitz for a good treatment
of timing methodologies.

cheers		harpo!utah-cs!stevens
		stevens@utah-20