Skip to content

Instantly share code, notes, and snippets.

@jordi-petit
Last active November 4, 2016 15:38
Show Gist options
  • Save jordi-petit/9edc9270936f5c47c9f389653590475d to your computer and use it in GitHub Desktop.
Save jordi-petit/9edc9270936f5c47c9f389653590475d to your computer and use it in GitHub Desktop.
Sample ArchLib with coffee
mod1 = (w, x, y) ->
name: "mod1"
call: "mod1 #{w} #{x} #{y}"
ports:
in:
type: 'input'
width: w
out:
type: 'output'
width: w
architectures:
a1:
area: x + y
delay: x * y
mod2 = (w, x, y) ->
name: "mod2"
call: "mod2 #{w} #{x} #{y}"
ports:
in:
type: 'input'
width: w
out:
type: 'output'
width: w
architectures:
a1:
area: x + y
delay: x * y
lib1 = require './lib1.coffee'
mod = (w) ->
name: "mod"
call: "mod #{w}"
ports:
in:
type: 'input'
width: w
out:
type: 'output'
width: w
architectures:
a51:
modules:
i1: lib1.mod1 w, 10, 20
i2: lib1.mod1 w, 20, 10
channels:
'in -> i1.in': {}
'i1.out -> i2.in': {}
'i2.in -> out': {}
a52:
modules:
i1: lib1.mod2 w, 10, 20
i2: lib1.mod2 w, 20, 10
channels:
'in -> i1.in':
reg: 0
'i1.out -> i2.in':
reg: 1
retime: false
'i2.in -> out': {}
library =
name: 'libname'
root: mod 4
reg_area: 1.5
reg_delay: 2.2
@jordi-petit
Copy link
Author

JordiC, et deixo dos fitxers amb proposta de llenguatge per l'ArchLib utilitzant el CoffeeScript. Continuo utilitzant la idea d'abans, perquè no li veig inconvenients.

Hi ha dos fitxers, per demostrar que es pot repartir en trossos.

  • Al primer fitxer, es defineixen dos mòduls paramètrics mod1 i mod2. Un dels paràmetres és justament la default width (w). Els altres dos (x i y) són per jugar. Com a novetat, els mòduls tenen un camp name i call, que seran per ajudar a debuggar més endavant.

  • El segon fitxer, inclou el primer i crea un altre mòdul mod també paramètric (amb w) que té dues possibles implementacions muntant netlists amb els dos mòduls anteriors. El segon fitxer defineix també la llibreria pròpiament dita, donant-li un nom, l'àrea i el retards dels registres i (novetat) una crida al mòdul arrel. Crec que a tu t'agradaria més que això revés un altre nom, com ara Circuit, i reservar Llibreria per a la unió de tots els fitxers.

De cara a l'usuari, això és tot. No veig què pot trobar que no sigui net ni complicat. Entenc que això és ben bé el que en diuen SDLs, specific description languages.

De cara al programador, es pot processar sense problemes aquests fitxers i obtenir essencialment un JSON equivalent als que teníem abans. La seva sintaxi és més complicada perquè són recursius i abans només tenien un nivell, però diuen exactament el mateix. És cert que són més grossos i tenen més duplicacions, però això és una qüestió interna (no de l'usuari) i, igualment, haguéssim muntat un arbre de la mateix mida.

Què et sembla?

Un detall addicional és que això ara ho he fet amb CoffeeScript però és essencialment factible amb qualsevol altre llenguatge que tingui diccionaris i llistes, per exemple, Python:

def mod1(w, x, y):
    return {
        "name": "mod1",
        "call": "mod1 #{w} #{x} #{y}",
        "ports": {
            "in": {
                "type": 'input',
                "width": w
            },
            "out": {
                "type": 'output',
                "width": w
            }
        },
        "architectures": {
            "a1": {
                "area": x + y,
                "delay": x * y
            }
        }
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment