Digitale Schaltungen - Simulation


Simuliert werden soll folgende Schaltung:

Das ist die erste kaum vereinfachte Schaltung für einen Zähler von 0 bis 5.
Die Vereinfachung wurde bewußt weggelassen, um mehrere logische Funktionen zu simulieren.

 

Dazu nun folgendes Programm:


<html>

<head>
<title>Rüdiger Rennert/Simulation Zähler 0 bis 5</title>
</head>

<body>
<dl><dd>
<font size=+1>Test Zähler 0 bis 5</font>
</dl>
<p><hr><p>
<dl><dd>
<b>Zähler in Aktion</b><br>
(das sind die neu berechneten Werte)
<p>

<?   // hier beginnt das php-Programm
//+++ Funktionen vereinbaren +++
function jk($j,$k,$qa)
{
//--- Fkt JK-Flip-Flop ---
$q=$qa;
if($j==1 and $k==0)$q=1;
if($j==0 and $k==1)$q=0;
if($j==1 and $k==1)
{
if($qa==0)$q=1;
else $q=0;
}
return $q;
}

function and2($e1,$e2)
{
//--- Fkt AND mit 2 Eingaengen ---
$a=0;
if($e1==1 and $e2==1)$a=1;
return $a;
}

function or2($e1,$e2)
{
//--- Fkt OR mit 2 Eingaengen ---
$a=1;
if($e1==0 and $e2==0)$a=0;
return $a;
}

function neg($e)
{
//--- Fkt Negation ---
if($e==0)$a=1;
else $a=0;
return $a;
}

//+++ Bearbeitung ++++++++++++++++++++++++++++++++++++++++
//--- Uebernahme / Bearbeitung Parameter Q0, Q1 und Q2 ---
$q0a=$_REQUEST["q0"];
$q1a=$_REQUEST["q1"];
$q2a=$_REQUEST["q2"];

If($q0a=="")$q0a=0;
If($q1a=="")$q1a=0;
If($q2a=="")$q2a=0;

$q2an=neg($q2a);

//--- Formular mit Uebergabe Werte organisieren -------
echo "<form action=\"/dig/z5_t1.php\" method=\"GET\">";

//-- neuen Zustand fuer Q0 ermitteln und ausgeben --
$q0=jk(1,1,$q0a);
echo "J0=1 K0=1 Q0=$q0<br>";

//-- neuen Zustand fuer Q1 ermitteln und ausgeben --
$j1=and2($q2an,$q0a);
$k1=or2($q2a,$q0a);
$q1=jk($j1,$k1,$q1a);
echo "J1=$j1 K1=$k1 Q1=$q1<br>";

//-- neuen Zustand fuer Q2 ermitteln und ausgeben --
$j2=and2($q1a,$q0a);
$k2=or2($q1a,$q0a);
$q2=jk($j2,$k2,$q2a);
echo "J2=$j2 K2=$k2 Q2=$q2<p>";

//-- Dezimalwert ermitteln und ausgeben --
$sum=$q2*4 + $q1*2 + $q0;
echo "<b>$q2 $q1 $q0 = $sum</b><br>";

//-- berechn. Werte als Parameter fuer dieser Seite --
echo "<input type=\"hidden\" name=\"q0\" value=\"$q0\">";
echo "<input type=\"hidden\" name=\"q1\" value=\"$q1\">";
echo "<input type=\"hidden\" name=\"q2\" value=\"$q2\">";
echo "<p>";
echo "<input type=\"submit\" value=\"ok\">";

echo "</form>";   // Formular-Ende
?>   // hier endet das php-Programm

</dl>
</body>
</html>


Kurze Beschreibung zum Programmiersystem unter php Nutzung

Der erste ganz wichtige Unterschied zur üblichen html-Seite ist die Erweiterung des Dateinamens durch ".php".
Der Aufbau und die Schreibweise der Datei entspricht dann im Weiteren einer ganz normalen html-Seite. Wahrscheinlich ist die Änderung notwendig, um die Datei in den Interpreter zu schieben. Irgendwann erscheint dann im Skript der "Tag" "<?" und nun wird das folgende als php-Programm interpretiert, es muss nun diesen Regeln entsprechen!

Im Beispiel werden nun als erstes Funktionen definiert. Als erstes eine Funktion, die die Arbeitsweise des JK-Flip-Flops simuliert. Da kein Objekt benutzt wird, muss immer der alte Zustand des FF, also Q mit angegeben werden (deshalb 3 Parameter).
php kann aber auch Objekte generieren, macht aber keinen Sinn, da die Lebensdauer der Objekte nur auf eine Seite beschränkt ist und eine neue Darstellung der gleichen Seite eben auch eine neue Seite ist.

Es kann jetzt keine Beschreibung des php-Systems gegeben werden, muss man nachlesen, nur soviel, Variable werden nicht definiert und werden immer mit "$" begonnen. Vergleiche brauchen immer zwei "=". Es werden die 4 Fälle abgefragt und der Ausgabewert ermittelt (nur q, da die Funktion nur einen Wert zurück geben kann). Die Funktion wird hier nur definiert nicht bearbeitet, es fehlen die Werte j, k und qa, die werden erst später mit $_REQUEST ermittelt.
Als weitere Funktionen gibt es noch eine zur Realisierung eines UND-Gatters, eine für ein ODER-Gatter und eine für die Negation.
Die Parameter in den Funktionen sind formal (symbolisch), ihnen wird bei Aufruf erst ein Wert zugewiesen. Das ist der große Vorteil, man nutzt für alle Anwendungen immer die gleiche Funktion, sie wird an den Fall angepasst, das spart Schreibarbeit.
Die Vereinbarung der Funktionen kann an beliebiger Stelle im Programm erfolgen!

Dann gehts los
mit den Befehlen "$_REQUEST" werden die drei übergebenen Q-Werte geholt und dann aber auf Speicherplätzen q0a, q1a und q2a abgelagert. mit den Werten werden die neuen Zustände erarbeitet aber nun auf q0, q1 und q2 gespeichert, damit bleiben die alten Werte erhalten, so sollen die FFs ja auch funktionieren.
Die Eingänge werden genau wie es die Schaltung vorsieht mit AND und OR ermittelt, danach kann dann die FF-Fkt aufgerufen werden. Das geht auch noch kürzer, indem die AND und OR-Fkt direkt als Parameter in die FF-Fkt geschrieben werden, es wird aber unübersichtlicher (php kann eben als Parameter in Funktionen auch Funktionen nutzen und die natürlich auch wieder usw.).
Mit dem "Tag" "<Form...>" wird in dem Teil action die aufzurufende Datei festgelegt (kann mit Protokoll, Adresse, Pfad und Datei erfolgen).
Der zweite Teil method legt fest, wie die Parameter übertragen werden, in diesem Fall mit GET, bedeutet, dass die Parameter an die Adresse der WWW-Seite sichtbar angehängt werden (die Parameter werden mit ? eingeleitet). Verwendet man hingegen POST (anstelle von GET), dann werden die Parameter nicht sichtbar übertragen, ist z.B. für Passwörter sehr sinnvoll. In diesem Fall ist natürlich GET sinnvoll, da man ja die Parameter, die berechneten Werte, sehen will.
Die Zeichenfolge \" bedeutet, dass das Zeichen hinter \ keine Funktion hat, denn html erwartet an dieser Stelle ein ", php würde dies jedoch als Befehlsende interpretieren, was natürlich falsch ist und eine Fehlerausschrift bewirkt.
Die Zeichenfolge // bewirkt, dass von da an die Zeile als Kommentar betrachtet wird (wird nicht interpretiert).

Am Ende des php-Teils werden dann die neuen q-Werte mit den "hidden-inputs" als Parameter bereitgestellt und bei Betätigung des "Submit-Bottoms" an die in "<Form...>" vereinbarte Adresse angehängt, die Seite wird erneut gestartet.
Werden keine Parameter anghängt (beim ersten Start) machen die "if-Befehle" hinter dem REQUEST daraus eine 0.
Mit "?>" wird dann der php-Teil beendet. Es ist auch möglich zwischendurch php zu beenden und wieder nur mit html zu arbeiten, z.B. könnte man Ausgaben so realisieren. Das geht in diesem Fall nicht, da bei der Ausgabe auf Variable zugegriffen wird. Aber auch wenn php geschlossen wird, kann man beim erneuten Öffnen auf die alten Werte der Variablen zugreifen. Mit der Eröffnung der php-Seite wird eine Umgebung definiert und auf diese kann man in der "Lebensdauer" der Seite immer zugreifen, eben auch auf die definierten Variablen.

Das Programm kann man unter der Adresse:

Zähler von 0 bis 5 (1.Var.)

getestet werden!