Introduction Une bascule est un circuit logique capable de maintenir les valeurs de ses sorties indépendement des changements de valeurs d’entrées, c’est-à-dire comportant un état « mémoire ». Il s’agit de l’élément qui permet le passage de la logique combinatoire à la logique séquentielle.Il y a plusieurs types de bascules : Astable, Bistable et Monostable. Astable : C’est une bascule comportant 2 états instableset qui bascule périodiquement (période T) et spontanément d’un étatà l’autre.Bistable : Qui possède deux états stables. En logique ceci se traduit par les états logiques “1” ou “0”.Monostable: Qui possède un seul état stable, l’autre état est temporaire.Il y a deux types de bascules : asynchrones et synchrones. Les bascules synchrones possèdent une entrée Horloge ce qui n’est pas le cas pour les bascules asynchrones.Les bascules asynchrones– La bascule RS– La bascule D LatchLes bascules synchrones– La bascule D– La bascule JK Quelle est la différence entre une bascule et une porte logique ? Une bascule est un circuit logique capable de maintenir les valeurs de ses sorties indépendement des changements de valeurs d’entrées, c’est-à-dire comportant un état « mémoire ». Il s’agit de l’élément qui permet le passage de la logique combinatoire à la logique séquentielle. Une bascule est souvent composé de plusieurs portes logiques. En voici un exemple avec la bascule D : Quelle est la différence entre une bascule et un verrou (latch) ? La majeur différente entre une bascule et un verrou est que la bascule vérifie les entrées mais ne modifie la sortie qu’aux moments définis par le signal d’horloge ou tout autre signal de commande alors que le verrou vérifie les entrées en permanence et répond immédiatement aux changements d’entrées. Sommaire masquer 1 Introduction 1.1 Quelle est la différence entre une bascule et une porte logique ? 1.2 Quelle est la différence entre une bascule et un verrou (latch) ? 2 Bascule D 2.1 Comment fonctionne la bascule D ? 3 Bascule JK Bascule D On va maintenant voir une bascule D avec remise à niveau asynchrone. Pour cela on va utiliser une entrée data pour les données que vous souhaitez communiquer.On a besoin d’une horloge (clk) car c’est une bascule synchrone. Enfin la fonction reset de faire passer les données de d vers q ou bien de réinitialiser la bascule. Comment fonctionne la bascule D ? Si le reset est à 1, alors la sortie q prend la valeur de 0.Si le reset est à 0, alors on transmet la valeur venant de d avec q à chaque coup d’horloge. LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY bascule_D IS PORT (d, clk, rst: IN STD_LOGIC; q: OUT STD_LOGIC); END bascule_D; ARCHITECTURE comportement OF bascule_D IS BEGIN PROCESS (clk, rst) BEGIN IF (rst='1') THEN q <= '0'; ELSIF (clk'EVENT AND clk='1') THEN q <= d; END IF; END PROCESS; END comportement; Voici le résultat en simulation : 1er coup d’horloge : La clock est à l’état haut, le reset aussi donc le signal d’entrée d ne peut pas passer dans le signal de sortie q. Bascule JK La bascule JK représente un type de bascule bistable, ce qui signifie qu’elle a deux états stables distincts. Son nom, “JK”, provient des lettres associées à ses principaux ports d’entrée : J et K.Lorsque J et K ont des valeurs différentes, la bascule JK change d’état selon une séquence bien définie. Si J est à l’état haut (1) et K à l’état bas (0), la bascule prendra l’état “SET” (1). Si J est à l’état bas (0) et K à l’état haut (1), la bascule prendra l’état “RESET” (0). Si J et K sont tous les deux à l’état haut (1), la bascule basculera, alternant entre les états à chaque impulsion de l’horloge. library ieee; use ieee.std_logic_1164.all; entity Bascule is port(J,K,Clk,Set, Reset : in std_logic; Q, Q_bar : out std_logic); end Bascule; architecture bascule_JK of Bascule is signal SIG : std_logic; signal JK : std_logic_vector (1 downto 0); begin JK(1) <= J; JK(0) <= K; process(Clk, Set, Reset) begin if (Reset = '0'and Set = '0') then SIG <= '0'; elsif (Reset = '0' and Set = '1') then Sig <= '0'; elsif (Reset ='1' and Set ='0') then Sig <='1'; elsif (Reset = '1' and Set ='1') then if (Clk'event and Clk ='0') then case JK is when "00" => SIG <= SIG; when "01" => SIG <= '0'; when "10" => SIG <= '1'; when "11" => SIG <= not SIG; when others => SIG <= '-'; end case; else SIG <= SIG; end if; end if; end process; Q <= SIG; Q_bar <= not SIG; end bascule_JK; Voici le résultat en simulation :