Structural, Behavioural and Declarative.Three main forms of design entry and programing. We also add regular expressions. StructuralSubroutine call to anonymous instance or component instantiation: comp0(a, b, c, f); { decl d; comp1(a, b, c, d); comp2(b, c, f); } Can use a thread of control to activate or always be active. A return value used sometimes or else have bi-directional ports. Each of the variables can be complete interfaces with bi-directional data flows and handshakes for flow control. BehaviouralBehavioural is very familiar to us and uses a thread of control to perform operations in turn. A functional style gives the tool more freedom over order of execution. thread { i = 0; while (1) { foo(g(i)+k(i)); i++ } Many systems communicate between threads using shared variables. Process algebras use named channels with read and write primitives x = R(ch) R: ch -> exp W(ch, x) W: ch * exp -> unit Low-level hardware design using behavioural constructs uses an infinite process loop with wait statements. Can wait() for a clock edge or other handshake signal. Standard denotational semantics can take a section of behavioural code and convert it to a massively-parallel, next state function using symbolic evaluation. Hence, functional and imperative behavioural specification is useful, well-understood and easy. DeclarativeWe provide a list of specifications that the system must achieve. Any algorithm or combinatorial structure can be used to generate the design. always s1 \/ s2 \/ s3; always s1 -> X(s2); s2 = N == q*D + r; |
Home. SRG Talk. 12 March 2003. DJ Greaves. www.cl.cam.ac.uk.