allows the creation of circuits which only uses gates with a maximum of three inputs

This commit is contained in:
hneemann 2018-04-25 20:03:37 +02:00
parent 8efd06a768
commit 8c4fc62e08
4 changed files with 18 additions and 19 deletions

View File

@ -11,6 +11,7 @@ import de.neemann.digital.analyse.expression.Operation;
import java.util.ArrayList;
/**
* uses only gates with three inputs
*/
public class ThreeInputs implements ExpressionModifier {
@Override
@ -49,21 +50,12 @@ public class ThreeInputs implements ExpressionModifier {
private Expression gen(int a, int b) {
int num = b - a + 1;
System.out.println(num);
if (num == 1)
return expressions.get(a);
else if (num == 2)
return opGen.op(expressions.get(a), expressions.get(b));
else {
int d = 1;
while (d * 3 * 2 < num)
d *= 3;
if (d * 3 * 2 == num) {
return opGen.op(
gen(a, a + d * 3 - 1),
gen(a + d * 3, b));
} else {
int d = num / 3;
return opGen.op(
gen(a, a + d - 1),
gen(a + d, a + d * 2 - 1),
@ -71,6 +63,5 @@ public class ThreeInputs implements ExpressionModifier {
}
}
}
}
}

View File

@ -14,10 +14,7 @@ import de.neemann.digital.analyse.expression.Variable;
import de.neemann.digital.analyse.expression.format.FormatToExpression;
import de.neemann.digital.analyse.expression.format.FormatToTableLatex;
import de.neemann.digital.analyse.expression.format.FormatterException;
import de.neemann.digital.analyse.expression.modify.ExpressionModifier;
import de.neemann.digital.analyse.expression.modify.NAnd;
import de.neemann.digital.analyse.expression.modify.NOr;
import de.neemann.digital.analyse.expression.modify.TwoInputs;
import de.neemann.digital.analyse.expression.modify.*;
import de.neemann.digital.analyse.format.TruthTableFormatterLaTeX;
import de.neemann.digital.analyse.quinemc.BoolTableByteArray;
import de.neemann.digital.builder.ATF150x.ATFDevice;
@ -405,6 +402,13 @@ public class TableDialog extends JDialog {
}
}.setToolTip(Lang.get("menu_table_createTwo_tt")).createJMenuItem());
createMenu.add(new ToolTipAction(Lang.get("menu_table_createThree")) {
@Override
public void actionPerformed(ActionEvent actionEvent) {
createCircuit(new ThreeInputs());
}
}.setToolTip(Lang.get("menu_table_createThree_tt")).createJMenuItem());
createMenu.add(new ToolTipAction(Lang.get("menu_table_createNAnd")) {
@Override
public void actionPerformed(ActionEvent actionEvent) {

View File

@ -1242,6 +1242,8 @@ Sind evtl. die Namen der Variablen nicht eindeutig?</string>
<string name="menu_table_createNOr_tt">Erzeugt eine Schaltung, welche der Wahrheitstabelle entspricht nur mit NOr-Gattern.</string>
<string name="menu_table_createTwo">Schaltung mit Gattern mit zwei Eingängen</string>
<string name="menu_table_createTwo_tt">Erzeugt eine Schaltung und verwendet nur Gatter mit zwei Eingängen.</string>
<string name="menu_table_createThree">Schaltung mit Gattern mit drei Eingängen</string>
<string name="menu_table_createThree_tt">Erzeugt eine Schaltung und verwendet nur Gatter mit maximal drei Eingängen.</string>
<string name="menu_table_create_hardware">Bausteine</string>
<string name="menu_table_create_jedec_tt">Erzeugt eine JEDEC Datei für den Baustein</string>
<string name="menu_table_exportTableLaTeX">Export LaTeX</string>

View File

@ -1238,6 +1238,8 @@
<string name="menu_table_createNOr_tt">Creates a circuit which reproduces the truth table only with NOr gates.</string>
<string name="menu_table_createTwo">Circuit with two input gates</string>
<string name="menu_table_createTwo_tt">create circuit, use only gates with two inputs</string>
<string name="menu_table_createThree">Circuit with three input gates</string>
<string name="menu_table_createThree_tt">create circuit, use only gates with a maximum of three inputs</string>
<string name="menu_table_create_hardware">Device</string>
<string name="menu_table_create_jedec_tt">Creates a JEDEC file for the device</string>
<string name="menu_table_exportTableLaTeX">Export LaTeX</string>