Introduction

Dans ce cours on va voir les différentes portes logiques et leurs programmations en VHDL.

En VHDL vous avez des mots clés AND, OR,NAND qui peuvent être appelé directement dans votre programme. Néanmoins dans ce cours nous avons décidé de les ré-écrire par nous même en partant de la table de vérité.

On propose deux programmes pour chaque porte avec la simulation qui vérifie la table de vérité. Tous les programmes sont écrit en flot de données : on écrit explicitement les fonctions booléennes que l’on veut voir implémentées.

Quelle est la différence entre une bascule et une porte logique ?

Ce qui différencie les bascules des portes logiques c’est que la sortie maintient l’état de la bascule même après disparition du signal de commande. L’état précédent est mémorisé.

La porte OUI

Entrée Sortie
0

0

11

A) Programme avec If

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
entity porte_logique is
port (entree: in std_logic;
sortie : buffer std_logic);
end porte_logique;

architecture porte_OUI of porte_logique is
begin
process (entree, sortie)
begin
  if (entree = '0') then
    sortie <= '0';
  end if;
  if (entree = '1') then
    sortie <= '1';
  end if;
end process;
end porte_OUI;

B) Programme avec When

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
entity porte_logique is
port (entree: in std_logic;
sortie : buffer std_logic);
end porte_logique;
architecture porte_OUI of porte_logique is
begin
sortie <= '1' when (entree = '1') else '0';
end porte_OUI;

C) Simulation de la porte OUI :

La porte NON

Entrée Sortie
01
10

A) Programme avec If

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
entity porte_logique is
port (entree: in std_logic;
sortie : buffer std_logic);
end porte_logique;

architecture porte_NON of porte_logique is
begin
process (entree, sortie)
begin
  if (entree = '0') then
    sortie <= '1';
  end if;
  if (entree = '1') then
    sortie <= '0';
  end if;
end process;
end porte_NON;

B) Programme avec When

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
entity porte_logique is
port (entree: in std_logic;
sortie : buffer std_logic);
end porte_logique;
architecture porte_NON of porte_logique is
begin
sortie <= '1' when (entrees = "0") else '0';
end porte_NON;

C) Simulation de la porte NON

La porte ET

 

Entrée 1Entrée 2Sortie
000
100
100
111

A) Programme avec If

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
entity porte_logique is
port (entree_1, entree_2: in std_logic;
sortie : buffer std_logic);
end porte_logique;

architecture porte_ET of porte_logique is
begin
process (entree_1, entree_2, sortie)
begin
  if (entree_1 = '0' AND entree_2 = '0') then
    sortie <= '0';
  end if;
  if (entree_1 = '1' AND entree_2 = '0') then
    sortie <= '0';
  end if;
  if (entree_1 = '0' AND entree_2 = '1') then
    sortie <= '0';
  end if;
   if (entree_1 = '1' AND entree_2 = '1') then
    sortie <= '1';
  end if;
end process;
end porte_ET;

B) Programme avec When

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
entity porte_logique is
port (entree_1, entree_2: in std_logic;
sortie : out std_logic);
end porte_logique;
architecture porte_ET of porte_logique is
signal entrees : std_logic_vector(1 to 2);
begin
entrees <= entree_1 & entree_2;
sortie <= '1' when (entrees = "11") else '0';
end porte_ET;

C) Simulation de la porte ET

La porte OU (OR)

Entrée 1Entrée 2Sortie
000
101
101
111

A) Programme avec If

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
entity porte_logique is
port (entree_1, entree_2: in std_logic;
sortie : out std_logic);
end porte_logique;
architecture porte_OU of porte_logique is
signal entrees : std_logic_vector(1 to 2);
begin
entrees <= entree_1 & entree_2;
sortie <= '0' when (entrees = "00") else '1';
end porte_OU;

B) Programme avec When

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
entity porte_logique is
port (entree_1, entree_2: in std_logic;
sortie : buffer std_logic);
end porte_logique;

architecture porte_OU of porte_logique is
begin
process (entree_1, entree_2, sortie)
begin
  if (entree_1 = '0' AND entree_2 = '0') then
    sortie <= '0';
  end if;
  if (entree_1 = '1' AND entree_2 = '0') then
    sortie <= '1';
  end if;
  if (entree_1 = '0' AND entree_2 = '1') then
    sortie <= '1';
  end if;
   if (entree_1 = '1' AND entree_2 = '1') then
    sortie <= '1';
  end if;
end process;
end porte_OU;

C) Simulation de la porte OU

La porte OU Exclusif (XOR)

Entrée 1Entrée 2Sortie
000
101
101
110

A) Programme avec If

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
entity porte_logique is
port (entree_1, entree_2: in std_logic;
sortie : buffer std_logic);
end porte_logique;

architecture porte_XOR of porte_logique is
begin
process (entree_1, entree_2, sortie)
begin
  if (entree_1 = '0' AND entree_2 = '0') then
    sortie <= '0';
  end if;
  if (entree_1 = '1' AND entree_2 = '0') then
    sortie <= '1';
  end if;
  if (entree_1 = '0' AND entree_2 = '1') then
    sortie <= '1';
  end if;
   if (entree_1 = '1' AND entree_2 = '1') then
    sortie <= '0';
  end if;
end process;
end porte_XOR;

B) Programme avec When

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
entity porte_logique is
port (entree_1, entree_2: in std_logic;
sortie : out std_logic);
end porte_logique;
architecture porte_XOR of porte_logique is
signal entrees : std_logic_vector(1 to 2);
begin
entrees <= entree_1 & entree_2;
sortie <= '0' when ((entrees = "00") OR (entrees = "11")) else '1';
end porte_XOR;

C) Simulation de la porte Ou Exclusif

La porte NON-ET (NAND)

Entrée 1Entrée 2Sortie
001
101
101
110

A) Programme avec If

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
entity porte_logique is
port (entree_1, entree_2: in std_logic;
sortie : buffer std_logic);
end porte_logique;

architecture porte_NAND of porte_logique is
begin
process (entree_1, entree_2, sortie)
begin
  if (entree_1 = '0' AND entree_2 = '0') then
    sortie <= '1';
  end if;
  if (entree_1 = '1' AND entree_2 = '0') then
    sortie <= '1';
  end if;
  if (entree_1 = '0' AND entree_2 = '1') then
    sortie <= '1';
  end if;
   if (entree_1 = '1' AND entree_2 = '1') then
    sortie <= '0';
  end if;
end process;
end porte_NAND;

B) Programme avec When

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
entity porte_logique is
port (entree_1, entree_2: in std_logic;
sortie : buffer std_logic);
end porte_logique;
architecture porte_NAND of porte_logique is
signal entrees : std_logic_vector(1 to 2);
begin
entrees <= entree_1 & entree_2;
sortie <= '0' when (entrees = "11") else '1';
end porte_NAND;

C) Simulation de la porte NAND

La porte NON-OU (NOR)

Entrée 1Entrée 2Sortie
001
100
100
110

A) Programme avec If

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
entity porte_logique is
port (entree_1, entree_2: in std_logic;
sortie : out std_logic);
end  porte_logique;
architecture porte_NOR porte_logique is
begin
if (entree_1="0" AND entree_2="0") then
      sortie <= '0';
    end if;
if (entree_1="1" AND entree_2="0") then
      sortie <= '1';
    end if;
if (entree_1="0" AND entree_2="1") then
      sortie <= '1';
    end if;
if (entree_1="1" AND entree_2="1") then
      sortie <= '0';
    end if;
end porte_NOR

B) Programme avec When

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
entity porte_logique is
port (entree_1, entree_2: in std_logic;
sortie : buffer std_logic);
end porte_logique;
architecture porte_NOR of porte_logique is
signal entrees : std_logic_vector(1 to 2);
begin
entrees <= entree_1 & entree_2;
sortie <= '0' when ((entrees = "11") OR (entrees="00")) else '1';
end porte_NOR;

C) Simulation de la porte NOR