Alpha

Alpha is a functional language for expressing regular algorithms, synthesizing regular architectures or compiling to sequential or parallel machines from a high level specification. An algorithm is described by equations involving variables defined on multi-dimensional domains. By successive transformations (uniformization, parallelization for instance), the description is refined until it may be interpreted as an architecture. Then, this description can be translated towards logic synthesis tools in order to generate a VLSI architecture. Alternatively, different analyses (scheduling, lifetime, etc.) may guide the transformations towards imperative loop code for general purpose (sequential or parallel) processors. This basic scheme allows one to investigate many important research topics (parallelization, code generation, language semantics, convex polyhedra calculus, abstract and non-standard interpretation, program verification, optimization, architecture synthesis, VLSI, FPGA, systolic arrays, etc.).