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 Latch
  • Les 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 ci-dessous avec la bascule D :

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

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.

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éeintialiser 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 :