ELLA (programming language)

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

ELLA
DeveloperRoyal Signals and Radar Establishment
Initial release1986; 40 years ago (1986)
Repository
  • {{URL|example.com|optional display text}}Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
Written inALGOL 68RS
Engine
    Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
    Operating systemVMS
    PlatformICL 2900 Series, Multics, VAX
    Available inEnglish
    TypeHardware description language
    Licensepublic domain (parts)

    ELLA is a hardware description language and support toolset, developed in the United Kingdom by the Royal Signals and Radar Establishment (RSRE) during the 1980s and 1990s, which also developed the compiler for the programming language, ALGOL 68RS, used to write ELLA.

    ELLA has tools to perform:

    ELLA is a winner of the 1989 Queen's Award for Technological Achievement.

    Sample

    [edit | edit source]

    Sample originally from ftp://ftp.dra.hmg.gb/pub/ella[dead link], public release.

    Code for matrix multiplication hardware design verification:

    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
    

    References

    [edit | edit source]
    • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    [edit | edit source]

    Lua error in Module:Authority_control at line 153: attempt to index field 'wikibase' (a nil value).