blob: 1b4b9d8b2023eb30ab5cc826b8e0b6c8ca774c97 (
plain) (
tree)
|
|
let simulate = ref false
let number_steps = ref (-1)
let sim_path = ref "./netlist_simulator.byte"
let dumb_down = ref false
let compile filename =
try
let p = Netlist.read_file filename in
let out_name = (Filename.chop_suffix filename ".net") ^ "_sch.net" in
let dumb_out_name = (Filename.chop_suffix filename ".net") ^ ".dumb" in
let out_opt_name = (Filename.chop_suffix filename ".net") ^ "_sch_opt.net" in
let dumb_opt_out_name = (Filename.chop_suffix filename ".net") ^ "_opt.dumb" in
let q, q_opt = ref p, ref p in
begin try
q := Scheduler.schedule p;
q_opt := Simplify.simplify p
with
| Scheduler.Combinational_cycle ->
Format.eprintf "The netlist has a combinatory cycle.@.";
exit 2;
end;
let out = open_out out_name in
Netlist_printer.print_program out !q;
close_out out;
let dumb_out = open_out dumb_out_name in
Netlist_printer.print_dumb_program dumb_out !q;
close_out dumb_out;
let out_opt = open_out out_opt_name in
Netlist_printer.print_program out_opt !q_opt;
close_out out_opt;
let dumb_opt_out = open_out dumb_opt_out_name in
Netlist_printer.print_dumb_program dumb_opt_out !q_opt;
close_out dumb_opt_out;
if !simulate then (
let simulator =
if !number_steps = -1 then
!sim_path
else
!sim_path ^ " -n " ^ (string_of_int !number_steps)
in
ignore (Unix.system (simulator^" "^(if !dumb_down then dumb_out_name else out_name)))
)
with
| Netlist.Parse_error s -> Format.eprintf "An error accurred: %s@." s; exit 2
let main () =
Arg.parse
["-s", Arg.Set simulate, "Launch the simulator";
"-sim", Arg.Set_string sim_path, "Path to the circuit simulator";
"-d", Arg.Set dumb_down, "Pass the dumbed-down netlist to the simulator (for the C simulator)";
"-n", Arg.Set_int number_steps, "Number of steps to simulate"]
compile
""
;;
main ()
|