",$def); } function dos($def) { gate(sprintf("dos=%s",preg_replace("/ /","+",$def))); } function lines($def) { printf("",$def); } function texts($def) { printf("",$def); } function non() { gate("texts=1&in=1&inv=1"); } function et() { gate("texts=%26&in=2&inv=0"); } function et3() { gate("texts=%26&in=3&inv=0"); } function ou() { gate("texts=%1b1&in=2&inv=0"); } function net() { gate("texts=%26&in=2&inv=1"); } function nou() { gate("texts=%1b1&in=2&inv=1"); } function eq() { gate("texts=%3d1&in=2&inv=0"); } function neq() { gate("texts=%3d1&in=2&inv=1"); } function mem() { gate("in=2&texts=mem,4,4.s,1,1.c,1,5.o,7,3&inv=0"); } function latch() { gate("in=2&texts=mem,4,4.i,1,1.l,1,5.o,7,3&inv=0"); } function dlatch() { gate("in=2&texts=mem,4,4.i,1,1.k,1,5.o,7,3&inv=0&lines=2,5;3,6;2,7"); } function compteur($bitCount) { //gate(sprintf("in=2&texts=cpt,4,4.%d,1,1.%d,7,5&inv=0&lines=2,5;3,6;2,7.0,3;2,3.0,1;1,4.6,3;8,3.7,2;8,5",$bitCount,$bitCount)); dos(sprintf("rectangle 2 1 4 6;line 0 6 2 6;center cpt 4 4;center %d 7 5;line 2 5 3 6 2 7;line 6 3 8 3;line 6 4 8 4;line 7 2 8 5",$bitCount)); } function br() { printf("
"); } function logique_table($ins,$outs,$equs) { $size=count($ins); foreach($ins as $in) eval("\$" . $in . "=0;"); printf(""); printf(""); foreach($ins as $in) printf("",$in); foreach($outs as $out) { printf("",$out); } printf(""); while(1) { eval($equs); printf(""); foreach($ins as $in) { eval("\$i = \$" . $in . ";"); printf("",$i); } foreach($outs as $out) { eval("\$o = \$" . $out . ";"); printf("",$o); } printf(""); $carry=1; foreach($ins as $in) { eval("\$i = \$" . $in . ";"); $i+=$carry; if($i>=2) { $i=0; $carry=1; } else $carry=0; eval("\$" . $in . "=\$i;"); } if($carry) break; } printf("
%s%s
%d%d
"); } function gateChap($text,$gate,$ins,$out) { printf("
%s
",$text); printf(""); printf("",$gate); printf(""); printf("
"); logique_table($ins,array("o"),$out); printf("
"); } ?>
Pour faire de l'informatique il faut un truc qui transporte de l'information.
On appelle ça le bit.
Le bit à deux états (si il en avait moins il ne pourrait pas porter de l'information).
On note 0 le premier état, et 1 le deuxième.
Le 0 est represente les valeurs fausses.
Le 1 est represente les valeurs vraies.
Porter l'information ne suffit pas, il faut la manipuler, pour ça il y a la logique.

La logique c'est, par exemple, exprimer "si A alors B"

un peu de mémoire
si set passe à 1, out devient 1 et ne peut plus redescendre
pour redescendre out, il faut ouvrir la boucle
par example en appliquant 1 à clr sur le schemas ci-dessous

soit, avec l'algèbre de Morgan ( (!a&&!b) <=> !(a||b) ):
une cellule memoire asynchrone
si i0 et i1 sont à 1, _q0 et _q1 passent à 1
si i0 et i1 sont à 0, _q0 et _q1 gardent leurs états
si i0 = 0 et i1 = 1, _q0 ppv 1 et _q1 ppv 0
si i0 = 1 et i1 = 0, _q0 ppv 0 et _q1 ppv 1

mettons tous ça dans une boîte ,
avec s à la place de i0, c à la place de i1, o à la place de _q1 :

un verrou maintenant (latch),
si l = 0 alors s = c = 0 soit out est memorisé
si l = 1 alors s = in et c = !in soit out = in

dans une boîte !

une bascule (d latch),

dans une boîte !

un compteur 2 bits synchrone,

dans une boîte !

un compteur 3 bits synchrone,
d'une manière générale, i(n)=o(n) ^ (& i(n+1 ... N-1))

dans une boîte !

à vous de jouer (mozilla, firefox seulement)