refactoring of Gal16v8JEDECExporter

This commit is contained in:
hneemann 2016-06-02 21:05:22 +02:00
parent 112e2b945b
commit f4a23ced0e

View File

@ -58,14 +58,12 @@ public class Gal16v8JEDECExporter implements ExpressionExporter<Gal16v8JEDECExpo
if (registered) { if (registered) {
map.setFuse(SYN, false); map.setFuse(SYN, false);
map.setFuse(AC0, true); map.setFuse(AC0, true);
for (int i = 0; i < 8; i++)
map.setFuse(AC1 + i, true);
} else { } else {
map.setFuse(SYN, true); map.setFuse(SYN, true);
map.setFuse(AC0, false); map.setFuse(AC0, false);
for (int i = 0; i < 8; i++)
map.setFuse(AC1 + i, false);
} }
for (int i = 0; i < 8; i++)
map.setFuse(AC1 + i, true);
} }
@Override @Override
@ -73,17 +71,6 @@ public class Gal16v8JEDECExporter implements ExpressionExporter<Gal16v8JEDECExpo
return builder; return builder;
} }
/**
* enables register in registered mode
*
* @param i the OLMC to enable the register for
* @return this for chained calls
*/
private Gal16v8JEDECExporter enableRegisterFor(int i) {
map.setFuse(AC1 + i, false);
return this;
}
@Override @Override
public PinMap getPinMapping() { public PinMap getPinMapping() {
return pinMap; return pinMap;
@ -106,29 +93,22 @@ public class Gal16v8JEDECExporter implements ExpressionExporter<Gal16v8JEDECExpo
for (String o : builder.getOutputs()) { for (String o : builder.getOutputs()) {
int olmc = 19 - pinMap.getOutputFor(o); int olmc = 19 - pinMap.getOutputFor(o);
int offs = olmc * 256; int offs = olmc * 256;
map.setFuse(XOR + olmc); // set XOR to compensate inverted driver
if (builder.getCombinatorial().containsKey(o)) { if (builder.getCombinatorial().containsKey(o)) {
map.setFuse(XOR + olmc); // set XOR to compensate inverted driver
if (registered) { if (registered) {
for (int j = 0; j < 32; j++) map.setFuse(offs + j); for (int j = 0; j < 32; j++) map.setFuse(offs + j); // turn on OE
filler.fillExpression(offs + 32, builder.getCombinatorial().get(o), 7); filler.fillExpression(offs + 32, builder.getCombinatorial().get(o), 7);
} else { } else {
map.setFuse(AC1 + olmc, false);
filler.fillExpression(offs, builder.getCombinatorial().get(o), 8); filler.fillExpression(offs, builder.getCombinatorial().get(o), 8);
} }
} else if (builder.getRegistered().containsKey(o)) { } else if (builder.getRegistered().containsKey(o)) {
enableRegisterFor(olmc); map.setFuse(AC1 + olmc, false); // turn on register
map.setFuse(XOR + olmc); // set XOR to compensate inverted driver
filler.fillExpression(offs, builder.getRegistered().get(o), 8); filler.fillExpression(offs, builder.getRegistered().get(o), 8);
} else } else
throw new FuseMapFillerException("variable " + o + " not found!"); throw new FuseMapFillerException("variable " + o + " not found!");
} }
if (!registered) {
// turn on unused AC1(n) bits
for (int i : pinMap.getUnusedOutputs())
map.setFuse(AC1 + (19 - i));
}
new JedecWriter(out).println("Digital GAL16v8 assembler*").write(map).close(); new JedecWriter(out).println("Digital GAL16v8 assembler*").write(map).close();
} }