summaryrefslogtreecommitdiff
path: root/cpu/netlist_ast.ml
diff options
context:
space:
mode:
Diffstat (limited to 'cpu/netlist_ast.ml')
-rw-r--r--cpu/netlist_ast.ml42
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; }