Vai al contenuto

ELLA (linguaggio di programmazione)

Da Wikipedia, l'enciclopedia libera.
ELLA
linguaggio di programmazione
AutoreRoyal Signals and Radar Establishment
Data di origine1986
Ultima versione3.6.0
UtilizzoLinguaggio di descrizione dell'hardware
Implementazione di riferimento
LinguaALGOL 68RS
LicenzaPubblico dominio (parzialmente)

ELLA è un linguaggio di descrizione hardware[1] e un set di strumenti di supporto, sviluppato nel Regno Unito dal Royal Signals and Radar Establishment (RSRE) durante gli anni '80 e '90 del 900. RSRE ha sviluppato anche il compilatore per il linguaggio di programmazione ALGOL 68RS, utilizzato per sviluppare ELLA.

ELLA adotta un approccio alla modellazione dell'hardware di tipo strutturale[2] e fornisce strumenti per eseguire trasformazioni di programma, simulazione, sintesi e verifica formale[3].

ELLA ha vinto il Queen's Award for Technological Achievement nel 1989[senza fonte].

Codice per la verifica della descrizione hardware per un moltiplicatore di matrici:

MAC ZIP = ([INT n]TYPE t: vector1 vector2) -> [n][2]t:
 [INT k = 1..n](vector1[k], vector2[k]).
   
MAC TRANSPOSE = ([INT n][INT m]TYPE t: matrix) -> [m][n]t:
 [INT i = 1..m] [INT j = 1..n] matrix[j][i].

MAC INNER_PRODUCT{FN * = [2]TYPE t -> TYPE s, FN + = [2]s -> s}
         = ([INT n][2]t: vector) -> s:
 IF n = 1 THEN *vector[1]
 ELSE *vector[1] + INNER_PRODUCT {*,+} vector[2..n]
 FI.

MAC MATRIX_MULT {FN * = [2]TYPE t->TYPE s, FN + = [2]s->s} =
([INT n][INT m]t: matrix1, [m][INT p]t: matrix2) -> [n][p]s:
BEGIN
 LET transposed_matrix2 = TRANSPOSE matrix2.
OUTPUT [INT i = 1..n][INT j = 1..p]
    INNER_PRODUCT{*,+}ZIP(matrix1[i],transposed_matrix2[j])
END.

TYPE element = NEW elt/(1..20),
   product = NEW prd/(1..1200).

FN PLUS = (product: integer1 integer2) -> product:
 ARITH integer1 + integer2.

FN MULT = (element: integer1 integer2) -> product:
 ARITH integer1 * integer2.

FN MULT_234 = ([2][3]element:matrix1, [3][4]element:matrix2) ->
       [2][4]product: 
 MATRIX_MULT{MULT,PLUS}(matrix1, matrix2).

FN TEST = () -> [2][4]product:
( LET m1 = ((elt/2, elt/1, elt/1),
      (elt/3, elt/6, elt/9)), 
   m2 = ((elt/6, elt/1, elt/3, elt/4), 
      (elt/9, elt/2, elt/8, elt/3),
      (elt/6, elt/4, elt/1, elt/2)).
 OUTPUT
  MULT_234 (m1, m2)
).

COM test: just displaysignal MOC
  1. ^ J.D. Morison e A.S. Clarke, Ella 2000: A Language for Electronic System Design, McGraw Hill, 1993, ISBN 978-0077078218.
  2. ^ J. Mermet, P. Marwedel, F.J. Ramming, C. Newton, D. Borrione e C. Lefaou, Three decades of hardware description languages in Europe, in Journal of Electrical Engineering and Information Science, vol. 3, n. 6, 1998, pp. 700-723.
  3. ^ H. Barringer, G. Gough, B. Monahan, A. Williams, M. Arcus, A. Armstrong e M. Hill, A design and verification environment for ELLA, Design Automation Conference (DAC) 1995, 1995, pp. 685–690, DOI:10.1109/ASPDAC.1995.486387, ISBN 4-930813-67-0.

Collegamenti esterni

[modifica | modifica wikitesto]