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 font directement le travail. 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.
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é.
Entrée | Sortie |
---|---|
0 | 0 |
1 | 1 |
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;
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;
Entrée | Sortie |
---|---|
0 | 1 |
1 | 0 |
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;
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;
Entrée 1 | Entrée 2 | Sortie |
---|---|---|
0 | 0 | 0 |
1 | 0 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
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;
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;
Entrée 1 | Entrée 2 | Sortie |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
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;
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;
Entrée 1 | Entrée 2 | Sortie |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
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;
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;
Entrée 1 | Entrée 2 | Sortie |
---|---|---|
0 | 0 | 1 |
1 | 0 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
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;
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;
Entrée 1 | Entrée 2 | Sortie |
---|---|---|
0 | 0 | 1 |
1 | 0 | 0 |
1 | 0 | 0 |
1 | 1 | 0 |
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
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;