diff options
author | Alex AUVOLAT <alex.auvolat@ens.fr> | 2013-12-19 18:31:04 +0100 |
---|---|---|
committer | Alex AUVOLAT <alex.auvolat@ens.fr> | 2013-12-19 18:31:04 +0100 |
commit | 8c63ae039b15a5de575248ed2399e8ab3c451e16 (patch) | |
tree | 90ba1285e3d2438d84ba00328714e52dd54f9483 /cpu/netlist_ast.ml | |
parent | 19d450830f848c9d88d61c381c3bafde560f78bb (diff) | |
download | SystDigit-Projet-8c63ae039b15a5de575248ed2399e8ab3c451e16.tar.gz SystDigit-Projet-8c63ae039b15a5de575248ed2399e8ab3c451e16.zip |
Premiers morceaux de CPU - enfin non, rien du tout...
Diffstat (limited to 'cpu/netlist_ast.ml')
-rw-r--r-- | cpu/netlist_ast.ml | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/cpu/netlist_ast.ml b/cpu/netlist_ast.ml new file mode 100644 index 0000000..1866ed3 --- /dev/null +++ b/cpu/netlist_ast.ml @@ -0,0 +1,42 @@ +type ident = string + +module Env = struct + include Map.Make(struct + type t = ident + let compare = compare + end) + + let of_list l = + List.fold_left (fun env (x, ty) -> add x ty env) empty l +end + +type ty = int (* just one for a bit... *) +type value = bool array + +type binop = Or | Xor | And | Nand + +type arg = + | Avar of ident + | Aconst of value + +type exp = + | Earg of arg + | Ereg of ident + | Enot of arg + | Ebinop of binop * arg * arg + | Emux of arg * arg * arg + | Erom of int (*addr size*) * int (*word size*) * arg (*read_addr*) + | Eram of int (*addr size*) * int (*word size*) + * arg (*read_addr*) * arg (*write_enable*) + * arg (*write_addr*) * arg (*data*) + | Econcat of arg * arg + | Eslice of int * int * arg + | Eselect of int * arg + +type equation = ident * exp + +type program = + { p_eqs : equation list; + p_inputs : ident list; + p_outputs : ident list; + p_vars : ty Env.t; } |