This tool reads markings
extension files (produced by a process windows mining tool), and generates the wakeup condition for each window, as well as the wakeup marking conditions for the places in each window. The tool uses espresso
logic minimizer for synthesis of the obtained conditions. ABC
can be also used optionally for their refactorisation.
Clone the repository and run the Makefile.
$ git clone https://github.com/tuura/shutters.git # clone the repository
$ make # compile and build the tool
Run make help
for displaying the Makefile commands.
$ ./shutters [file.markings] -e [espresso_path]
Run ./shutters --help
for the help of the tool.
Options available:
-a ABC_path: specify ABC path
-e Espresso_path: specify Espresso logic minimizer path
-h or --help: print help of the tool
-p or --positive: force equations to contain only positive literals
-v or --version: print tool version
The following equations have been obtained by running the tool over the files contained inside the /test
directory. buck.marking
models the buck controller, the others are the FSMs depicted in the figures of the Process Windows
article. Note: the places whose wakeup marking conditions are 0
are not shown for brevity. A place pN
in window M
is referred to as wMpN
.
Negative literals without ABC | Positive literals without ABC | Negative literals with ABC | Positive literals with ABC |
---|---|---|---|
Marking eqs. win. 1: w1p0 = (w2p7); w1p2 = (!w2p7); w1p3 = 1; |
Marking eqs. win. 1: w1p0 = (w2p7); w1p2 = (w2p6); w1p3 = 1; |
Marking eqs. win. 1: w1p0 = w2p7; w1p2 = !w2p7; w1p3 = 1; |
Marking eqs. win. 1: w1p0 = w2p7; w1p2 = w2p6; w1p3 = 1; |
Marking eqs. win. 2: w2p6 = (!w1p0); w2p7 = (w1p0); w2p8 = 1; |
Marking eqs. win. 2: w2p6 = (w1p2); w2p7 = (w1p0); w2p8 = 1; |
Marking eqs. win. 2: w2p6 = !w1p0; w2p7 = w1p0; w2p8 = 1; |
Marking eqs. win. 2: w2p6 = w1p2; w2p7 = w1p0; w2p8 = 1; |
Eq. window 1: w1 = (w2p8*!w2p5); |
Eq. window 1: w1 = (w2p6*w2p8) + (w2p8*w2p7); |
Eq. window 1: w1 = !w2p5 * w2p8; |
Eq. window 1: w1 = w2p8 * (w2p7 + w2p6); |
Eq. window 2: w2 = (!w1p1*w1p3); |
Eq. window 2: w2 = (w1p3*w1p2) + (w1p3*w1p0); |
Eq. window 2: w2 = !w1p1 * w1p3; |
Eq. window 2: w2 = w1p3 * (w1p0 + w1p2); |
Negative literals without ABC | Positive literals without ABC | Negative literals with ABC | Positive literals with ABC |
---|---|---|---|
Marking eqs. win. 1: w1p0 = (!w2p9); w1p1 = (w2p9); w1p3 = 1; |
Marking eqs. win. 1: w1p0 = (w2p8); w1p1 = (w2p9); w1p3 = 1; |
Marking eqs. win. 1: w1p0 = !w2p9; w1p1 = w2p9; w1p3 = 1; |
Marking eqs. win. 1: w1p0 = w2p8; w1p1 = w2p9; w1p3 = 1; |
Marking eqs. win. 2: w2p5 = (!w1p4); w2p6 = (w1p4); w2p8 = 1; |
Marking eqs. win. 2: w2p5 = (w1p3); w2p6 = (w1p4); w2p8 = 1; |
Marking eqs. win. 2: w2p5 = !w1p4; w2p6 = w1p4; w2p8 = 1; |
Marking eqs. win. 2: w2p5 = w1p3; w2p6 = w1p4; w2p8 = 1; |
Eq. window 1: w1 = (w2p5); |
Eq. window 1: w1 = (w2p5); |
Eq. window 1: w1 = w2p5; |
Eq. window 1: w1 = w2p5; |
Eq. window 2: w2 = (w1p0); |
Eq. window 2: w2 = (w1p0); |
Eq. window 2: w2 = w1p0; |
Eq. window 2: w2 = w1p0; |
Negative literals without ABC | Positive literals without ABC | Negative literals with ABC | Positive literals with ABC |
---|---|---|---|
Marking eqs. win. 1: w1.p0 = 1; w1.p3 = 1; |
Marking eqs. win. 1: w1.p0 = 1; w1.p3 = 1; |
Marking eqs. win. 1: w1.p0 = 1; w1.p3 = 1; |
Marking eqs. win. 1: w1.p0 = 1; w1.p3 = 1; |
Marking eqs. win. 2: w2.p5 = 1; w2.p8 = 1; |
Marking eqs. win. 2: w2.p5 = 1; w2.p8 = 1; |
Marking eqs. win. 2: w2.p5 = 1; w2.p8 = 1; |
Marking eqs. win. 2: w2.p5 = 1; w2.p8 = 1; |
Eq. window 1: w1 = (!w2.p9); |
Eq. window 1: w1 = (w2.p8); |
Eq. window 1: w1 = !w2.p9; |
Eq. window 1: w1 = w2.p8; |
Eq. window 2: w2 = (!w1.p4); |
Eq. window 2: w2 = (w1.p3); |
Eq. window 2: w2 = !w1.p4; |
Eq. window 2: w2 = w1.p3; |
Negative literals without ABC | Positive literals without ABC | Negative literals with ABC | Positive literals with ABC |
---|---|---|---|
Marking eqs. win. 1: w1.p1 = 1; |
Marking eqs. win. 1: w1.p1 = 1; |
Marking eqs. win. 1: w1.p1 = 1; |
Marking eqs. win. 1: w1.p1 = 1; |
Marking eqs. win. 2: w2.p1 = 1; |
Marking eqs. win. 2: w2.p1 = 1; |
Marking eqs. win. 2: w2.p1 = 1; |
Marking eqs. win. 2: w2.p1 = 1; |
Marking eqs. win. 3: w3.p3 = 1; |
Marking eqs. win. 3: w3.p3 = 1; |
Marking eqs. win. 3: w3.p3 = 1; |
Marking eqs. win. 3: w3.p3 = 1; |
Eq. window 1: w1 = (w2.p1*w3.p3); |
Eq. window 1: w1 = (w2.p1*w3.p3); |
Eq. window 1: w1 = w2.p1 * w3.p3; |
Eq. window 1: w1 = w2.p1 * w3.p3; |
Eq. window 2: w2 = (w1.p1*w3.p3); |
Eq. window 2: w2 = (w1.p1*w3.p3); |
Eq. window 2: w2 = w1.p1 * w3.p3; |
Eq. window 2: w2 = w1.p1 * w3.p3; |
Eq. window 3: w3 = (w1.p1*w2.p1); |
Eq. window 3: w3 = (w1.p1*w2.p1); |
Eq. window 3: w3 = w1.p1 * w2.p1; |
Eq. window 3: w3 = w1.p1 * w2.p1; |