diff options
author | Alex AUVOLAT <alex.auvolat@ens.fr> | 2013-11-07 10:59:38 +0100 |
---|---|---|
committer | Alex AUVOLAT <alex.auvolat@ens.fr> | 2013-11-07 10:59:38 +0100 |
commit | f57717d1a662d519515d5431198709bcb703b8dd (patch) | |
tree | 963165f6c3399381f15e710eda357dc617713c4c /sched/netlist_printer.ml | |
parent | 818f81108fa30cd5a90c99df955f811fed043993 (diff) | |
download | SystDigit-Projet-f57717d1a662d519515d5431198709bcb703b8dd.tar.gz SystDigit-Projet-f57717d1a662d519515d5431198709bcb703b8dd.zip |
Started work on second version of dumb netlist format.
Diffstat (limited to 'sched/netlist_printer.ml')
-rw-r--r-- | sched/netlist_printer.ml | 94 |
1 files changed, 0 insertions, 94 deletions
diff --git a/sched/netlist_printer.ml b/sched/netlist_printer.ml index 746867f..547a0be 100644 --- a/sched/netlist_printer.ml +++ b/sched/netlist_printer.ml @@ -1,8 +1,6 @@ open Netlist_ast open Format -(* GENERAL PRINTER *) - let rec print_env print lp sep rp ff env = let first = ref true in fprintf ff "%s" lp; @@ -84,95 +82,3 @@ let print_program oc p = fprintf ff "@." -(* PRINTER FOR DUMBED-DOWN NETLIST (variables are identified by numbers) *) - -(* constants *) -let c_arg = 0 -let c_reg = 1 -let c_not = 2 -let c_binop = 3 -let c_mux = 4 -let c_rom = 5 -let c_ram = 6 -let c_concat = 7 -let c_slice = 8 -let c_select = 9 - -let binop_i = function - | Or -> 0 - | Xor -> 1 - | And -> 2 - | Nand -> 3 - -let print_dumb_program oc p = - let ff = formatter_of_out_channel oc in - (* associate numbers to variables *) - let n_vars = Env.fold (fun _ _ n -> n+1) p.p_vars 0 in - let n = ref 0 in - let var_id = Hashtbl.create n_vars in - fprintf ff "%d\n" n_vars; - Env.iter - (fun k v -> - Hashtbl.add var_id k !n; - fprintf ff "%d %s\n" - (match v with - | TBit -> 1 - | TBitArray(n) -> n) - k; - n := !n + 1) - p.p_vars; - (* write input vars *) - fprintf ff "%d" (List.length p.p_inputs); - List.iter (fun k -> fprintf ff " %d" (Hashtbl.find var_id k)) p.p_inputs; - fprintf ff "\n"; - (* write output vars *) - fprintf ff "%d" (List.length p.p_outputs); - List.iter (fun k -> fprintf ff " %d" (Hashtbl.find var_id k)) p.p_outputs; - fprintf ff "\n"; - (* write equations *) - fprintf ff "%d\n" (List.length p.p_eqs); - (* write equations *) - let print_arg = function - | Avar(k) -> fprintf ff " $%d" (Hashtbl.find var_id k) - | Aconst(n) -> fprintf ff " "; - begin match n with - | VBit(x) -> fprintf ff "%d" (if x then 1 else 0) - | VBitArray(a) -> - for i = 0 to Array.length a - 1 do - fprintf ff "%d" (if a.(i) then 1 else 0) - done - end - in - List.iter - (fun (k, eqn) -> - fprintf ff "%d " (Hashtbl.find var_id k); - begin match eqn with - | Earg(a) -> fprintf ff "%d" c_arg; - print_arg a - | Ereg(i) -> fprintf ff "%d %d" c_reg (Hashtbl.find var_id i) - | Enot(a) -> fprintf ff "%d" c_not; - print_arg a - | Ebinop(o, a, b) -> fprintf ff "%d %d" c_binop (binop_i o); - print_arg a; - print_arg b - | Emux(a, b, c) -> fprintf ff "%d" c_mux; - print_arg a; print_arg b; print_arg c - | Erom(u, v, a) -> fprintf ff "%d %d %d" c_rom u v; - print_arg a - | Eram (u, v, a, b, c, d) -> fprintf ff "%d %d %d" c_ram u v; - print_arg a; print_arg b; print_arg c; print_arg d - | Econcat(a, b) -> fprintf ff "%d" c_concat; - print_arg a; print_arg b - | Eslice(u, v, a) -> fprintf ff "%d %d %d" c_slice u v; - print_arg a - | Eselect(i, a) -> fprintf ff "%d %d" c_select i; - print_arg a - end; - fprintf ff "\n") - p.p_eqs; - (* flush *) - fprintf ff "@." - - - - |