[comp.lang.functional] Digital Circuit simulator using Lazy Fuctional languages

dimitris@CS.UWindsor.Ca (Dimitris Phoukas) (03/21/91)

Are there any pointers to implementations of digital circuit  simulators
using  Lazy-Functional techniques? The simulator should at least be able
to  model  the  'transport'  and  'inertial'  type   delays   found   in
discrete-event  systems. Here, at the VLSI Research Group, we "feel" that
two particular properties of laziness, namely 'recursive'  traversal  of
data  structures  using the Attribute Grammar idiom and lazy-memo tables
for caching values calculated through  circular  data  definitions  have
great  potential...   Could someone give us some additional "confidence"
in our belief?

Partial evaluation techniques could also be also  applied  to  'compile'
test-vectors  with specific models. You could also mention that in yours
responses.

If the number of respones is satisfactory, I promise to redistribute the
list in some format appropriate for inclusion in publications (bibTeX?)

Thanks for your co-operation.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dimitris Phoukas
School of Computer Science, University of Windsor
Ontario, CANADA N9B 3P4

E-mail : dimitris@cs.uwindsor.ca
FAX    : (519) 973 7093

johnsson@cs.chalmers.se (Thomas Johnsson) (03/22/91)

In article <403@schoenfinkel.CS.UWindsor.Ca> dimitris@CS.UWindsor.Ca (Dimitris Phoukas) writes:
>
>Are there any pointers to implementations of digital circuit  simulators
>using  Lazy-Functional techniques? The simulator should at least be able
>to  model  the  'transport'  and  'inertial'  type   delays   found   in
>discrete-event  systems.  [.........]

I don't know what transport and inertial delays are, but if you are
content with quantized time, it is extremely easy to do digital
circuit simulation using streams. a NAND gate, for example, is
simulated with a function taking two streams of booleans as arguments
and returns a stream of booleans as the result.  The simulated circuit
is hooked up in a letrec expression.  For example, simulating an
oscillator made up of an inverter (with a time delay of two time
units) can be done as follows (using Lazy ML):

let rec inv s = False.False.map (\x.~x) s  in 	-- The inverter definition

let rec x = inv x  in		-- The circuit

	x			-- Look at x


The value of the program is the infinite list 
False.False.True.True.False.False. ....

-- Thomas Johnsson
Thomas Johnsson  (johnsson@cs.chalmers.se)
Dept. of CS, Chalmers University of Technology, S-412 96 Goteborg, Sweden
phone: dept: +46 (0)31 721088.