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.
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 ci-dessous avec la bascule D :
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
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.
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éeintialiser la bascule.
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.
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 :