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.