summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2017-07-17 10:13:31 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2017-07-17 10:13:31 +0200
commit3e019d57fab57afe7aad373385f32a23bd178941 (patch)
treec11e3440e4f199c8da54e649f01f9598df87e46b /instr-to-kodkod/src/Main.java
Initial commit.
Diffstat (limited to 'instr-to-kodkod/src/Main.java')
-rw-r--r--instr-to-kodkod/src/Main.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/instr-to-kodkod/src/Main.java b/instr-to-kodkod/src/Main.java
new file mode 100644
index 0000000..d692ecd
--- /dev/null
+++ b/instr-to-kodkod/src/Main.java
@@ -0,0 +1,82 @@
+/* FIXME: Finer imports */
+import kodkod.ast.*;
+
+import kodkod.engine.*;
+import kodkod.engine.config.*;
+import kodkod.engine.satlab.*;
+
+import kodkod.instance.*;
+public class Main
+{
+ private static Formula get_formula (final VHDLModel model)
+ {
+ final Variable w;
+
+ w = Variable.unary("w");
+
+ return
+ w.join
+ (
+ model.get_predicate_as_relation("is_accessed_by")
+ ).no().forSome(w.oneOf(model.get_type_as_relation("waveform")));
+ }
+
+ public static void main (final String... args)
+ {
+ final VHDLModel model;
+
+ final Universe univ;
+ final TupleFactory tf;
+ final Bounds bounds;
+
+ final Solver solver;
+ final Solution sol;
+
+ if (args.length != 1)
+ {
+ System.out.println("Use: java Main <instructions_file>");
+
+ return;
+ }
+
+ model = new VHDLModel();
+
+ try
+ {
+ VHDLLevel.add_to_model(model, "./structural_level.data");
+ }
+ catch (final Exception e)
+ {
+ System.err.println("[E] Could not load structural level:");
+ e.printStackTrace();
+
+ return;
+ }
+
+ try
+ {
+ model.parse_file(args[0]);
+ }
+ catch (final Exception e)
+ {
+ System.err.println("[E] Could not load instructions:");
+ e.printStackTrace();
+
+ return;
+ }
+
+ univ = new Universe(model.get_atoms());
+ tf = univ.factory();
+ bounds = new Bounds(univ);
+
+ model.add_to_bounds(bounds, tf);
+
+ solver = new Solver();
+ solver.options().setSolver(SATFactory.DefaultSAT4J);
+ solver.options().setReporter(new ConsoleReporter());
+
+ sol = solver.solve(get_formula(model), bounds);
+
+ System.out.println(sol);
+ }
+}