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.