Lola (computing)

For the music performance streaming system, see LoLa (software).

LolaParadigms| Multi-paradigm: procedural, imperative, structured, object-oriented

|

Family| Wirth Oberon
Designed by| Niklaus Wirth
Developer| ETH Zurich
First appeared| June 1995; 29 years ago (1995-06)
Typing discipline| Static, strong
Scope| Lexical (static)
Implementation language| Oberon
Influenced by
ALGOL, Pascal, Modula

Lola is designed to be a simple hardware description language for describing synchronous, digital circuits. Niklaus Wirth developed the language to teach digital design on field-programmable gate arrays (FPGAs) to computer science students while a professor at ETH Zurich.

The purpose of Lola is to statically describe the structure and function of hardware components and of the connections between them. A Lola text is composed of declarations and statements. It describes digital electronics hardware on the logic gate level in the form of signal assignments. Signals are combined using operators and assigned to other signals. Signals and the respective assignments can be grouped together into data types. An instance of a type is a hardware component. Types can be composed of instances of other types, thereby supporting a hierarchical design style and they can be generic, e.g., parametrizable with the word width of a circuit.

All of the concepts mentioned above are demonstrated in the following example of a circuit for adding binary data. First, a fundamental building block (TYPE Cell) is defined, then this Cell is used to declare a cascade of word-width 8, and finally the Cells are connected to each other. The MODULE Adder defined in this example can serve as a building block on a higher level of the design hierarchy.

MODULE Adder;

TYPE Cell; (* Composite Type *)
IN x,y,ci:BIT; (* input signals *)
OUT z,co:BIT; (* output signals *)
BEGIN
z:=x-y-ci;
co:=x*y+x*ci+y*ci;
END Cell;

CONST N:=8;
IN X,Y:[N]BIT; ci:BIT; (* input signals *)
OUT Z:[N]BIT; co:BIT; (* output signals *)
VAR S:[N]Cell; (* composite type instances *)
BEGIN
S.0(X.0, Y.0, ci); (* inputs in cell 0 *)
FOR i:=1..N-1 DO
S.i(X.i,Y.i,S[i-1].co); (* inputs in cell i *)
END;
FOR i:=0..N-1 DO
Z.i:=S.i.z;
END;
co:=S.7.co;
END Adder.

Wirth describes Lola from a user's perspective in his book Digital Circuit Design. A complementary view on the details of the Lola compiler's implementation can be found in Wirth's technical report Lola System Notes. An overview of the whole system of tools for digital design is the technical report Tools for Digital Circuit Design using FPGAs (containing a copy of the report on the language Lola Lola: An Object-Oriented Logic Description Language).

## External links

[edit]

* CAD Tools for Hardware Design at ETH Zürich, including the Lola language page

* v
* t
* e

Programmable logic

Concepts|

* ASIC
* SoC
* FPGA
* Logic block
* CPLD
* EPLD
* PLA
* PAL
* GAL
* PSoC
* Reconfigurable computing
* Xputer
* Soft microprocessor
* Circuit underutilization
* High-level synthesis
* Hardware acceleration

Languages|

* Verilog
* A
* AMS
* VHDL
* AMS
* VITAL
* SystemVerilog
* DPI
* SystemC
* AHDL
* Handel-C
* Lola
* PSL
* UPF
* PALASM
* ABEL
* CUPL
* C to HDL
* Flow to HDL
* MyHDL
* ELLA
* Chisel

Companies|

* Accellera
* Achronix
* AMD
* Aldec
* Arm
* Cadence
* Infineon
* Intel
* Lattice
* Microchip Technology
* NXP
* Siemens
* Synopsys
* Texas Instruments

Products|

| Hardware|

* iCE
* Stratix
* Virtex

|

Software|

* Intel Quartus Prime
* Xilinx ISE
* Vivado
* ModelSim
* VTR
* Simulators

Intellectual
property|

| Proprietary|

* ARC
* ARM Cortex-M
* LEON
* LatticeMico8
* MicroBlaze
* PicoBlaze
* Nios
* Nios II

|

Open-source|

* JOP
* LatticeMico32
* OpenCores
* OpenRISC
* 1200
* Power ISA
* Libre-SOC
* Microwatt
* RISC-V

* v
* t
* e

Modula, Oberon

Modula|

| By Wirth|

Modula (1975) → Modula-2 (1978)

|

By others|

* Modula-2+ (1984)
* Modula-3 (1988)
* Baby Modula-3 (1993)
* Obliq (1993)
* Alma-0 (1997)

Operating systems|

* Medos-2 (1983, Knudsen)
* Excelsior (1988, Soviet)

Workstations|

* Lilith (1980, Wirth)
* Kronos (1988, Soviet)

Developers|

| Organizations|

* ETH Zurich
* Modula Computer Systems
* Centrum Wiskunde & Informatica
* Digital Equipment Corporation (DEC) Systems Research Center (SRC)
* Acorn Research Center
* Olivetti Research Center (ORC)
* elego Software Solutions GmbH
* Academy of Sciences of the Soviet Union, Novosibirsk

|

People|

* Niklaus Wirth
* Martín Abadi
* Luca Cardelli
* Greg Nelson

Oberon|

| By Wirth|

Oberon (1987) → Oberon-2 (1991) → Lola (1995) → Active Oberon (1998) → Oberon-07 (2007)

Operating systems|

* Oberon System (1987)
* Active Object System (AOS, 2002), Bluebottle (2005), A2 (2008)

Workstation|

Ceres (1985)

By others|

* Object Oberon (1989)
* Oberon/F, BlackBox Component Builder (1993)
* Component Pascal (1997)
* Zonnon (2013)

Developers|

| Organizations|

* ETH Zurich
* Johannes Kepler University Linz
* Oberon microsystems AG

|

People|

* Niklaus Wirth
* Jürg Gutknecht
* Tony Hoare
* de:Hanspeter Mössenböck

* Category: Modula
* Category: Oberon

* v
* t
* e

Niklaus Wirth

Software|

| Programming
languages|

Euler (1965) → PL360 (1966) → ALGOL W (1966) → Pascal (1970) → Modula (1975) → Modula-2 (1978) → Object Pascal (1986) → Oberon (1987) → Oberon-2 (1991) → Lola (1995) → Active Oberon (1998) → Oberon-07 (2007)

|

Operating systems|

Oberon System (1987) → Active Object System (AOS, 2002), Bluebottle (2005), A2 (2008)

Formalisms|

* Wirth's law
* Wirth syntax notation
* Wirth–Weber precedence relationship

Books|

* Algorithms + Data Structures = Programs

Workstations|

Lilith (1977) → Ceres (1985)

Workplaces|

* Stanford University (1963–67)
* University of Zurich (1963–67)
* ETH Zurich (1968–99)
* Xerox PARC (1976–77, 1984–85)

Collaborators|

* Jürg Gutknecht
* Tony Hoare
* de:Hanspeter Mössenböck
* Larry Tesler

Awards|

* Turing Award
* SIGPLAN Programming Languages Achievement Award
* Fellow of the Computer History Museum
* Marcel Benoist Prize

* Category

This programming-language-related article is a stub. You can help Wikipedia by expanding it.

|

* v
* t
* e

*[v]: View this template
*[t]: Discuss this template
*[e]: Edit this template