Réalisez un décompteur asynchrone modulo 5 avec de...
Creado el: 24 de abril de 2025
Creado el: 24 de abril de 2025
Réalisez un décompteur asynchrone modulo 5 avec des bascules JK.
À l'état initial, les sorties du compteur sont à 0. Tracez le chronogramme des sorties du décompteur.
fait le en latex pour que je puisse le copié collé sur overleaf stp
Voici un « copier/coller » complet, autonome, prêt pour Overleaf.
Il contient :
latex%======================================================== % Décompteur asynchrone modulo 5 (bascules JK) % Auteur : … (votre nom) %======================================================== \documentclass[border=10pt]{standalone} % --- Packages graphiques --- \usepackage{tikz} \usetikzlibrary{positioning,arrows.meta} \usepackage{circuitikz} % bascules JK et logique \usepackage{tikz-timing} % chronogramme \begin{document} %-------------------------------------------------------- % 1. Table d’états (binaire ↓, décimal ↓) %-------------------------------------------------------- $$ \begin{array}{c|c} \text{États} & Q_2\,Q_1\,Q_0 \\ \hline 0 & 0\,0\,0\\ 4 & 1\,0\,0\\ 3 & 0\,1\,1\\ 2 & 0\,1\,0\\ 1 & 0\,0\,1\\ \text{(retour)} & 0\,0\,0 \end{array} $$ \vspace{1em} %-------------------------------------------------------- % 2. Schéma fonctionnel (compteur asynchrone) %-------------------------------------------------------- \begin{circuitikz}[scale=1, every node/.style={font=\small}] \ctikzset{flipflop width=1.4cm, flipflop height=1.4cm} % Bascules (MSB en haut) \node[flipflop JK](FF2){$J$ \\[2pt] $K$}; \node[flipflop JK, below=1.9cm of FF2](FF1){}; \node[flipflop JK, below=1.9cm of FF1](FF0){}; % Noms des sorties \node[right=0.8cm of FF2.Q] (Q2) {$Q_2$}; \node[right=0.8cm of FF1.Q] (Q1) {$Q_1$}; \node[right=0.8cm of FF0.Q] (Q0) {$Q_0$}; % Horloge externe \draw[-Latex] (-2,0) node[left]{CLK} -- (FF0.C); % Chaînage asynchrone (ripple) \draw[-Latex] (FF0.Q) |- (FF1.C); \draw[-Latex] (FF1.Q) |- (FF2.C); % Mode toggle : J=K=1 \foreach \ff in {FF0,FF1,FF2}{ \draw (\ff.J) -- +(-0.6,0) node[left]{1}; \draw (\ff.K) -- +(-0.6,0) node[left]{1}; } %---------------------------------------------------- % Détection de l’état 111 puis remise asynchrone à 100 %---------------------------------------------------- \node[nand gate, draw, rotate=90, right=3cm of FF1](NAND){}; \draw (FF2.Q) -- ++(0.5,0) -- (NAND.input 1); \draw (FF1.Q) -- ++(0.5,0) |- (NAND.input 2); \draw (FF0.Q) -- ++(0.5,0) |- (NAND.input 3); % Sortie du NAND = \bar{(Q2·Q1·Q0)} (0 active) \coordinate (nando) at (NAND.output); % Asynchrone : /PRE de FF2, /CLR de FF1 et FF0 (actifs bas) \draw[-Latex] (nando) -- ++(1,0) |- (FF2.P); \draw[-Latex] (nando) |- (FF1.R); \draw[-Latex] (nando) |- (FF0.R); % Légende \node[below=0.4cm of FF0] (legend){% \shortstack{\scriptsize Quand l’état naturel du compteur devient 111,\\ la sortie du NAND passe à 0 $\Rightarrow$ \\[-1pt]$Q_2$ est présé à 1 et $Q_1,Q_0$ sont remis à 0 \\[-1pt]$\Rightarrow$ on force l’état 100 et l’enchaînement \\ 4 → 3 → 2 → 1 → 0 → 4… }% }; \end{circuitikz} \vspace{1em} %-------------------------------------------------------- % 3. Chronogramme (6 périodes pour montrer le retour) %-------------------------------------------------------- \begin{tikztimingtable}[% timing/wscale = 1.4, timing/coldist = 1.5pt, timing/rowdist = 1.4ex] CLK & 6{C}\\ $Q_2$ & L H L L L L\\ $Q_1$ & L L H H L L\\ $Q_0$ & L L H L H L\\ \extracode % Noms de périodes (0 → 4 → 3 → 2 → 1 → 0) \draw[gray,|<->|] (0,-.95) -- ++(1.4,0) node[midway,below]{\footnotesize état 0}; \draw[gray,|<->|] (1.4,-.95) -- ++(1.4,0) node[midway,below]{\footnotesize 4}; \draw[gray,|<->|] (2.8,-.95) -- ++(1.4,0) node[midway,below]{\footnotesize 3}; \draw[gray,|<->|] (4.2,-.95) -- ++(1.4,0) node[midway,below]{\footnotesize 2}; \draw[gray,|<->|] (5.6,-.95) -- ++(1.4,0) node[midway,below]{\footnotesize 1}; \end{tikztimingtable} \end{document}
.tex
sur Overleaf.circuitikz
et tikz-timing
sont bien disponibles (ils le sont par défaut sur l’installation TeX Live d’Overleaf).N’hésitez pas si vous souhaitez des ajustements (autre style de chronogramme, légende différente, etc.).
Voici un chronogramme “dessin à la main” qui reprend exactement l’esprit de ton croquis :
l’horloge en haut, puis , et avec les retards dus au décompteur asynchrone.
Les flèches épaisses indiquent les fronts qui se propagent d’une bascule à la suivante ;
les pointillés gris matérialisent les limites d’une période de l’horloge.
Copie-colle simplement le code dans Overleaf : il ne dépend que de
tikz
.
latex%-------------------------------------------------------- % Chronogramme d’un décompteur asynchrone modulo 5 % (3 bascules JK en cascade – style esquisse) %-------------------------------------------------------- \documentclass[tikz,border=10pt]{standalone} \begin{document} \begin{tikzpicture}[x=1.1cm,y=0.8cm,>=Latex] % ==================================================== % Réglages rapides \def\vh{0.8} % hauteur créneaux \def\td{0.15} % petit retard de propagation % ==================================================== % 1) Traits verticaux pointillés (fronts de CLK) \foreach \x in {1,...,5}{ \draw[dashed,gray] (\x,1.1) -- (\x,-3.9); } % 2) Légendes des signaux \node[left] at (0,0.9) {CLK}; \node[left] at (0,-0.5) {$Q_0$}; \node[left] at (0,-1.7) {$Q_1$}; \node[left] at (0,-2.9) {$Q_2$}; % 3) Horloge (niveau haut = ½ période) \draw (0,0) -- (0, \vh) -- (0.5,\vh) -- (0.5,0) -- (1,0) -- (1,\vh) -- (1.5,\vh) -- (1.5,0) -- (2,0) -- (2,\vh) -- (2.5,\vh) -- (2.5,0) -- (3,0) -- (3,\vh) -- (3.5,\vh) -- (3.5,0) -- (4,0) -- (4,\vh) -- (4.5,\vh) -- (4.5,0) -- (5,0) -- (5,\vh) -- (5.5,\vh) -- (5.5,0) -- (6,0); % 4) Q0 : toggle à chaque front descendant de CLK (retard = δ) \begin{scope}[yshift=-1.2cm] \def\low{0} \def\high{\vh} \draw (0,\low) -- (\td,\low) -- (\td,\high) -- (0.5+\td,\high) -- (0.5+\td,\low) -- (1+\td,\low) -- (1+\td,\high) -- (1.5+\td,\high) -- (1.5+\td,\low) -- (2+\td,\low) -- (2+\td,\high) -- (2.5+\td,\high) -- (2.5+\td,\low) -- (3+\td,\low) -- (3+\td,\high) -- (3.5+\td,\high) -- (3.5+\td,\low) -- (4+\td,\low) -- (4+\td,\high) -- (4.5+\td,\high) -- (4.5+\td,\low) -- (5+\td,\low); \end{scope} % 5) Q1 : toggle sur les fronts de Q0 (retard supplémentaire) \begin{scope}[yshift=-2.4cm] \def\low{0} \def\high{\vh} \draw (0,\low) -- (0.5+\td,\low) -- (0.5+\td,\high) -- (1.5+\td,\high) -- (1.5+\td,\low) -- (2.5+\td,\low) -- (2.5+\td,\high) -- (3.5+\td,\high) -- (3.5+\td,\low) -- (4.5+\td,\low); \end{scope} % 6) Q2 : toggle sur les fronts de Q1 (retard supplémentaire) \begin{scope}[yshift=-3.6cm] \def\low{0} \def\high{\vh} \draw (0,\low) -- (1.5+\td,\low) -- (1.5+\td,\high) -- (3.5+\td,\high) -- (3.5+\td,\low); \end{scope} % 7) Flèches épaisses = propagation des fronts \draw[very thick,->] (\td, 0.85) -- (\td,-0.35); % CLK → Q0 \draw[very thick,->] (0.5+\td,-0.35) -- (0.5+\td,-1.55); % Q0 → Q1 \draw[very thick,->] (1.5+\td,-1.55) -- (1.5+\td,-2.75); % Q1 → Q2 \end{tikzpicture} \end{document}
Teste‐le ; ajuste la valeur de \td
si tu veux un retard plus ou moins prononcé, ou change le nombre de périodes en prolongeant la partie horloge.