This commit is contained in:
hneemann 2016-06-30 08:11:38 +02:00
parent 2b72817664
commit 51eaa84232

View File

@ -2,49 +2,53 @@
* Digital is build from several packages: * Digital is build from several packages:
* <p> * <p>
* The package gui contains all the GUI classes. The class {@link de.neemann.digital.gui.Main} contains the * The package gui contains all the GUI classes. The class {@link de.neemann.digital.gui.Main} contains the
* main method ald the generation of the main frame. One of the more important class is * main method and the generation of the main frame. One of the more important class is
* {@link de.neemann.digital.gui.components.CircuitComponent}. This class is used to draw the circuit. * {@link de.neemann.digital.gui.components.CircuitComponent}. This class is used to draw the circuit.
* <p> * <p>
* There are two representations of the circuit. One is build up with * There are two representations of the digital circuit. One is build up with
* {@link de.neemann.digital.draw.elements.VisualElement} instances representing the elements in the circuit * {@link de.neemann.digital.draw.elements.VisualElement} instances representing the elements in the circuit
* and {@link de.neemann.digital.draw.elements.Wire} which simply represents a wire. The class * and {@link de.neemann.digital.draw.elements.Wire} which simply represents a wire. The class
* {@link de.neemann.digital.draw.elements.Circuit} contains both elements. * {@link de.neemann.digital.draw.elements.Circuit} contains a set of both elements.
* This representation is also stored on disk. You can find the necessary classes in the package draw. * This representation is also stored on disk. You can find the necessary classes in the package draw.
* Below I call this representation the circuit.
* <p> * <p>
* The other representation of the circuit is build by the {@link de.neemann.digital.core.Node} * The other representation of the digital circuit is build by the {@link de.neemann.digital.core.Node}
* classes which you can find in the code package. * classes which you can find in the core package.
* This classes form the simulation model represented by the {@link de.neemann.digital.core.Model} class. * This classes form the simulation model represented by the {@link de.neemann.digital.core.Model} class.
* Furthermore this representation is called the model.
* In the package draw.model you can find the class {@link de.neemann.digital.draw.model.ModelDescription}. * In the package draw.model you can find the class {@link de.neemann.digital.draw.model.ModelDescription}.
* This class takes a circuit represented by a Circuit instance and creates * This class takes a circuit represented by a Circuit instance and creates
* a Model instance representation. * a Model instance representation.
* Some of the elements from the Circuit representation you can also find * Some of the elements out of the Circuit representation you can also find
* in the Model some you don't. So all the wires don't exist anymore in the * in the model, some you don't. So all the wires don't exist anymore in the
* Model. They are resolved and replaced by a simple Observable-Observer system. * model. They are resolved and replaced by a simple Observable-Observer pattern.
* Also all the inputs and outputs of the circuit and nested circuits don't exist in the * Also all the inputs and outputs of the circuit and nested circuits don't exist in the
* Model. They are also resolved and replaced by the Observable-Observer system. * model. They are also resolved and replaced by the Observable-Observer pattern.
* <p> * <p>
* The graphical representation (Circuit) is able to hold references to the * The graphical representation (Circuit) is able to hold references to the
* Model representation (Model). So the graphical representation is able to reflect the * model representation (Model). So the graphical representation is able to reflect the
* models actual state. But this is not necessary: The model can also be used without the graphical representation which * models actual state. But this is not necessary: The model can also be used without the
* it is derived from. * graphical representation which it is derived from.
* <p> * <p>
* The Model class also has the ability to run the model. Sometime there maybe will be * The model class also has the ability to run the model. Sometime there maybe will be
* an other simulation algorithm. Up to now there is only a very simple algorithm available. * an other simulation algorithm. Up to now there is only a very simple algorithm available.
* <p> * <p>
* The Model consists only of {@link de.neemann.digital.core.Node}s. This Nodes contain * The model consists only of {@link de.neemann.digital.core.Node}s. This nodes contain one or more
* {@link de.neemann.digital.core.ObservableValue} instances which represent the inputs and outputs of the nodes. * {@link de.neemann.digital.core.ObservableValue} instances which represent the inputs and outputs of the nodes.
* To the ObservableValue you can register a {@link de.neemann.digital.core.Observer} instances. Every Node implements the * To the ObservableValue you can register a {@link de.neemann.digital.core.Observer} instances. Every node
* Observer interface. So every Node can be notified on ObservableValue changes. * implements the Observer interface. So every node can be notified on a state change of a ObservableValue.
* <p> * <p>
* An Example: An AND gate with two inputs is registered to two * An example: An AND gate with two inputs is registered to two
* ObservableValues. So, if one of the input values changes, the AND gate gets a * ObservableValues. So, if one of the input values changes, the AND gate gets a
* notification. But the AND gate does not directly react on this notification. It only informs the * notification. But the AND gate does not directly react on this notification. It only informs the
* Model that there was a change at one of the inputs. If the model has collected all the * model that there was a change at one of the inputs. If the model has collected all the
* Nodes which had seen an input change, it asks all this Nodes * nodes which had seen an input change, it asks all this nodes
* to update their outputs. This causes new Nodes to inform the Model * to update their outputs. So it looks like all the gates react at the same time on an input change.
* <p>
* If the nodes update their outputs this causes new nodes to inform the model
* about changes and so on and so on. Every such iteration is called a micro step. * about changes and so on and so on. Every such iteration is called a micro step.
* If this iteration stops, the Model has stabilized again. Now the Model can handle a new * If this iteration stops because no new nodes have seen an input change, the model has stabilized again.
* clock change or a new user interaction. * Now the model can handle a new clock change or a new user interaction.
* *
* @author hneemann * @author hneemann
*/ */