Browse Source

Removed useless padding, invert phase output

Baglio Tabifata 5 years ago
parent
commit
942bfd933e

+ 1 - 3
src/main/java/info/hkzlab/dupal/analyzer/board/boardio/DuPALAnalyzer.java

@@ -12,7 +12,6 @@ import info.hkzlab.dupal.analyzer.palanalisys.explorers.OSExplorer;
 import info.hkzlab.dupal.analyzer.palanalisys.explorers.SimpleExplorer;
 import info.hkzlab.dupal.analyzer.palanalisys.formatter.EspressoFormatter;
 import info.hkzlab.dupal.analyzer.palanalisys.graph.OutState;
-import info.hkzlab.dupal.analyzer.palanalisys.padding.OutStatePadder;
 import info.hkzlab.dupal.analyzer.palanalisys.simple.SimpleState;
 import info.hkzlab.dupal.analyzer.utilities.BitUtils;
 
@@ -115,8 +114,7 @@ public class DuPALAnalyzer {
                 }
                 
                 OutState[] osArray = OSExplorer.exploreOutStates(dpci, ioAsOutMask);
-                osArray = OutStatePadder.padUnknownOutStates(osArray, dpci.palSpecs, ioAsOutMask);
-                header = EspressoFormatter.formatEspressoTableHeader(dpci.palSpecs, ioAsOutMask, ignoreFeedbacks);
+                header = EspressoFormatter.formatEspressoTableHeader(dpci.palSpecs, ioAsOutMask);
                 table = EspressoFormatter.formatEspressoTable(dpci.palSpecs, ioAsOutMask, osArray, ignoreFeedbacks);
 
                 logger.info("Got " + osArray.length + " output states!");

+ 2 - 2
src/main/java/info/hkzlab/dupal/analyzer/palanalisys/formatter/EspressoFormatter.java

@@ -43,8 +43,8 @@ public class EspressoFormatter {
         strBuf.append("\n");
        
         strBuf.append(".phase ");
-        for(int idx = 0; idx < outCount; idx++) strBuf.append(pSpecs.isActiveLow() ? '0' : '1');
-        for(int idx = 0; idx < outCount_oe; idx++) strBuf.append('1');
+        for(int idx = 0; idx < outCount; idx++) strBuf.append(pSpecs.isActiveLow() ? '1' : '0');
+        for(int idx = 0; idx < outCount_oe; idx++) strBuf.append('0');
         strBuf.append("\n\n");
         
         return strBuf.toString();

+ 0 - 25
src/main/java/info/hkzlab/dupal/analyzer/palanalisys/padding/OutStateIOOutComparator.java

@@ -1,25 +0,0 @@
-package info.hkzlab.dupal.analyzer.palanalisys.padding;
-
-import java.util.Comparator;
-
-import info.hkzlab.dupal.analyzer.palanalisys.graph.OutState;
-import info.hkzlab.dupal.analyzer.utilities.BitUtils;
-
-public class OutStateIOOutComparator implements Comparator<OutState> {
-    private final int ioAsOutMask;
-
-    public OutStateIOOutComparator(final int ioAsOutMask) {
-       this.ioAsOutMask = ioAsOutMask;
-    }
-
-    @Override
-    public int compare(OutState s1, OutState s2) {
-        int io1 = BitUtils.consolidateBitField(s1.pins.out, ioAsOutMask);
-        int io2 = BitUtils.consolidateBitField(s2.pins.out, ioAsOutMask);
-
-        if(io1 < io2) return -1;
-        else if (io1 > io2) return 1;
-        else return 0;
-    }
-    
-}

+ 0 - 65
src/main/java/info/hkzlab/dupal/analyzer/palanalisys/padding/OutStatePadder.java

@@ -1,65 +0,0 @@
-package info.hkzlab.dupal.analyzer.palanalisys.padding;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import info.hkzlab.dupal.analyzer.devices.PALSpecs;
-import info.hkzlab.dupal.analyzer.exceptions.DuPALAnalyzerException;
-import info.hkzlab.dupal.analyzer.palanalisys.graph.OutLink;
-import info.hkzlab.dupal.analyzer.palanalisys.graph.OutState;
-import info.hkzlab.dupal.analyzer.palanalisys.graph.OutStatePins;
-import info.hkzlab.dupal.analyzer.palanalisys.graph.RegLink;
-import info.hkzlab.dupal.analyzer.utilities.BitUtils;
-
-public class OutStatePadder {
-    private static final Logger logger = LoggerFactory.getLogger(OutStatePadder.class);
-
-    private OutStatePadder() {};
-
-    static public OutState[] padUnknownOutStates(OutState[] states, PALSpecs pSpecs, int ioAsOutMask)
-            throws DuPALAnalyzerException {
-        int ioAsOut_W = BitUtils.scatterBitField(BitUtils.consolidateBitField(ioAsOutMask, pSpecs.getMask_IO_R()), pSpecs.getMask_IO_W());
-        int ioAsOutPins = BitUtils.countBits(ioAsOutMask);
-
-        ArrayList<OutState> statesList = new ArrayList<>();
-        ArrayList<OutState> outList = new ArrayList<>();
-        statesList.addAll(Arrays.asList(states));
-        Collections.sort(statesList, new OutStateIOOutComparator(ioAsOutMask));
-
-        OutState zeroOutState = new OutState(new OutStatePins(0, 0), 0, false);
-
-        int curIOIdx = 0;
-        for(OutState os : statesList) {
-            int osIdx = BitUtils.consolidateBitField(os.pins.out, ioAsOutMask);
-
-            for(int idx = curIOIdx; idx < osIdx; idx++) {
-                OutState padOS = new OutState(new OutStatePins(BitUtils.scatterBitField(idx, ioAsOutMask), 0), os.getOutLinks().length, os.getRegLinks().length > 0);
-
-                for(int link_idx = 0; link_idx < padOS.getOutLinks().length; link_idx++) padOS.addOutLink(new OutLink(padOS, zeroOutState, BitUtils.scatterBitField(link_idx, pSpecs.getMask_IN() | (pSpecs.getMask_IO_W() & ~ioAsOut_W))));
-                for(int link_idx = 0; link_idx < padOS.getRegLinks().length; link_idx++) padOS.addRegLink(new RegLink(padOS, padOS, zeroOutState, BitUtils.scatterBitField(link_idx, pSpecs.getMask_IN() | (pSpecs.getMask_IO_W() & ~ioAsOut_W))));
-
-                outList.add(padOS);
-                logger.info("padUnknownOutStates() -> pad with state " + padOS);
-            }
-            outList.add(os);
-
-            curIOIdx = osIdx+1;
-        }
-
-        for(int idx = curIOIdx; idx < (1 << ioAsOutPins); idx++) {
-            OutState padOS = new OutState(new OutStatePins(BitUtils.scatterBitField(idx, ioAsOutMask), 0), states[0].getOutLinks().length, states[0].getRegLinks().length > 0);
-
-            for(int link_idx = 0; link_idx < padOS.getOutLinks().length; link_idx++) padOS.addOutLink(new OutLink(padOS, zeroOutState, BitUtils.scatterBitField(link_idx, pSpecs.getMask_IN() | (pSpecs.getMask_IO_W() & ~ioAsOut_W))));
-            for(int link_idx = 0; link_idx < padOS.getRegLinks().length; link_idx++) padOS.addRegLink(new RegLink(padOS, padOS, zeroOutState, BitUtils.scatterBitField(link_idx, pSpecs.getMask_IN() | (pSpecs.getMask_IO_W() & ~ioAsOut_W))));
-
-            outList.add(padOS);
-            logger.info("padUnknownOutStates() -> end padding with state " + padOS);           
-        }
-
-        return outList.toArray(new OutState[outList.size()]);
-    }
-}

+ 1 - 1
src/test/java/info/hkzlab/dupal/analyzer/FormattersTest.java

@@ -21,7 +21,7 @@ public class FormattersTest {
         String header = EspressoFormatter.formatEspressoTableHeader(pSpecs, ioAsOutMask);
         String expectedHeader = "# PAL16L8\n" + ".i 16\n" + ".o 8\n"
                 + ".ilb i1 i2 i3 i4 i5 i6 i7 i8 i9 i11 io16 io15 io14 io13 fio18 fio17 \n"
-                + ".ob o19 o12 io18 io17 o19oe o12oe io18oe io17oe \n" + ".phase 00001111\n\n";
+                + ".ob o19 o12 io18 io17 o19oe o12oe io18oe io17oe \n" + ".phase 11110000\n\n";
 
         assertEquals("EspressoFormatter should build a correct 16L8 header", expectedHeader, header);
     }

+ 0 - 146
src/test/java/info/hkzlab/dupal/analyzer/OutStatePadderTest.java

@@ -1,146 +0,0 @@
-package info.hkzlab.dupal.analyzer;
-
-import static org.junit.Assert.*;
-
-
-import org.junit.Test;
-
-import info.hkzlab.dupal.analyzer.devices.PAL16L8Specs;
-import info.hkzlab.dupal.analyzer.exceptions.DuPALAnalyzerException;
-import info.hkzlab.dupal.analyzer.palanalisys.graph.*;
-import info.hkzlab.dupal.analyzer.palanalisys.padding.OutStatePadder;
-
-public class OutStatePadderTest {
-    @Test
-    public void PathFinderShouldProvideShortestPathToDestination() throws DuPALAnalyzerException {
-        OutState os_a = new OutState(new OutStatePins(0x00, 0x00), 3);
-        OutState os_b = new OutState(new OutStatePins(0x04, 0x00), 3);
-        OutState os_c = new OutState(new OutStatePins(0x06, 0x00), 3);
-
-        os_a.addOutLink(new OutLink(os_a, os_a, 0x10));
-        os_a.addOutLink(new OutLink(os_a, os_b, 0x20));
-        os_a.addOutLink(new OutLink(os_a, os_c, 0x30));
-
-        os_b.addOutLink(new OutLink(os_b, os_a, 0x10));
-        os_b.addOutLink(new OutLink(os_b, os_b, 0x20));
-        os_b.addOutLink(new OutLink(os_b, os_c, 0x30));
-        
-        os_c.addOutLink(new OutLink(os_c, os_a, 0x10));
-        os_c.addOutLink(new OutLink(os_c, os_b, 0x20));
-        os_c.addOutLink(new OutLink(os_c, os_b, 0x30));
-
-        OutState[] osArr = new OutState[] { os_a, os_b, os_c};
-        OutState[] padOsArr = OutStatePadder.padUnknownOutStates(osArr, new PAL16L8Specs(), 0x3F);
-       
-        assertEquals("OutStates array should be padded to full length", 0x40, padOsArr.length);
-    }
-
-    @Test
-    public void PathFinderShouldProvideShortestPathToDestinationWithRegLinks() throws DuPALAnalyzerException {
-        OutState os_a = new OutState(new OutStatePins(0x00, 0x00), 3);
-        OutState os_b = new OutState(new OutStatePins(0x01, 0x00), 3);
-        OutState os_c = new OutState(new OutStatePins(0x02, 0x00), 3);
-        OutState os_d = new OutState(new OutStatePins(0x03, 0x00), 3);
-        OutState os_e = new OutState(new OutStatePins(0x04, 0x00), 3, true);
-        OutState os_f = new OutState(new OutStatePins(0x05, 0x00), 3, true);
-
-        os_a.addOutLink(new OutLink(os_a, os_a, 0x10));
-        os_a.addOutLink(new OutLink(os_a, os_b, 0x20));
-        os_a.addOutLink(new OutLink(os_a, os_c, 0x30));
-
-        os_b.addOutLink(new OutLink(os_b, os_a, 0x10));
-        os_b.addOutLink(new OutLink(os_b, os_e, 0x20));
-        os_b.addOutLink(new OutLink(os_b, os_d, 0x30));
-        
-        os_c.addOutLink(new OutLink(os_c, os_a, 0x10));
-        os_c.addOutLink(new OutLink(os_c, os_b, 0x20));
-        os_c.addOutLink(new OutLink(os_c, os_d, 0x30));
-        
-        os_d.addOutLink(new OutLink(os_d, os_c, 0x10));
-        os_d.addOutLink(new OutLink(os_d, os_b, 0x20));
-        os_d.addOutLink(new OutLink(os_d, os_e, 0x30));
-
-        os_e.addOutLink(new OutLink(os_e, os_a, 0x10));
-        os_e.addOutLink(new OutLink(os_e, os_d, 0x20));
-        os_e.addOutLink(new OutLink(os_e, os_e, 0x20));
-        os_e.addRegLink(new RegLink(os_e, os_e, os_f, 0x10));
-        os_e.addRegLink(new RegLink(os_e, os_e, os_e, 0x20));
-        os_e.addRegLink(new RegLink(os_e, os_e, os_e, 0x30));
-        
-        os_f.addOutLink(new OutLink(os_f, os_f, 0x10));
-        os_f.addOutLink(new OutLink(os_f, os_f, 0x20));
-        os_f.addRegLink(new RegLink(os_f, os_f, os_a, 0x20));
-
-        GraphLink[] path = PathFinder.findPathToNearestUnfilledState(os_a);
-        GraphLink[] expectedPath = new GraphLink[] { new OutLink(os_a, os_b, 0x20), new OutLink(os_b, os_e, 0x20), new RegLink(os_e, os_e, os_f, 0x10) }; // a->b->e=>f
-
-        assertArrayEquals("PathFinder should find the shortest path between a node and an incomplete one even if regLinks are involved", expectedPath, path);
-    }
-
-
-    @Test
-    public void PathFinderShouldProvideNoPathIfAllNodesAreComplete() throws DuPALAnalyzerException {
-        OutState os_a = new OutState(new OutStatePins(0x00, 0x00), 3);
-        OutState os_b = new OutState(new OutStatePins(0x01, 0x00), 3);
-        OutState os_c = new OutState(new OutStatePins(0x02, 0x00), 3);
-        OutState os_d = new OutState(new OutStatePins(0x03, 0x00), 3);
-        OutState os_e = new OutState(new OutStatePins(0x04, 0x00), 3);
-
-        os_a.addOutLink(new OutLink(os_a, os_a, 0x10));
-        os_a.addOutLink(new OutLink(os_a, os_b, 0x20));
-        os_a.addOutLink(new OutLink(os_a, os_c, 0x30));
-
-        os_b.addOutLink(new OutLink(os_b, os_a, 0x10));
-        os_b.addOutLink(new OutLink(os_b, os_e, 0x20));
-        os_b.addOutLink(new OutLink(os_b, os_d, 0x30));
-        
-        os_c.addOutLink(new OutLink(os_c, os_a, 0x10));
-        os_c.addOutLink(new OutLink(os_c, os_b, 0x20));
-        os_c.addOutLink(new OutLink(os_c, os_d, 0x30));
-        
-        os_d.addOutLink(new OutLink(os_d, os_c, 0x10));
-        os_d.addOutLink(new OutLink(os_d, os_b, 0x20));
-        os_d.addOutLink(new OutLink(os_d, os_e, 0x30));
-
-        os_e.addOutLink(new OutLink(os_e, os_a, 0x10));
-        os_e.addOutLink(new OutLink(os_e, os_d, 0x20));
-        os_e.addOutLink(new OutLink(os_e, os_e, 0x20));
-
-        GraphLink[] path = PathFinder.findPathToNearestUnfilledState(os_a);
-        
-        assertArrayEquals("PathFinder should return null if no incomplete node exists", null, path);
-    }
-
-    @Test
-    public void PathFinderShouldProvideShortestPathBetweenStates() throws DuPALAnalyzerException {
-        OutState os_a = new OutState(new OutStatePins(0x00, 0x00), 3);
-        OutState os_b = new OutState(new OutStatePins(0x01, 0x00), 3);
-        OutState os_c = new OutState(new OutStatePins(0x02, 0x00), 3);
-        OutState os_d = new OutState(new OutStatePins(0x03, 0x00), 3);
-        OutState os_e = new OutState(new OutStatePins(0x04, 0x00), 3);
-
-        os_a.addOutLink(new OutLink(os_a, os_a, 0x10));
-        os_a.addOutLink(new OutLink(os_a, os_b, 0x20));
-        os_a.addOutLink(new OutLink(os_a, os_c, 0x30));
-
-        os_b.addOutLink(new OutLink(os_b, os_a, 0x10));
-        os_b.addOutLink(new OutLink(os_b, os_e, 0x20));
-        os_b.addOutLink(new OutLink(os_b, os_d, 0x30));
-        
-        os_c.addOutLink(new OutLink(os_c, os_a, 0x10));
-        os_c.addOutLink(new OutLink(os_c, os_b, 0x20));
-        os_c.addOutLink(new OutLink(os_c, os_d, 0x30));
-        
-        os_d.addOutLink(new OutLink(os_d, os_c, 0x10));
-        os_d.addOutLink(new OutLink(os_d, os_b, 0x20));
-        os_d.addOutLink(new OutLink(os_d, os_e, 0x30));
-
-        os_e.addOutLink(new OutLink(os_e, os_a, 0x10));
-        os_e.addOutLink(new OutLink(os_e, os_d, 0x20));
-        os_e.addOutLink(new OutLink(os_e, os_e, 0x20));
-
-        GraphLink[] path = PathFinder.findPathToState(os_b, os_c);
-        
-        assertEquals("PathFinder should find shortest path between two states", 2, path.length);
-    }
-}