diff --git a/examples/actors/xdf/SSRAnalysis.java b/examples/actors/xdf/SSRAnalysis.java index 0590946c61cc9b16d8feab053f2be684adb9dddd..6615ac578335fab64e17baba925280c419607c0b 100644 --- a/examples/actors/xdf/SSRAnalysis.java +++ b/examples/actors/xdf/SSRAnalysis.java @@ -1,3 +1,11 @@ +/* -*-Java-*- */ + +/* + * Copyright (C) 2009 Anders Nilsson <anders.nilsson@cs.lth.se> + * + * This file is part of Actors model compiler. + */ + import xdfAST.Start; import xdfAST.Instance; import java.util.LinkedList; diff --git a/examples/actors/xlim/AddFiveOnce_0.xlim b/examples/actors/xlim/AddFiveOnce_0.xlim new file mode 100644 index 0000000000000000000000000000000000000000..b6fd5d81f15b8c28bde9628ff9e05ea13c7d3ce4 --- /dev/null +++ b/examples/actors/xlim/AddFiveOnce_0.xlim @@ -0,0 +1,218 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--Actor AddFiveOnce--><design name="AddFiveOnce"> + <actor-port dir="in" name="In" size="32" typeName="int"/> + <actor-port dir="out" name="Out" size="32" typeName="int"/> + <!--Action 0$id$w146ab2--><module autostart="false" kind="action" name="init"> + <operation kind="pinRead" portName="In" removable="no" style="simple"> + <port dir="out" size="32" source="0$id$w146ab2b3b1" typeName="int"/> + </operation> + + + + <!--Expr 0$id$w146ab2b5b1ab1--><operation kind="noop"> + <port dir="in" source="0$id$w146ab2b3b1"/> + <port dir="out" size="32" source="0$id$w146ab2b5b1ab1" typeName="int"/> + </operation> + <!--Expr 1$id$w561ab3b5b1ab1b1--><operation kind="$literal_Integer" value="5"> + <port dir="out" size="4" source="1$id$w561ab3b5b1ab1b1" typeName="int"/> + </operation> + <!--Expr 1$id$w561ab3b5b1a--><operation kind="$add"> + <port dir="in" source="0$id$w146ab2b5b1ab1"/> + <port dir="in" source="1$id$w561ab3b5b1ab1b1"/> + <port dir="out" size="33" source="1$id$w561ab3b5b1a" typeName="int"/> + </operation> + <!--Expr 0$id$w146ab2b5b1--><operation kind="noop"> + <port dir="in" source="1$id$w561ab3b5b1a"/> + <port dir="out" size="33" source="0$id$w146ab2b5b1" typeName="int"/> + </operation> + <operation kind="pinWrite" portName="Out" style="simple"> + <port dir="in" source="0$id$w146ab2b5b1"/> + </operation> + </module> + <!--Action 0$id$w146ab3--><module autostart="false" kind="action" name="run"> + <operation kind="pinRead" portName="In" removable="no" style="simple"> + <port dir="out" size="32" source="0$id$w146ab3b3b1" typeName="int"/> + </operation> + + + + <!--Expr 0$id$w146ab3b5b1a--><operation kind="noop"> + <port dir="in" source="0$id$w146ab3b3b1"/> + <port dir="out" size="32" source="0$id$w146ab3b5b1a" typeName="int"/> + </operation> + <!--Expr 0$id$w146ab3b5b1--><operation kind="noop"> + <port dir="in" source="0$id$w146ab3b5b1a"/> + <port dir="out" size="32" source="0$id$w146ab3b5b1" typeName="int"/> + </operation> + <operation kind="pinWrite" portName="Out" style="simple"> + <port dir="in" source="0$id$w146ab3b5b1"/> + </operation> + </module> + <stateVar name="0$id$w146a$fsm$init"> + <initValue size="1" typeName="bool" value="1"/> + </stateVar> + <stateVar name="0$id$w146a$fsm$run"> + <initValue size="1" typeName="bool" value="0"/> + </stateVar> + <module autostart="true" kind="action-scheduler" name="action-scheduler" + sourceName="action-scheduler"> + <operation kind="$literal_Integer" value="1"> + <port dir="out" size="1" source="0$id$w146a$sched$true" typeName="bool"/> + </operation> + <module kind="loop"> + <module decision="0$id$w146a$sched$true$loop" kind="test"> + <operation kind="noop"> + <port dir="in" source="0$id$w146a$sched$true"/> + <port dir="out" size="1" source="0$id$w146a$sched$true$loop" typeName="bool"/> + </operation> + </module> + <module kind="body"> + <operation kind="pinAvail" portName="In"> + <port dir="out" size="32" source="In$pinAvail" typeName="int"/> + </operation> + <!--Input peeks for action 0$id$w146ab2--><operation kind="$literal_Integer" value="1"> + <port dir="out" size="32" source="0$id$w146ab2b3$In$tokenCount" typeName="int"/> + </operation> + <operation kind="$ge"> + <port dir="in" source="In$pinAvail"/> + <port dir="in" source="0$id$w146ab2b3$In$tokenCount"/> + <port dir="out" size="1" source="0$id$w146ab2b3$ready" typeName="bool"/> + </operation> + <operation kind="$literal_Integer" value="0"> + <port dir="out" size="1" source="0$id$w146ab2b3b1$index$1" typeName="int"/> + </operation> + <operation kind="pinPeek" portName="In"> + <port dir="in" source="0$id$w146ab2b3b1$index$1"/> + <port dir="out" size="32" source="0$id$w146ab2b3b1" typeName="int"/> + </operation> + <!--Local variables used in guards of action 0$id$w146ab2--><!--Guard for action 0$id$w146ab2--><operation kind="$and"> + <port dir="in" source="0$id$w146ab2b3$ready"/> + <port dir="out" size="1" source="0$id$w146ab2$guard" typeName="bool"/> + </operation> + <!--Input peeks for action 0$id$w146ab3--><operation kind="$literal_Integer" value="1"> + <port dir="out" size="32" source="0$id$w146ab3b3$In$tokenCount" typeName="int"/> + </operation> + <operation kind="$ge"> + <port dir="in" source="In$pinAvail"/> + <port dir="in" source="0$id$w146ab3b3$In$tokenCount"/> + <port dir="out" size="1" source="0$id$w146ab3b3$ready" typeName="bool"/> + </operation> + <operation kind="$literal_Integer" value="0"> + <port dir="out" size="1" source="0$id$w146ab3b3b1$index$1" typeName="int"/> + </operation> + <operation kind="pinPeek" portName="In"> + <port dir="in" source="0$id$w146ab3b3b1$index$1"/> + <port dir="out" size="32" source="0$id$w146ab3b3b1" typeName="int"/> + </operation> + <!--Local variables used in guards of action 0$id$w146ab3--><!--Guard for action 0$id$w146ab3--><operation kind="$and"> + <port dir="in" source="0$id$w146ab3b3$ready"/> + <port dir="out" size="1" source="0$id$w146ab3$guard" typeName="bool"/> + </operation> + <operation kind="pinStatus" portName="Out"> + <port dir="out" size="1" source="0$id$w146ab1$status" typeName="bool"/> + </operation> + <operation kind="$and"> + <port dir="in" source="0$id$w146ab1$status"/> + <port dir="out" size="1" source="0$id$w146ab2$fireable" typeName="bool"/> + </operation> + <operation kind="$and"> + <port dir="in" source="0$id$w146ab1$status"/> + <port dir="out" size="1" source="0$id$w146ab3$fireable" typeName="bool"/> + </operation> + <operation kind="noop"> + <port dir="in" source="0$id$w146a$fsm$init"/> + <port dir="out" size="1" source="0$id$w146a$fsm$copy$init" typeName="bool"/> + </operation> + <operation kind="noop"> + <port dir="in" source="0$id$w146a$fsm$run"/> + <port dir="out" size="1" source="0$id$w146a$fsm$copy$run" typeName="bool"/> + </operation> + <module kind="if"> + <module decision="init$enabled" kind="test"> + <operation kind="noop"> + <port dir="in" source="0$id$w146a$fsm$copy$init"/> + <port dir="out" size="1" source="init$enabled" typeName="bool"/> + </operation> + </module> + <module kind="then"> + <module kind="if"> + <module decision="init$state$0$id$w146ab2$guard$read" kind="test"> + <operation kind="noop"> + <port dir="in" source="0$id$w146ab2$guard"/> + <port dir="out" size="1" source="init$state$0$id$w146ab2$guard$read" typeName="bool"/> + </operation> + </module> + <module kind="then"> + <module kind="if"> + <module decision="init$state$0$id$w146ab2$fireable" kind="test"> + <operation kind="noop"> + <port dir="in" source="0$id$w146ab2$fireable"/> + <port dir="out" size="1" source="init$state$0$id$w146ab2$fireable" typeName="bool"/> + </operation> + </module> + <module kind="then"> + <operation kind="taskCall" target="init"/> + <operation kind="$literal_Integer" value="0"> + <port dir="out" size="1" source="d985e1$false" typeName="bool"/> + </operation> + <operation kind="$literal_Integer" value="1"> + <port dir="out" size="1" source="d985e1$true" typeName="bool"/> + </operation> + <operation kind="assign" target="0$id$w146a$fsm$init"> + <port dir="in" source="d985e1$false"/> + </operation> + <operation kind="assign" target="0$id$w146a$fsm$run"> + <port dir="in" source="d985e1$true"/> + </operation> + </module> + </module> + </module> + </module> + </module> + <module kind="else"> + <module kind="if"> + <module decision="run$enabled" kind="test"> + <operation kind="noop"> + <port dir="in" source="0$id$w146a$fsm$copy$run"/> + <port dir="out" size="1" source="run$enabled" typeName="bool"/> + </operation> + </module> + <module kind="then"> + <module kind="if"> + <module decision="run$state$0$id$w146ab3$guard$read" kind="test"> + <operation kind="noop"> + <port dir="in" source="0$id$w146ab3$guard"/> + <port dir="out" size="1" source="run$state$0$id$w146ab3$guard$read" typeName="bool"/> + </operation> + </module> + <module kind="then"> + <module kind="if"> + <module decision="run$state$0$id$w146ab3$fireable" kind="test"> + <operation kind="noop"> + <port dir="in" source="0$id$w146ab3$fireable"/> + <port dir="out" size="1" source="run$state$0$id$w146ab3$fireable" typeName="bool"/> + </operation> + </module> + <module kind="then"> + <operation kind="taskCall" target="run"/> + <operation kind="$literal_Integer" value="0"> + <port dir="out" size="1" source="d986e1$false" typeName="bool"/> + </operation> + <operation kind="$literal_Integer" value="1"> + <port dir="out" size="1" source="d986e1$true" typeName="bool"/> + </operation> + <operation kind="assign" target="0$id$w146a$fsm$run"> + <port dir="in" source="d986e1$true"/> + </operation> + </module> + </module> + </module> + </module> + </module> + </module> + </module> + </module> + </module> + </module> + </module> +</design> \ No newline at end of file diff --git a/examples/actors/xlim/AddOne_0.xlim b/examples/actors/xlim/AddOne_0.xlim new file mode 100644 index 0000000000000000000000000000000000000000..96132a7ab524f5c6868caac50524bbbb1be508bb --- /dev/null +++ b/examples/actors/xlim/AddOne_0.xlim @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--Actor AddOne--><design name="AddOne"> + <actor-port dir="in" name="In" size="32" typeName="int"/> + <actor-port dir="out" name="Out" size="32" typeName="int"/> + <!--Action 0$id$w86ab2--><module autostart="false" kind="action" name="actionAtLine_3"> + <operation kind="pinRead" portName="In" removable="no" style="simple"> + <port dir="out" size="32" source="0$id$w86ab2b1b1" typeName="int"/> + </operation> + + + <!--Expr 0$id$w86ab2b3b1ab1--><operation kind="noop"> + <port dir="in" source="0$id$w86ab2b1b1"/> + <port dir="out" size="32" source="0$id$w86ab2b3b1ab1" typeName="int"/> + </operation> + <!--Expr 1$id$w352ab3b3b1ab1b1--><operation kind="$literal_Integer" value="1"> + <port dir="out" size="2" source="1$id$w352ab3b3b1ab1b1" typeName="int"/> + </operation> + <!--Expr 1$id$w352ab3b3b1a--><operation kind="$add"> + <port dir="in" source="0$id$w86ab2b3b1ab1"/> + <port dir="in" source="1$id$w352ab3b3b1ab1b1"/> + <port dir="out" size="33" source="1$id$w352ab3b3b1a" typeName="int"/> + </operation> + <!--Expr 0$id$w86ab2b3b1--><operation kind="noop"> + <port dir="in" source="1$id$w352ab3b3b1a"/> + <port dir="out" size="33" source="0$id$w86ab2b3b1" typeName="int"/> + </operation> + <operation kind="pinWrite" portName="Out" style="simple"> + <port dir="in" source="0$id$w86ab2b3b1"/> + </operation> + </module> + <module autostart="true" kind="action-scheduler" name="action-scheduler" + sourceName="action-scheduler"> + <operation kind="$literal_Integer" value="1"> + <port dir="out" size="1" source="0$id$w86a$sched$true" typeName="bool"/> + </operation> + <module kind="loop"> + <module decision="0$id$w86a$sched$true$loop" kind="test"> + <operation kind="noop"> + <port dir="in" source="0$id$w86a$sched$true"/> + <port dir="out" size="1" source="0$id$w86a$sched$true$loop" typeName="bool"/> + </operation> + </module> + <module kind="body"> + <operation kind="pinAvail" portName="In"> + <port dir="out" size="32" source="In$pinAvail" typeName="int"/> + </operation> + <!--Input peeks for action 0$id$w86ab2--><operation kind="$literal_Integer" value="1"> + <port dir="out" size="32" source="0$id$w86ab2b1$In$tokenCount" typeName="int"/> + </operation> + <operation kind="$ge"> + <port dir="in" source="In$pinAvail"/> + <port dir="in" source="0$id$w86ab2b1$In$tokenCount"/> + <port dir="out" size="1" source="0$id$w86ab2b1$ready" typeName="bool"/> + </operation> + <operation kind="$literal_Integer" value="0"> + <port dir="out" size="1" source="0$id$w86ab2b1b1$index$1" typeName="int"/> + </operation> + <operation kind="pinPeek" portName="In"> + <port dir="in" source="0$id$w86ab2b1b1$index$1"/> + <port dir="out" size="32" source="0$id$w86ab2b1b1" typeName="int"/> + </operation> + <!--Local variables used in guards of action 0$id$w86ab2--><!--Guard for action 0$id$w86ab2--><operation kind="$and"> + <port dir="in" source="0$id$w86ab2b1$ready"/> + <port dir="out" size="1" source="0$id$w86ab2$guard" typeName="bool"/> + </operation> + <operation kind="pinStatus" portName="Out"> + <port dir="out" size="1" source="0$id$w86ab1$status" typeName="bool"/> + </operation> + <operation kind="$and"> + <port dir="in" source="0$id$w86ab1$status"/> + <port dir="out" size="1" source="0$id$w86ab2$fireable" typeName="bool"/> + </operation> + <module kind="if"> + <module decision="always$state$0$id$w86ab2$guard$read" kind="test"> + <operation kind="noop"> + <port dir="in" source="0$id$w86ab2$guard"/> + <port dir="out" size="1" source="always$state$0$id$w86ab2$guard$read" typeName="bool"/> + </operation> + </module> + <module kind="then"> + <module kind="if"> + <module decision="always$state$0$id$w86ab2$fireable" kind="test"> + <operation kind="noop"> + <port dir="in" source="0$id$w86ab2$fireable"/> + <port dir="out" size="1" source="always$state$0$id$w86ab2$fireable" typeName="bool"/> + </operation> + </module> + <module kind="then"> + <operation kind="taskCall" target="actionAtLine_3"/> + </module> + </module> + </module> + </module> + </module> + </module> + </module> +</design> \ No newline at end of file diff --git a/examples/actors/xlim/Double_0.xlim b/examples/actors/xlim/Double_0.xlim new file mode 100644 index 0000000000000000000000000000000000000000..538a401fa1ef727e17795f4301fd9f49e52b5950 --- /dev/null +++ b/examples/actors/xlim/Double_0.xlim @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--Actor Double--><design name="Double"> + <actor-port dir="in" name="In" size="32" typeName="int"/> + <actor-port dir="out" name="Out" size="32" typeName="int"/> + <!--Action 0$id$w86ab2--><module autostart="false" kind="action" name="actionAtLine_3"> + <operation kind="pinRead" portName="In" removable="no" style="simple"> + <port dir="out" size="32" source="0$id$w86ab2b1b1" typeName="int"/> + </operation> + + + <!--Expr 0$id$w86ab2b3b1ab1--><operation kind="noop"> + <port dir="in" source="0$id$w86ab2b1b1"/> + <port dir="out" size="32" source="0$id$w86ab2b3b1ab1" typeName="int"/> + </operation> + <!--Expr 1$id$w352ab3b3b1ab1b1--><operation kind="$literal_Integer" value="2"> + <port dir="out" size="3" source="1$id$w352ab3b3b1ab1b1" typeName="int"/> + </operation> + <!--Expr 1$id$w352ab3b3b1a--><operation kind="$mul"> + <port dir="in" source="0$id$w86ab2b3b1ab1"/> + <port dir="in" source="1$id$w352ab3b3b1ab1b1"/> + <port dir="out" size="32" source="1$id$w352ab3b3b1a" typeName="int"/> + </operation> + <!--Expr 0$id$w86ab2b3b1--><operation kind="noop"> + <port dir="in" source="1$id$w352ab3b3b1a"/> + <port dir="out" size="32" source="0$id$w86ab2b3b1" typeName="int"/> + </operation> + <operation kind="pinWrite" portName="Out" style="simple"> + <port dir="in" source="0$id$w86ab2b3b1"/> + </operation> + </module> + <module autostart="true" kind="action-scheduler" name="action-scheduler" + sourceName="action-scheduler"> + <operation kind="$literal_Integer" value="1"> + <port dir="out" size="1" source="0$id$w86a$sched$true" typeName="bool"/> + </operation> + <module kind="loop"> + <module decision="0$id$w86a$sched$true$loop" kind="test"> + <operation kind="noop"> + <port dir="in" source="0$id$w86a$sched$true"/> + <port dir="out" size="1" source="0$id$w86a$sched$true$loop" typeName="bool"/> + </operation> + </module> + <module kind="body"> + <operation kind="pinAvail" portName="In"> + <port dir="out" size="32" source="In$pinAvail" typeName="int"/> + </operation> + <!--Input peeks for action 0$id$w86ab2--><operation kind="$literal_Integer" value="1"> + <port dir="out" size="32" source="0$id$w86ab2b1$In$tokenCount" typeName="int"/> + </operation> + <operation kind="$ge"> + <port dir="in" source="In$pinAvail"/> + <port dir="in" source="0$id$w86ab2b1$In$tokenCount"/> + <port dir="out" size="1" source="0$id$w86ab2b1$ready" typeName="bool"/> + </operation> + <operation kind="$literal_Integer" value="0"> + <port dir="out" size="1" source="0$id$w86ab2b1b1$index$1" typeName="int"/> + </operation> + <operation kind="pinPeek" portName="In"> + <port dir="in" source="0$id$w86ab2b1b1$index$1"/> + <port dir="out" size="32" source="0$id$w86ab2b1b1" typeName="int"/> + </operation> + <!--Local variables used in guards of action 0$id$w86ab2--><!--Guard for action 0$id$w86ab2--><operation kind="$and"> + <port dir="in" source="0$id$w86ab2b1$ready"/> + <port dir="out" size="1" source="0$id$w86ab2$guard" typeName="bool"/> + </operation> + <operation kind="pinStatus" portName="Out"> + <port dir="out" size="1" source="0$id$w86ab1$status" typeName="bool"/> + </operation> + <operation kind="$and"> + <port dir="in" source="0$id$w86ab1$status"/> + <port dir="out" size="1" source="0$id$w86ab2$fireable" typeName="bool"/> + </operation> + <module kind="if"> + <module decision="always$state$0$id$w86ab2$guard$read" kind="test"> + <operation kind="noop"> + <port dir="in" source="0$id$w86ab2$guard"/> + <port dir="out" size="1" source="always$state$0$id$w86ab2$guard$read" typeName="bool"/> + </operation> + </module> + <module kind="then"> + <module kind="if"> + <module decision="always$state$0$id$w86ab2$fireable" kind="test"> + <operation kind="noop"> + <port dir="in" source="0$id$w86ab2$fireable"/> + <port dir="out" size="1" source="always$state$0$id$w86ab2$fireable" typeName="bool"/> + </operation> + </module> + <module kind="then"> + <operation kind="taskCall" target="actionAtLine_3"/> + </module> + </module> + </module> + </module> + </module> + </module> + </module> +</design> \ No newline at end of file diff --git a/examples/actors/xlim/SDF.jrag b/examples/actors/xlim/SDF.jrag new file mode 100644 index 0000000000000000000000000000000000000000..cb54f9d04fbfdb1b1d2886300c1e8edfded144f1 --- /dev/null +++ b/examples/actors/xlim/SDF.jrag @@ -0,0 +1,62 @@ +/* -*-Java-*- */ + +/* + * Copyright (C) 2009 Anders Nilsson <anders.nilsson@cs.lth.se> + * + * This file is part of Actors model compiler. + */ + +aspect SDF { + syn boolean ASTNode.isSDF() = false; + eq Start.isSDF() = getSpecification().isSDF(); + eq Specification.isSDF() { + boolean result = false; + for (Element e : getElements()) { + result |= e.isSDF(); + } + return result; + } + eq design.isSDF() = nbrOfActions() == 1; +} + +aspect Misc { + syn int design.nbrOfActions() { + int nbrActions = 0; + for (Element e : getElements()) { + if (e.isAction()) { + nbrActions++; + } + } + return nbrActions; + } + + syn boolean Element.isAction() = false; + eq module.isAction() { + return kind().equals("action"); + } + + syn String module.kind() { + for (int i=0; i<getNumAttribute(); i++) { + Attribute a = getAttribute(i); + if (a instanceof kind) { + return fix(a.getAttrValue().getLITERAL()); + } + } + return ""; + } + + static String ASTNode.fix(String s) { + if (s.indexOf('"') == 0) { + return s.substring(1,s.length()-1); + } + return s; + } + +} + +aspect Fixes { + int ASTNode.numChildren; + int ASTNode.numChildren() {return jjtGetNumChildren();} + int List.getNumNoTransformChild() {return getNumChildNoTransform();} + int Opt.getNumChildNoTransfrom() {return getNumChildNoTransform();} +} \ No newline at end of file diff --git a/examples/actors/xlim/SDFAnalysis.java b/examples/actors/xlim/SDFAnalysis.java new file mode 100644 index 0000000000000000000000000000000000000000..16217fb0c38c18296147845ee551487c5b1124fe --- /dev/null +++ b/examples/actors/xlim/SDFAnalysis.java @@ -0,0 +1,19 @@ +/* -*-Java-*- */ + +/* + * Copyright (C) 2009 Anders Nilsson <anders.nilsson@cs.lth.se> + * + * This file is part of Actors model compiler. + */ + + +import xlimAST.Start; + +public class SDFAnalysis extends Parser { + public static void main(String args[]) { + Start ast = parse(args); + + System.out.println(ast.isSDF()); + } +} + diff --git a/examples/actors/xlim/SubOne_0.xlim b/examples/actors/xlim/SubOne_0.xlim new file mode 100644 index 0000000000000000000000000000000000000000..03b3721eca734463b27696fbf7ad1d4599f1e124 --- /dev/null +++ b/examples/actors/xlim/SubOne_0.xlim @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--Actor SubOne--><design name="SubOne"> + <actor-port dir="in" name="In" size="32" typeName="int"/> + <actor-port dir="out" name="Out" size="32" typeName="int"/> + <!--Action 0$id$w86ab2--><module autostart="false" kind="action" name="actionAtLine_3"> + <operation kind="pinRead" portName="In" removable="no" style="simple"> + <port dir="out" size="32" source="0$id$w86ab2b1b1" typeName="int"/> + </operation> + + + <!--Expr 0$id$w86ab2b3b1ab1--><operation kind="noop"> + <port dir="in" source="0$id$w86ab2b1b1"/> + <port dir="out" size="32" source="0$id$w86ab2b3b1ab1" typeName="int"/> + </operation> + <!--Expr 1$id$w352ab3b3b1ab1b1--><operation kind="$literal_Integer" value="1"> + <port dir="out" size="2" source="1$id$w352ab3b3b1ab1b1" typeName="int"/> + </operation> + <!--Expr 1$id$w352ab3b3b1a--><operation kind="$sub"> + <port dir="in" source="0$id$w86ab2b3b1ab1"/> + <port dir="in" source="1$id$w352ab3b3b1ab1b1"/> + <port dir="out" size="33" source="1$id$w352ab3b3b1a" typeName="int"/> + </operation> + <!--Expr 0$id$w86ab2b3b1--><operation kind="noop"> + <port dir="in" source="1$id$w352ab3b3b1a"/> + <port dir="out" size="33" source="0$id$w86ab2b3b1" typeName="int"/> + </operation> + <operation kind="pinWrite" portName="Out" style="simple"> + <port dir="in" source="0$id$w86ab2b3b1"/> + </operation> + </module> + <module autostart="true" kind="action-scheduler" name="action-scheduler" + sourceName="action-scheduler"> + <operation kind="$literal_Integer" value="1"> + <port dir="out" size="1" source="0$id$w86a$sched$true" typeName="bool"/> + </operation> + <module kind="loop"> + <module decision="0$id$w86a$sched$true$loop" kind="test"> + <operation kind="noop"> + <port dir="in" source="0$id$w86a$sched$true"/> + <port dir="out" size="1" source="0$id$w86a$sched$true$loop" typeName="bool"/> + </operation> + </module> + <module kind="body"> + <operation kind="pinAvail" portName="In"> + <port dir="out" size="32" source="In$pinAvail" typeName="int"/> + </operation> + <!--Input peeks for action 0$id$w86ab2--><operation kind="$literal_Integer" value="1"> + <port dir="out" size="32" source="0$id$w86ab2b1$In$tokenCount" typeName="int"/> + </operation> + <operation kind="$ge"> + <port dir="in" source="In$pinAvail"/> + <port dir="in" source="0$id$w86ab2b1$In$tokenCount"/> + <port dir="out" size="1" source="0$id$w86ab2b1$ready" typeName="bool"/> + </operation> + <operation kind="$literal_Integer" value="0"> + <port dir="out" size="1" source="0$id$w86ab2b1b1$index$1" typeName="int"/> + </operation> + <operation kind="pinPeek" portName="In"> + <port dir="in" source="0$id$w86ab2b1b1$index$1"/> + <port dir="out" size="32" source="0$id$w86ab2b1b1" typeName="int"/> + </operation> + <!--Local variables used in guards of action 0$id$w86ab2--><!--Guard for action 0$id$w86ab2--><operation kind="$and"> + <port dir="in" source="0$id$w86ab2b1$ready"/> + <port dir="out" size="1" source="0$id$w86ab2$guard" typeName="bool"/> + </operation> + <operation kind="pinStatus" portName="Out"> + <port dir="out" size="1" source="0$id$w86ab1$status" typeName="bool"/> + </operation> + <operation kind="$and"> + <port dir="in" source="0$id$w86ab1$status"/> + <port dir="out" size="1" source="0$id$w86ab2$fireable" typeName="bool"/> + </operation> + <module kind="if"> + <module decision="always$state$0$id$w86ab2$guard$read" kind="test"> + <operation kind="noop"> + <port dir="in" source="0$id$w86ab2$guard"/> + <port dir="out" size="1" source="always$state$0$id$w86ab2$guard$read" typeName="bool"/> + </operation> + </module> + <module kind="then"> + <module kind="if"> + <module decision="always$state$0$id$w86ab2$fireable" kind="test"> + <operation kind="noop"> + <port dir="in" source="0$id$w86ab2$fireable"/> + <port dir="out" size="1" source="always$state$0$id$w86ab2$fireable" typeName="bool"/> + </operation> + </module> + <module kind="then"> + <operation kind="taskCall" target="actionAtLine_3"/> + </module> + </module> + </module> + </module> + </module> + </module> + </module> +</design> \ No newline at end of file