summaryrefslogtreecommitdiff
path: root/tp1/scheduler_test.ml
diff options
context:
space:
mode:
authorAlex AUVOLAT <alex.auvolat@ens.fr>2013-10-31 15:35:11 +0100
committerAlex AUVOLAT <alex.auvolat@ens.fr>2013-10-31 15:35:11 +0100
commit0b269f32dd9b8d349f94793dad44e728473e9f0a (patch)
tree066a30fee1efe19d897f5e153d7ea9aa3d7448af /tp1/scheduler_test.ml
downloadSystDigit-Projet-0b269f32dd9b8d349f94793dad44e728473e9f0a.tar.gz
SystDigit-Projet-0b269f32dd9b8d349f94793dad44e728473e9f0a.zip
First commit ; includes first TP and minijazz compiler
Diffstat (limited to 'tp1/scheduler_test.ml')
-rw-r--r--tp1/scheduler_test.ml41
1 files changed, 41 insertions, 0 deletions
diff --git a/tp1/scheduler_test.ml b/tp1/scheduler_test.ml
new file mode 100644
index 0000000..20c20f5
--- /dev/null
+++ b/tp1/scheduler_test.ml
@@ -0,0 +1,41 @@
+let print_only = ref false
+let number_steps = ref (-1)
+
+let compile filename =
+ try
+ let p = Netlist.read_file filename in
+ let out_name = (Filename.chop_suffix filename ".net") ^ "_sch.net" in
+ let out = open_out out_name in
+ let close_all () =
+ close_out out
+ in
+ begin try
+ let p = Scheduler.schedule p in
+ Netlist_printer.print_program out p;
+ with
+ | Scheduler.Combinational_cycle ->
+ Format.eprintf "The netlist has a combinatory cycle.@.";
+ close_all (); exit 2
+ end;
+ close_all ();
+ if not !print_only then (
+ let simulator =
+ if !number_steps = -1 then
+ "./netlist_simulator.byte"
+ else
+ "./netlist_simulator.byte -n "^(string_of_int !number_steps)
+ in
+ ignore (Unix.system (simulator^" "^out_name))
+ )
+ with
+ | Netlist.Parse_error s -> Format.eprintf "An error accurred: %s@." s; exit 2
+
+let main () =
+ Arg.parse
+ ["-print", Arg.Set print_only, "Only print the result of scheduling";
+ "-n", Arg.Set_int number_steps, "Number of steps to simulate"]
+ compile
+ ""
+;;
+
+main ()