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é. Sommaire masquer 1 Introduction 1.1 Quelle est la différence entre une bascule et une porte logique ? 2 La porte OUI 2.1 A) Programme avec If 2.2 B) Programme avec When 2.3 C) Simulation de la porte OUI : 3 La porte NON 3.1 A) Programme avec If 3.2 B) Programme avec When 3.3 C) Simulation de la porte NON 4 La porte ET 4.1 A) Programme avec If 4.2 B) Programme avec When 4.3 C) Simulation de la porte ET 5 La porte OU (OR) 5.1 A) Programme avec If 5.2 B) Programme avec When 5.3 C) Simulation de la porte OU 6 La porte OU Exclusif (XOR) 6.1 A) Programme avec If 6.2 B) Programme avec When 6.3 C) Simulation de la porte Ou Exclusif 7 La porte NON-ET (NAND) 7.1 A) Programme avec If 7.2 B) Programme avec When 7.3 C) Simulation de la porte NAND 8 La porte NON-OU (NOR) 8.1 A) Programme avec If 8.2 B) Programme avec When 8.3 C) Simulation de la porte NOR La porte OUI Entrée Sortie0011 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 Sortie0110 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 2Sortie000100100111 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 2Sortie000101101111 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 2Sortie000101101110 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 2Sortie001101101110 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 2Sortie001100100110 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