mirror of
https://github.com/hneemann/Digital.git
synced 2025-09-13 06:49:36 -04:00
allows GAL signal pass through, see #390
This commit is contained in:
parent
af432a2268
commit
f58ee33c1c
@ -80,4 +80,12 @@ public class BuilderCollector implements BuilderInterface<BuilderCollector> {
|
||||
return registered;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes an output.
|
||||
*
|
||||
* @param name the output to remove
|
||||
*/
|
||||
public void removeOutput(String name) {
|
||||
outputs.remove(name);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,93 @@
|
||||
/*
|
||||
* Copyright (c) 2019 Helmut Neemann.
|
||||
* Use of this source code is governed by the GPL v3 license
|
||||
* that can be found in the LICENSE file.
|
||||
*/
|
||||
package de.neemann.digital.builder.Gal16v8;
|
||||
|
||||
import de.neemann.digital.analyse.expression.Expression;
|
||||
import de.neemann.digital.builder.BuilderCollector;
|
||||
import de.neemann.digital.builder.BuilderException;
|
||||
import de.neemann.digital.builder.PinMap;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Used to avoid a double cell allocation if the output of a ff is used as a autput of the state machine.
|
||||
* This is the case if a Moore machine is build where the state equals the output.
|
||||
* Sometimes this kind of state machines is called a Medwedew machine.
|
||||
*/
|
||||
public class BuilderCollectorGAL extends BuilderCollector {
|
||||
private final PinMap pinMap;
|
||||
private HashSet<String> sequentialVars;
|
||||
private boolean doubleCellUsageFixed = false;
|
||||
|
||||
/**
|
||||
* Creates a new instance
|
||||
*
|
||||
* @param pinMap the used pinMap. Is required to handle aliases correctly
|
||||
*/
|
||||
public BuilderCollectorGAL(PinMap pinMap) {
|
||||
this.pinMap = pinMap;
|
||||
sequentialVars = new HashSet<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public BuilderCollector addCombinatorial(String name, Expression expression) throws BuilderException {
|
||||
checkOpen();
|
||||
return super.addCombinatorial(name, expression);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BuilderCollector addSequential(String name, Expression expression) throws BuilderException {
|
||||
checkOpen();
|
||||
sequentialVars.add(name);
|
||||
return super.addSequential(name, expression);
|
||||
}
|
||||
|
||||
private void checkOpen() {
|
||||
if (doubleCellUsageFixed)
|
||||
throw new RuntimeException("wrong BuilderCollectorGAL usage!");
|
||||
}
|
||||
|
||||
private void fixDoubleCellUsage() {
|
||||
if (!doubleCellUsageFixed) {
|
||||
|
||||
super.getCombinatorial().entrySet().removeIf(c -> {
|
||||
if (pinMap.isSimpleAlias(c.getKey(), c.getValue(), sequentialVars)) {
|
||||
removeOutput(c.getKey());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
doubleCellUsageFixed = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<String> getOutputs() {
|
||||
fixDoubleCellUsage();
|
||||
return super.getOutputs();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<String> getInputs() {
|
||||
fixDoubleCellUsage();
|
||||
return super.getInputs();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Expression> getCombinatorial() {
|
||||
fixDoubleCellUsage();
|
||||
return super.getCombinatorial();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Expression> getRegistered() {
|
||||
fixDoubleCellUsage();
|
||||
return super.getRegistered();
|
||||
}
|
||||
}
|
@ -84,7 +84,7 @@ public class CuplExporter implements ExpressionExporter<CuplExporter> {
|
||||
this.date = date;
|
||||
this.devName = devName;
|
||||
this.pinMap = pinMap;
|
||||
builder = new CuplBuilder();
|
||||
builder = new CuplBuilder(pinMap);
|
||||
cleanNameBuilder = new CleanNameBuilder(builder);
|
||||
}
|
||||
|
||||
@ -228,14 +228,15 @@ public class CuplExporter implements ExpressionExporter<CuplExporter> {
|
||||
protected void sequentialWritten(Writer out, String name) throws IOException {
|
||||
}
|
||||
|
||||
private final class CuplBuilder extends BuilderCollector {
|
||||
private static final class CuplBuilder extends BuilderCollectorGAL {
|
||||
private final NotAllowedVariablesVisitor notAllowedVariablesVisitor = new NotAllowedVariablesVisitor();
|
||||
|
||||
private CuplBuilder(PinMap pinMap) {
|
||||
super(pinMap);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BuilderCollector addCombinatorial(String name, Expression expression) throws BuilderException {
|
||||
if (pinMap.isSimpleAlias(name, expression))
|
||||
return this; // ignore simple variables!
|
||||
|
||||
expression.traverse(notAllowedVariablesVisitor);
|
||||
notAllowedVariablesVisitor.check(name);
|
||||
return super.addCombinatorial(name, expression);
|
||||
|
@ -5,9 +5,11 @@
|
||||
*/
|
||||
package de.neemann.digital.builder.Gal16v8;
|
||||
|
||||
import de.neemann.digital.analyse.expression.Expression;
|
||||
import de.neemann.digital.analyse.expression.Variable;
|
||||
import de.neemann.digital.builder.*;
|
||||
import de.neemann.digital.builder.BuilderCollector;
|
||||
import de.neemann.digital.builder.ExpressionExporter;
|
||||
import de.neemann.digital.builder.PinMap;
|
||||
import de.neemann.digital.builder.PinMapException;
|
||||
import de.neemann.digital.builder.jedec.FuseMap;
|
||||
import de.neemann.digital.builder.jedec.FuseMapFiller;
|
||||
import de.neemann.digital.builder.jedec.FuseMapFillerException;
|
||||
@ -43,18 +45,10 @@ public class Gal16v8JEDECExporter implements ExpressionExporter<Gal16v8JEDECExpo
|
||||
map.setFuse(i, true);
|
||||
filler = new FuseMapFiller(map, 16);
|
||||
|
||||
builder = new BuilderCollector() {
|
||||
@Override
|
||||
public BuilderCollector addCombinatorial(String name, Expression expression) throws BuilderException {
|
||||
if (pinMap.isSimpleAlias(name, expression))
|
||||
return this;
|
||||
else
|
||||
return super.addCombinatorial(name, expression);
|
||||
}
|
||||
};
|
||||
pinMap = new PinMap()
|
||||
.setAvailInputs(2, 3, 4, 5, 6, 7, 8, 9)
|
||||
.setAvailOutputs(12, 13, 14, 15, 16, 17, 18, 19);
|
||||
builder = new BuilderCollectorGAL(pinMap);
|
||||
}
|
||||
|
||||
private void init(boolean registered) {
|
||||
|
@ -5,9 +5,9 @@
|
||||
*/
|
||||
package de.neemann.digital.builder.Gal22v10;
|
||||
|
||||
import de.neemann.digital.analyse.expression.Expression;
|
||||
import de.neemann.digital.analyse.expression.Variable;
|
||||
import de.neemann.digital.builder.*;
|
||||
import de.neemann.digital.builder.Gal16v8.BuilderCollectorGAL;
|
||||
import de.neemann.digital.builder.jedec.FuseMap;
|
||||
import de.neemann.digital.builder.jedec.FuseMapFiller;
|
||||
import de.neemann.digital.builder.jedec.FuseMapFillerException;
|
||||
@ -36,18 +36,10 @@ public class Gal22v10JEDECExporter implements ExpressionExporter<Gal22v10JEDECEx
|
||||
map = new FuseMap(5892);
|
||||
filler = new FuseMapFiller(map, 22);
|
||||
|
||||
builder = new BuilderCollector() {
|
||||
@Override
|
||||
public BuilderCollector addCombinatorial(String name, Expression expression) throws BuilderException {
|
||||
if (pinMap.isSimpleAlias(name, expression))
|
||||
return this;
|
||||
else
|
||||
return super.addCombinatorial(name, expression);
|
||||
}
|
||||
};
|
||||
pinMap = new PinMap()
|
||||
.setAvailInputs(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13)
|
||||
.setAvailOutputs(14, 15, 16, 17, 18, 19, 20, 21, 22, 23);
|
||||
builder = new BuilderCollectorGAL(pinMap);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -122,14 +122,19 @@ public class PinMap {
|
||||
* Checks if the assignment is a simple A=B. If true a alias for A is generated in the pin map.
|
||||
* This is needed to void to assign two pins to the same logical signal generated by a flip flop.
|
||||
*
|
||||
* @param name the name of the target
|
||||
* @param expression the expression to check
|
||||
* @param name the name of the target
|
||||
* @param expression the expression to check
|
||||
* @param sequentialVars if a set is given, only the assignments generated from one of the
|
||||
* contained variables are removed. Maybe null.
|
||||
* @return true if expression is a simple variable
|
||||
*/
|
||||
public boolean isSimpleAlias(String name, Expression expression) {
|
||||
public boolean isSimpleAlias(String name, Expression expression, HashSet<String> sequentialVars) {
|
||||
if (expression instanceof Variable) {
|
||||
String al = ((Variable) expression).getIdentifier();
|
||||
|
||||
if (sequentialVars != null && !sequentialVars.contains(al))
|
||||
return false;
|
||||
|
||||
HashSet<String> found = null;
|
||||
for (HashSet<String> s : alias)
|
||||
if (s.contains(name) || s.contains(al)) {
|
||||
|
@ -57,7 +57,7 @@ public class ExpressionListenerJK implements ExpressionListener {
|
||||
}
|
||||
|
||||
/**
|
||||
* If the name belogs to a sequential state var, the state vars name is returned.
|
||||
* If the name belongs to a sequential state var, the state vars name is returned.
|
||||
* Otherwise a null is returned
|
||||
*
|
||||
* @param name the name of the variable
|
||||
|
@ -5,12 +5,30 @@
|
||||
*/
|
||||
package de.neemann.digital.builder.Gal16v8;
|
||||
|
||||
import de.neemann.digital.analyse.*;
|
||||
import de.neemann.digital.analyse.expression.Constant;
|
||||
import de.neemann.digital.analyse.expression.Expression;
|
||||
import de.neemann.digital.analyse.expression.ExpressionException;
|
||||
import de.neemann.digital.analyse.expression.Variable;
|
||||
import de.neemann.digital.analyse.expression.format.FormatterException;
|
||||
import de.neemann.digital.analyse.expression.modify.ExpressionModifier;
|
||||
import de.neemann.digital.builder.PinMapException;
|
||||
import de.neemann.digital.core.BacktrackException;
|
||||
import de.neemann.digital.core.Model;
|
||||
import de.neemann.digital.core.NodeException;
|
||||
import de.neemann.digital.draw.elements.Circuit;
|
||||
import de.neemann.digital.draw.elements.PinException;
|
||||
import de.neemann.digital.draw.library.ElementLibrary;
|
||||
import de.neemann.digital.draw.library.ElementNotFoundException;
|
||||
import de.neemann.digital.draw.model.ModelCreator;
|
||||
import de.neemann.digital.draw.shapes.ShapeFactory;
|
||||
import de.neemann.digital.gui.components.table.BuilderExpressionCreator;
|
||||
import de.neemann.digital.gui.components.table.ExpressionCreator;
|
||||
import de.neemann.digital.gui.components.table.ExpressionListenerStore;
|
||||
import de.neemann.digital.integration.Resources;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.*;
|
||||
import java.util.Date;
|
||||
|
||||
import static de.neemann.digital.analyse.expression.Not.not;
|
||||
@ -18,6 +36,7 @@ import static de.neemann.digital.analyse.expression.Operation.and;
|
||||
import static de.neemann.digital.analyse.expression.Operation.or;
|
||||
|
||||
/**
|
||||
* CUPL builder tests
|
||||
*/
|
||||
public class Gal16V8CuplExporterTest extends TestCase {
|
||||
|
||||
@ -133,4 +152,84 @@ public class Gal16V8CuplExporterTest extends TestCase {
|
||||
}
|
||||
}
|
||||
|
||||
public void testCuplWorkFlow() throws IOException, ElementNotFoundException, PinException, NodeException, AnalyseException, BacktrackException, PinMapException, ExpressionException, FormatterException {
|
||||
String cupl = createCupl("dig/GAL/Medwedew.dig");
|
||||
|
||||
assertEquals("Name test ;\r\n" +
|
||||
"PartNo 00 ;\r\n" +
|
||||
"Date unknownDate ;\r\n" +
|
||||
"Revision 01 ;\r\n" +
|
||||
"Designer nn ;\r\n" +
|
||||
"Company unknown ;\r\n" +
|
||||
"Assembly None ;\r\n" +
|
||||
"Location unknown ;\r\n" +
|
||||
"Device g16v8a ;\r\n" +
|
||||
"\r\n" +
|
||||
"/* inputs */\r\n" +
|
||||
"PIN 1 = CLK;\r\n" +
|
||||
"\r\n" +
|
||||
"/* outputs */\r\n" +
|
||||
"PIN 15 = Q_3n;\r\n" +
|
||||
"PIN 16 = Q_2n;\r\n" +
|
||||
"PIN 17 = Q_1n;\r\n" +
|
||||
"PIN 18 = Q_0n;\r\n" +
|
||||
"\r\n" +
|
||||
"/* sequential logic */\r\n" +
|
||||
"Q_0n.D = !Q_0n;\r\n" +
|
||||
"Q_1n.D = (Q_0n & !Q_1n) # (!Q_0n & Q_1n);\r\n" +
|
||||
"Q_2n.D = (Q_0n & Q_1n & !Q_2n) # (!Q_0n & Q_2n) # (!Q_1n & Q_2n);\r\n" +
|
||||
"Q_3n.D = (Q_0n & Q_1n & Q_2n & !Q_3n) # (!Q_0n & Q_3n) # (!Q_1n & Q_3n) # (!Q_2n & Q_3n);\r\n", cupl);
|
||||
}
|
||||
|
||||
public void testCuplWorkFlowPassThrough() throws IOException, ElementNotFoundException, PinException, NodeException, AnalyseException, BacktrackException, PinMapException, ExpressionException, FormatterException {
|
||||
String cupl = createCupl("dig/GAL/PassThrough.dig");
|
||||
|
||||
assertEquals("Name test ;\r\n" +
|
||||
"PartNo 00 ;\r\n" +
|
||||
"Date unknownDate ;\r\n" +
|
||||
"Revision 01 ;\r\n" +
|
||||
"Designer nn ;\r\n" +
|
||||
"Company unknown ;\r\n" +
|
||||
"Assembly None ;\r\n" +
|
||||
"Location unknown ;\r\n" +
|
||||
"Device g16v8a ;\r\n" +
|
||||
"\r\n" +
|
||||
"/* inputs */\r\n" +
|
||||
"PIN 1 = CLK;\r\n" +
|
||||
"PIN 3 = A;\r\n" +
|
||||
"\r\n" +
|
||||
"/* outputs */\r\n" +
|
||||
"PIN 16 = Yn;\r\n" +
|
||||
"PIN 15 = X;\r\n" +
|
||||
"\r\n" +
|
||||
"/* sequential logic */\r\n" +
|
||||
"Yn.D = A;\r\n" +
|
||||
"\r\n" +
|
||||
"/* combinatorial logic */\r\n" +
|
||||
"X = A;\r\n", cupl);
|
||||
}
|
||||
|
||||
|
||||
private String createCupl(String filename) throws IOException, PinException, NodeException, ElementNotFoundException, BacktrackException, AnalyseException, ExpressionException, FormatterException, PinMapException {
|
||||
File f = new File(Resources.getRoot(), filename);
|
||||
ElementLibrary library = new ElementLibrary();
|
||||
Circuit c = Circuit.loadCircuit(f, new ShapeFactory(library));
|
||||
Model model = new ModelCreator(c, new SubstituteLibrary(library)).createModel(false);
|
||||
TruthTable t = new ModelAnalyser(model).analyse();
|
||||
|
||||
ExpressionListenerStore expressions = new ExpressionListenerStore(null);
|
||||
new ExpressionCreator(t).create(expressions);
|
||||
|
||||
CuplExporter cuplExporter = new CuplExporter("nn", null);
|
||||
cuplExporter.setProjectName("test");
|
||||
final ModelAnalyserInfo modelAnalyzerInfo = t.getModelAnalyzerInfo();
|
||||
if (modelAnalyzerInfo != null)
|
||||
cuplExporter.getPinMapping().addAll(modelAnalyzerInfo.getPins());
|
||||
new BuilderExpressionCreator(cuplExporter.getBuilder(), ExpressionModifier.IDENTITY).create(expressions);
|
||||
|
||||
StringWriter str = new StringWriter();
|
||||
cuplExporter.writeTo(str);
|
||||
return str.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -8,7 +8,12 @@ package de.neemann.digital.builder;
|
||||
import de.neemann.digital.analyse.expression.Variable;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public class PinMapTest extends TestCase {
|
||||
|
||||
@ -131,7 +136,7 @@ public class PinMapTest extends TestCase {
|
||||
|
||||
public void testAlias() throws PinMapException {
|
||||
pinMap.assignPin("A", 4);
|
||||
assertTrue(pinMap.isSimpleAlias("B", new Variable("A")));
|
||||
assertTrue(pinMap.isSimpleAlias("B", new Variable("A"), null));
|
||||
|
||||
assertEquals(4, pinMap.getOutputFor("A"));
|
||||
assertEquals(4, pinMap.getOutputFor("B"));
|
||||
@ -139,14 +144,14 @@ public class PinMapTest extends TestCase {
|
||||
|
||||
public void testAliasSwap() throws PinMapException {
|
||||
pinMap.assignPin("A", 4);
|
||||
assertTrue(pinMap.isSimpleAlias("A", new Variable("B")));
|
||||
assertTrue(pinMap.isSimpleAlias("A", new Variable("B"), null));
|
||||
|
||||
assertEquals(4, pinMap.getOutputFor("A"));
|
||||
assertEquals(4, pinMap.getOutputFor("B"));
|
||||
}
|
||||
|
||||
public void testAliasReverseOrder() throws PinMapException {
|
||||
assertTrue(pinMap.isSimpleAlias("B", new Variable("A")));
|
||||
assertTrue(pinMap.isSimpleAlias("B", new Variable("A"), null));
|
||||
pinMap.assignPin("A", 4);
|
||||
|
||||
assertEquals(4, pinMap.getOutputFor("A"));
|
||||
@ -156,12 +161,27 @@ public class PinMapTest extends TestCase {
|
||||
|
||||
public void testAliasInput() throws PinMapException {
|
||||
pinMap.assignPin("A", 2);
|
||||
assertTrue(pinMap.isSimpleAlias("B", new Variable("A")));
|
||||
assertTrue(pinMap.isSimpleAlias("B", new Variable("A"), null));
|
||||
|
||||
assertEquals(2, pinMap.getInputFor("A"));
|
||||
assertEquals(2, pinMap.getInputFor("B"));
|
||||
}
|
||||
|
||||
public void testAliasSequential() throws PinMapException {
|
||||
pinMap.assignPin("A", 4);
|
||||
assertFalse(pinMap.isSimpleAlias("B", new Variable("A"), new HashSet<>()));
|
||||
|
||||
assertEquals(4, pinMap.getOutputFor("A"));
|
||||
assertEquals(5, pinMap.getOutputFor("B"));
|
||||
}
|
||||
|
||||
public void testAliasSequential2() throws PinMapException {
|
||||
pinMap.assignPin("A", 4);
|
||||
assertTrue(pinMap.isSimpleAlias("B", new Variable("A"), new HashSet<>(Collections.singletonList("A"))));
|
||||
|
||||
assertEquals(4, pinMap.getOutputFor("A"));
|
||||
assertEquals(4, pinMap.getOutputFor("B"));
|
||||
}
|
||||
|
||||
public void testToString() throws PinMapException {
|
||||
pinMap.assignPin("A", 1);
|
||||
|
864
src/test/resources/dig/GAL/Medwedew.dig
Normal file
864
src/test/resources/dig/GAL/Medwedew.dig
Normal file
@ -0,0 +1,864 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<circuit>
|
||||
<version>1</version>
|
||||
<attributes/>
|
||||
<visualElements>
|
||||
<visualElement>
|
||||
<elementName>Tunnel</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>1</int>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>NetName</string>
|
||||
<string>Q_3^n</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="340" y="180"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>D_FF</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>Q_3^n</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>1</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="260" y="180"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Or</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="140" y="140"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>And</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>4</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="20" y="0"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>And</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="20" y="120"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>And</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="20" y="200"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>And</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="20" y="280"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Tunnel</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>1</int>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>NetName</string>
|
||||
<string>Q_2^n</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="340" y="460"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>D_FF</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>Q_2^n</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>1</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="260" y="460"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Or</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>3</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="120" y="440"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>And</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>3</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="20" y="360"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>And</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="20" y="440"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>And</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="20" y="520"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Tunnel</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>1</int>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>NetName</string>
|
||||
<string>Q_1^n</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="340" y="660"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>D_FF</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>Q_1^n</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>1</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="260" y="660"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Or</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="120" y="640"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>And</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="20" y="600"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>And</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="20" y="680"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Tunnel</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>1</int>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>NetName</string>
|
||||
<string>Q_0^n</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="340" y="760"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>D_FF</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>Q_0^n</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Inputs</string>
|
||||
<int>1</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="260" y="760"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Tunnel</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="1"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>NetName</string>
|
||||
<string>Q_3^n</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="-160" y="-100"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Not</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="3"/>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="-140" y="-60"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Tunnel</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="1"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>NetName</string>
|
||||
<string>Q_2^n</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="-120" y="-100"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Not</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="3"/>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="-100" y="-60"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Tunnel</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="1"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>NetName</string>
|
||||
<string>Q_1^n</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="-80" y="-100"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Not</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="3"/>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="-60" y="-60"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Tunnel</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="1"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>NetName</string>
|
||||
<string>Q_0^n</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="-40" y="-100"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Not</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="3"/>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="-20" y="-60"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Clock</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>runRealTime</string>
|
||||
<boolean>true</boolean>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="3"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>C</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>Frequency</string>
|
||||
<int>2</int>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="240" y="120"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Tunnel</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="2"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>NetName</string>
|
||||
<string>Q_3^n</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="680" y="0"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>Q_3</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<string>15</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="700" y="0"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Tunnel</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="2"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>NetName</string>
|
||||
<string>Q_2^n</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="680" y="40"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>Q_2</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<string>16</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="700" y="40"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Tunnel</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="2"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>NetName</string>
|
||||
<string>Q_1^n</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="680" y="80"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>Q_1</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<string>17</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="700" y="80"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Tunnel</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>rotation</string>
|
||||
<rotation rotation="2"/>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>NetName</string>
|
||||
<string>Q_0^n</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="680" y="120"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>Q_0</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<string>18</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="700" y="120"/>
|
||||
</visualElement>
|
||||
</visualElements>
|
||||
<wires>
|
||||
<wire>
|
||||
<p1 x="-40" y="0"/>
|
||||
<p2 x="20" y="0"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="680" y="0"/>
|
||||
<p2 x="700" y="0"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-160" y="320"/>
|
||||
<p2 x="20" y="320"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-60" y="640"/>
|
||||
<p2 x="20" y="640"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="100" y="640"/>
|
||||
<p2 x="120" y="640"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-60" y="200"/>
|
||||
<p2 x="20" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="100" y="200"/>
|
||||
<p2 x="140" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="240" y="200"/>
|
||||
<p2 x="260" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-60" y="520"/>
|
||||
<p2 x="20" y="520"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="120" y="140"/>
|
||||
<p2 x="140" y="140"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="80" y="140"/>
|
||||
<p2 x="100" y="140"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="320" y="460"/>
|
||||
<p2 x="340" y="460"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="80" y="460"/>
|
||||
<p2 x="120" y="460"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="180" y="460"/>
|
||||
<p2 x="260" y="460"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="240" y="780"/>
|
||||
<p2 x="260" y="780"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-160" y="-80"/>
|
||||
<p2 x="-140" y="-80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-120" y="-80"/>
|
||||
<p2 x="-100" y="-80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-80" y="-80"/>
|
||||
<p2 x="-60" y="-80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-40" y="-80"/>
|
||||
<p2 x="-20" y="-80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-140" y="80"/>
|
||||
<p2 x="20" y="80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="680" y="80"/>
|
||||
<p2 x="700" y="80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-100" y="400"/>
|
||||
<p2 x="20" y="400"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-80" y="720"/>
|
||||
<p2 x="20" y="720"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-80" y="20"/>
|
||||
<p2 x="20" y="20"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="320" y="660"/>
|
||||
<p2 x="340" y="660"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="180" y="660"/>
|
||||
<p2 x="260" y="660"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-100" y="280"/>
|
||||
<p2 x="20" y="280"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-40" y="600"/>
|
||||
<p2 x="20" y="600"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="80" y="220"/>
|
||||
<p2 x="100" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="120" y="220"/>
|
||||
<p2 x="140" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="80" y="540"/>
|
||||
<p2 x="100" y="540"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-160" y="160"/>
|
||||
<p2 x="20" y="160"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="100" y="160"/>
|
||||
<p2 x="140" y="160"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-120" y="480"/>
|
||||
<p2 x="20" y="480"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="100" y="480"/>
|
||||
<p2 x="120" y="480"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="240" y="480"/>
|
||||
<p2 x="260" y="480"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="80" y="40"/>
|
||||
<p2 x="120" y="40"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="680" y="40"/>
|
||||
<p2 x="700" y="40"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-40" y="360"/>
|
||||
<p2 x="20" y="360"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-20" y="680"/>
|
||||
<p2 x="20" y="680"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="100" y="680"/>
|
||||
<p2 x="120" y="680"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="240" y="680"/>
|
||||
<p2 x="260" y="680"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="80" y="300"/>
|
||||
<p2 x="120" y="300"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="80" y="620"/>
|
||||
<p2 x="100" y="620"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-160" y="240"/>
|
||||
<p2 x="20" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-120" y="560"/>
|
||||
<p2 x="20" y="560"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="320" y="180"/>
|
||||
<p2 x="340" y="180"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="200" y="180"/>
|
||||
<p2 x="260" y="180"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-20" y="120"/>
|
||||
<p2 x="20" y="120"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="680" y="120"/>
|
||||
<p2 x="700" y="120"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="100" y="440"/>
|
||||
<p2 x="120" y="440"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-20" y="440"/>
|
||||
<p2 x="20" y="440"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="320" y="760"/>
|
||||
<p2 x="340" y="760"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-20" y="760"/>
|
||||
<p2 x="260" y="760"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-120" y="60"/>
|
||||
<p2 x="20" y="60"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-80" y="380"/>
|
||||
<p2 x="20" y="380"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="80" y="380"/>
|
||||
<p2 x="100" y="380"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="80" y="700"/>
|
||||
<p2 x="100" y="700"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="240" y="120"/>
|
||||
<p2 x="240" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="240" y="680"/>
|
||||
<p2 x="240" y="780"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="240" y="200"/>
|
||||
<p2 x="240" y="480"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="240" y="480"/>
|
||||
<p2 x="240" y="680"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-100" y="-80"/>
|
||||
<p2 x="-100" y="-60"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-100" y="-20"/>
|
||||
<p2 x="-100" y="280"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-100" y="280"/>
|
||||
<p2 x="-100" y="400"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-100" y="400"/>
|
||||
<p2 x="-100" y="820"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-20" y="-80"/>
|
||||
<p2 x="-20" y="-60"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-20" y="-20"/>
|
||||
<p2 x="-20" y="120"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-20" y="680"/>
|
||||
<p2 x="-20" y="760"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-20" y="760"/>
|
||||
<p2 x="-20" y="820"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-20" y="440"/>
|
||||
<p2 x="-20" y="680"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-20" y="120"/>
|
||||
<p2 x="-20" y="440"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="100" y="140"/>
|
||||
<p2 x="100" y="160"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="100" y="200"/>
|
||||
<p2 x="100" y="220"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="100" y="380"/>
|
||||
<p2 x="100" y="440"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="100" y="480"/>
|
||||
<p2 x="100" y="540"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="100" y="620"/>
|
||||
<p2 x="100" y="640"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="100" y="680"/>
|
||||
<p2 x="100" y="700"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-120" y="-100"/>
|
||||
<p2 x="-120" y="-80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-120" y="60"/>
|
||||
<p2 x="-120" y="480"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-120" y="560"/>
|
||||
<p2 x="-120" y="820"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-120" y="480"/>
|
||||
<p2 x="-120" y="560"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-120" y="-80"/>
|
||||
<p2 x="-120" y="60"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-40" y="-100"/>
|
||||
<p2 x="-40" y="-80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-40" y="-80"/>
|
||||
<p2 x="-40" y="0"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-40" y="360"/>
|
||||
<p2 x="-40" y="600"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-40" y="600"/>
|
||||
<p2 x="-40" y="820"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-40" y="0"/>
|
||||
<p2 x="-40" y="360"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="120" y="40"/>
|
||||
<p2 x="120" y="140"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="120" y="220"/>
|
||||
<p2 x="120" y="300"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-140" y="-80"/>
|
||||
<p2 x="-140" y="-60"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-140" y="-20"/>
|
||||
<p2 x="-140" y="80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-140" y="80"/>
|
||||
<p2 x="-140" y="820"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-60" y="-80"/>
|
||||
<p2 x="-60" y="-60"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-60" y="-20"/>
|
||||
<p2 x="-60" y="200"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-60" y="520"/>
|
||||
<p2 x="-60" y="640"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-60" y="200"/>
|
||||
<p2 x="-60" y="520"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-60" y="640"/>
|
||||
<p2 x="-60" y="820"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-160" y="-100"/>
|
||||
<p2 x="-160" y="-80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-160" y="320"/>
|
||||
<p2 x="-160" y="820"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-160" y="240"/>
|
||||
<p2 x="-160" y="320"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-160" y="-80"/>
|
||||
<p2 x="-160" y="160"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-160" y="160"/>
|
||||
<p2 x="-160" y="240"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-80" y="-100"/>
|
||||
<p2 x="-80" y="-80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-80" y="380"/>
|
||||
<p2 x="-80" y="720"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-80" y="20"/>
|
||||
<p2 x="-80" y="380"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-80" y="720"/>
|
||||
<p2 x="-80" y="820"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="-80" y="-80"/>
|
||||
<p2 x="-80" y="20"/>
|
||||
</wire>
|
||||
</wires>
|
||||
<measurementOrdering/>
|
||||
</circuit>
|
94
src/test/resources/dig/GAL/PassThrough.dig
Normal file
94
src/test/resources/dig/GAL/PassThrough.dig
Normal file
@ -0,0 +1,94 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<circuit>
|
||||
<version>1</version>
|
||||
<attributes/>
|
||||
<visualElements>
|
||||
<visualElement>
|
||||
<elementName>D_FF</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="220" y="60"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>In</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>A</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<string>3</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="180" y="60"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Clock</elementName>
|
||||
<elementAttributes/>
|
||||
<pos x="180" y="100"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>Y</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<string>16</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="300" y="60"/>
|
||||
</visualElement>
|
||||
<visualElement>
|
||||
<elementName>Out</elementName>
|
||||
<elementAttributes>
|
||||
<entry>
|
||||
<string>Label</string>
|
||||
<string>X</string>
|
||||
</entry>
|
||||
<entry>
|
||||
<string>pinNumber</string>
|
||||
<string>15</string>
|
||||
</entry>
|
||||
</elementAttributes>
|
||||
<pos x="300" y="20"/>
|
||||
</visualElement>
|
||||
</visualElements>
|
||||
<wires>
|
||||
<wire>
|
||||
<p1 x="200" y="80"/>
|
||||
<p2 x="220" y="80"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="180" y="100"/>
|
||||
<p2 x="200" y="100"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="200" y="20"/>
|
||||
<p2 x="300" y="20"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="180" y="60"/>
|
||||
<p2 x="200" y="60"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="280" y="60"/>
|
||||
<p2 x="300" y="60"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="200" y="60"/>
|
||||
<p2 x="220" y="60"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="200" y="80"/>
|
||||
<p2 x="200" y="100"/>
|
||||
</wire>
|
||||
<wire>
|
||||
<p1 x="200" y="20"/>
|
||||
<p2 x="200" y="60"/>
|
||||
</wire>
|
||||
</wires>
|
||||
<measurementOrdering/>
|
||||
</circuit>
|
Loading…
x
Reference in New Issue
Block a user