Search in sources :

Example 1 with JedecWriter

use of de.neemann.digital.builder.jedec.JedecWriter in project Digital by hneemann.

the class Gal22v10JEDECExporter method writeTo.

@Override
public void writeTo(OutputStream out) throws FuseMapFillerException, IOException, PinMapException {
    for (String in : builder.getInputs()) {
        int i = pinMap.getInputFor(in);
        if (i == 13)
            filler.addVariable(21, new Variable(in));
        else
            filler.addVariable((i - 1) * 2, new Variable(in));
    }
    for (String o : builder.getOutputs()) {
        int i = 23 - pinMap.getOutputFor(o);
        filler.addVariableReverse(i * 2 + 1, new Variable(o));
    }
    for (String o : builder.getOutputs()) {
        int olmc = 23 - pinMap.getOutputFor(o);
        int offs = OE_FUSE_NUM_BY_OLMC[olmc];
        // turn on OE
        for (int j = 0; j < 44; j++) map.setFuse(offs + j);
        // set olmc to active high
        map.setFuse(S0 + olmc * 2);
        if (builder.getCombinatorial().containsKey(o)) {
            map.setFuse(S1 + olmc * 2);
            filler.fillExpression(offs + 44, builder.getCombinatorial().get(o), PRODUCTS_BY_OLMC[olmc]);
        } else if (builder.getRegistered().containsKey(o)) {
            filler.fillExpression(offs + 44, builder.getRegistered().get(o), PRODUCTS_BY_OLMC[olmc]);
        } else
            throw new FuseMapFillerException("variable " + o + " not found!");
    }
    try (JedecWriter w = new JedecWriter(out)) {
        w.println("Digital GAL22v10 assembler*").write(map);
    }
}
Also used : FuseMapFillerException(de.neemann.digital.builder.jedec.FuseMapFillerException) Variable(de.neemann.digital.analyse.expression.Variable) JedecWriter(de.neemann.digital.builder.jedec.JedecWriter)

Example 2 with JedecWriter

use of de.neemann.digital.builder.jedec.JedecWriter in project Digital by hneemann.

the class Gal16v8JEDECExporter method writeTo.

@Override
public void writeTo(OutputStream out) throws FuseMapFillerException, IOException, PinMapException {
    boolean registered = !builder.getRegistered().isEmpty();
    init(registered);
    for (String in : builder.getInputs()) {
        int i = pinMap.getInputFor(in) - 2;
        filler.addVariable(i * 2, new Variable(in));
    }
    for (String o : builder.getOutputs()) {
        int i = 19 - pinMap.getOutputFor(o);
        filler.addVariable(i * 2 + 1, new Variable(o));
    }
    for (String o : builder.getOutputs()) {
        int olmc = 19 - pinMap.getOutputFor(o);
        int offs = olmc * 256;
        // set XOR to compensate inverted driver
        map.setFuse(XOR + olmc);
        if (builder.getCombinatorial().containsKey(o)) {
            if (registered) {
                // turn on OE
                for (int j = 0; j < 32; j++) map.setFuse(offs + j);
                filler.fillExpression(offs + 32, builder.getCombinatorial().get(o), 7);
            } else {
                map.setFuse(AC1 + olmc, false);
                filler.fillExpression(offs, builder.getCombinatorial().get(o), 8);
            }
        } else if (builder.getRegistered().containsKey(o)) {
            // turn on register
            map.setFuse(AC1 + olmc, false);
            filler.fillExpression(offs, builder.getRegistered().get(o), 8);
        } else
            throw new FuseMapFillerException("variable " + o + " not found!");
    }
    try (JedecWriter w = new JedecWriter(out)) {
        w.println("Digital GAL16v8 assembler*").write(map);
    }
}
Also used : FuseMapFillerException(de.neemann.digital.builder.jedec.FuseMapFillerException) Variable(de.neemann.digital.analyse.expression.Variable) JedecWriter(de.neemann.digital.builder.jedec.JedecWriter)

Aggregations

Variable (de.neemann.digital.analyse.expression.Variable)2 FuseMapFillerException (de.neemann.digital.builder.jedec.FuseMapFillerException)2 JedecWriter (de.neemann.digital.builder.jedec.JedecWriter)2