From 1b0fd9dc137e15acd0af4fd55950a33cba2461db Mon Sep 17 00:00:00 2001 From: hneemann Date: Fri, 1 Feb 2019 16:43:42 +0100 Subject: [PATCH] LUTs are created only if they don't represent a basic gate. --- src/main/dig/sequential/conway/cellLUT.dig | 22 ++++++++--------- .../builder/circuit/CircuitBuilder.java | 24 +++++++++++++------ 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/main/dig/sequential/conway/cellLUT.dig b/src/main/dig/sequential/conway/cellLUT.dig index 26869a921..c5d96885b 100644 --- a/src/main/dig/sequential/conway/cellLUT.dig +++ b/src/main/dig/sequential/conway/cellLUT.dig @@ -18,7 +18,7 @@ sehen Sie sich die Datei discrete.dig an.}} Data - 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,1,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,0,0,0,0,1,0,1,0, 1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,1, 0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,1, @@ -117,16 +117,6 @@ Val genutzt um die Zelle zu initialisieren.}} - - In - - - Label - C - - - - Out @@ -142,6 +132,16 @@ Val genutzt um die Zelle zu initialisieren.}} + + Clock + + + Label + C + + + + In diff --git a/src/main/java/de/neemann/digital/builder/circuit/CircuitBuilder.java b/src/main/java/de/neemann/digital/builder/circuit/CircuitBuilder.java index b6986559f..49df34893 100644 --- a/src/main/java/de/neemann/digital/builder/circuit/CircuitBuilder.java +++ b/src/main/java/de/neemann/digital/builder/circuit/CircuitBuilder.java @@ -205,15 +205,25 @@ public class CircuitBuilder implements BuilderInterface { } private Fragment createFragment(Expression expression) throws BuilderException { - boolean lutNeeded = true; - if (expression instanceof Variable) - lutNeeded = false; - else if (expression instanceof Not && ((Not) expression).getExpression() instanceof Variable) - lutNeeded = false; + if (useLUT) { + if (expression instanceof Variable) + return createBasicFragment(expression); + + if (expression instanceof Not && ((Not) expression).getExpression() instanceof Variable) + return createBasicFragment(expression); + + if (expression instanceof Operation) { + boolean allVars = true; + for (Expression ex : ((Operation) expression).getExpressions()) { + if (!(ex instanceof Variable || (ex instanceof Not && ((Not) ex).getExpression() instanceof Variable))) + allVars = false; + } + if (allVars) + return createBasicFragment(expression); + } - if (useLUT && lutNeeded) return createLutFragment(expression); - else + } else return createBasicFragment(expression); }