Last active
November 4, 2016 15:38
-
-
Save jordi-petit/9edc9270936f5c47c9f389653590475d to your computer and use it in GitHub Desktop.
Sample ArchLib with coffee
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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
imod2
. Un dels paràmetres és justament la default width (w
). Els altres dos (x
iy
) són per jugar. Com a novetat, els mòduls tenen un campname
icall
, 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 (ambw
) 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: