Logique combinatoire

Documents pareils
Algèbre binaire et Circuits logiques ( )

T. BLOTIN Lycée Paul-Eluard SAINT-DENIS

SIN-FPGA DESCRIPTION PAR SCHEMA

IFT1215 Introduction aux systèmes informatiques

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Système binaire. Algèbre booléenne

Manipulations du laboratoire

Le langage VHDL. Eduardo Sanchez EPFL

Les portes logiques. Voici les symboles des trois fonctions de base. Portes AND. Portes OR. Porte NOT

Représentation d un entier en base b

2.4 Représentation graphique, tableau de Karnaugh

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

Logique binaire. Aujourd'hui, l'algèbre de Boole trouve de nombreuses applications en informatique et dans la conception des circuits électroniques.

QUESTION 1 {2 points}

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

USTL - Licence ST-A 1ère année Codage de l information TP 1 :

Les opérations binaires

Organisation des Ordinateurs

ASR1 TD7 : Un microprocesseur RISC 16 bits

Conversion d un entier. Méthode par soustraction

FONCTION COMPTAGE BINAIRE ET DIVISION DE FRÉQUENCE

Représentation des Nombres

Concevoir son microprocesseur

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Codage d information. Codage d information : -Définition-

Conception de circuits numériques et architecture des ordinateurs

IV- Comment fonctionne un ordinateur?

GPA770 Microélectronique appliquée Exercices série A

MPI Activité.10 : Logique binaire Portes logiques

Systemesdigitaux. Cours 5

Electronique Numérique

ELP 304 : Électronique Numérique. Cours 1 Introduction

3 ème 2 DÉVELOPPEMENT FACTORISATIONS ET IDENTITÉS REMARQUABLES 1/5 1 - Développements

Conception Systèmes numériques VHDL et synthèse automatique des circuits

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Cours Premier semestre

Cours Informatique 1. Monsieur SADOUNI Salheddine

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Architecture des ordinateurs

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

RESUME DE COURS ET CAHIER D'EXERCICES

Conception Systèmes numériques VHDL et synthèse automatique des circuits

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

V- Manipulations de nombres en binaire

Rappels d architecture

Architecture : Circuits numériques et éléments d architecture

CM2 L architecture MIPS32

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Série D65/D75/D72 Afficheurs digitaux modulaires

TP Contraintes - Triggers

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Les fonctions logiques

Logiciel de Base. I. Représentation des nombres

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

Conception de circuits numériques et architecture des ordinateurs

Informatique Générale

EMPLOI DU TEMPS du 4 ème SEMESTRE

TP 1 : 1 Calculs en binaire, octal et hexadécimal

Microprocesseur + Logiciel

Génie Logiciel avec Ada. 4 février 2013

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Jeu d instructions NIOS II

VIII- Circuits séquentiels. Mémoires

Le théorème de Thalès et sa réciproque

NIVEAU D'INTERVENTION DE LA PROGRAMMATION CONCURRENTE

Evaluation des performances de programmes parallèles haut niveau à base de squelettes

Architecture des ordinateurs Introduction à l informatique

Programmation assembleur : aperçu

BCI - TPSP - Processeurs et Architectures Numériques

Encoder Encoder 1 sur 15. Codification fil par étage 15 étages max. + 2 flèches + signal de mouvement. Raccordements 0.1 mm²...

République Tunisienne Ministère de l'education. Sciences Techniques. Manuel d activités. Les auteurs. Ali ZITOUNI Inspecteur des lycées et collèges

AC AB. A B C x 1. x + 1. d où. Avec un calcul vu au lycée, on démontre que cette solution admet deux solutions dont une seule nous intéresse : x =

Algorithmique et programmation : les bases (VBA) Corrigé

Une version javascript sera disponible directement dans le cours prochainement.

Chapitre 10 Arithmétique réelle

Acquisition et conditionnement de l information Les capteurs

Les liaisons SPI et I2C

Recherche dans un tableau

CODAGE DES SMS. 2 Commandes «AT» 25 3 Matériels utilisés 55 4 Interfacer un téléphone GSM 73 5 Réalisations électroniques 101

1 Introduction au codage

CORRIGE LES NOMBRES DECIMAUX RELATIFS. «Réfléchir avant d agir!»

Algorithmique des Systèmes Répartis Protocoles de Communications

Algorithmique et Programmation, IMA

Licence Sciences et Technologies Examen janvier 2010

Bases de programmation. Cours 5. Structurer les données

I- Définitions des signaux.

Plan. École Supérieure d Économie Électronique. Plan. Chap 9: Composants et systèmes de sécurité. Rhouma Rhouma. 21 Juillet 2014

Architecture Matérielle et Logicielle (LIF6) Cahier d'exercices, automne 2014

Exprimer ce coefficient de proportionnalité sous forme de pourcentage : 3,5 %

Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96

La conversion de données : Convertisseur Analogique Numérique (CAN) Convertisseur Numérique Analogique (CNA)

Master d'informatique 1ère année. Réseaux et protocoles. Architecture : les bases

TP 2 Réseaux. Adresses IP, routage et sous-réseaux

Initiation à LabView : Les exemples d applications :

Transcription:

ENSL1 : Electronique numérique et synthèse logique Logique combinatoire 1

Logique combinatoire et séquentielle : Soit le circuit : e 0 e 1 s 0 s m-1 e n-1 Ce circuit sera dit «combinatoire» si, à chaque fois qu on lui présente une même combinaison en entrée, il donnera toujours la même réponse en sortie. Il sera dit «séquentiel» si, une même combinaison en entrée, présentée à des instants différents, peut donner des réponses différentes en sortie. 2

Circuits combinatoires Décodeurs Binaire naturel binaire réfléchi Décodeur 2 4, 3 8, BCD 7 segments, Encodeurs Encodeur 4 2, 8 3, Encodeur de priorité Multiplexeur Multiplexeur 2 1, 4 1, Démultiplexeur Démultiplexeur 1 2, 1 4, Additionneur /Soustracteur Comparateur Unité Arithmétique et logique (A.L.U) 3

Méthode de conception d une fonction combinatoire Comment trouver le schéma (logigramme) correspondant à une fonction combinatoire que l on souhaite réaliser? 1/ 2/ 3/ 4/ 5/ Bien comprendre le problème posé. Faire le bilan des entrées et des sorties. Etablir la table de vérité correspondant au comportement de la fonction. Avec l aide (ou pas) de tableaux de Karnaugh, rechercher les équations simplifiées de toutes les sorties. Une fois les équations trouvées, établir le schéma. 4

Décodeur BN BR (Recherche du schéma) 1/ Bien comprendre le problème posé. trouver le schéma logique du circuit combinatoire qui génère une valeur de sortie en binaire réfléchie, correspondant à une valeur d entrée exprimée en binaire naturel 2/ Faire le bilan des entrées et des sorties. on définit pour cet exemple le format des valeurs d entrée/sortie à 3 bits ( la démarche est la même pour un autre format ) E2 S2 E1 S1 E0 S0 5

Décodeur BN BR (Recherche du schéma) 3/ Etablir la table de vérité E2 E1 E0 S2 S1 S0 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 0 0 0 0 0 1 0 1 1 0 1 0 1 1 0 1 1 1 1 0 1 1 0 0 4/ Recherche des équations des sorties équations évidentes (on exploite les particularités de la table) S2 = E2 S1 = E2 E1 S0 = E1 E0 6

Décodeur BN BR (Recherche du schéma) 5/ Etablir le schéma S2 = E2 S1 = E2 E1 S0 = E1 E0 E2 E1 E2 E1 XOR inst OUTPUT OUTPUT S2 S1 S2 S1 E0 E0 XOR inst2 OUTPUT S0 S0 7

Méthode de conception d une fonction combinatoire Comment décrire en VHDL la fonction combinatoire que l on souhaite réaliser? 1/ 2/ 3/ 4/ 5/ 6/ Bien comprendre le problème posé. Faire le bilan des entrées et des sorties. Ecrire la déclaration d entité. Etablir la table de vérité correspondant au comportement de la fonction. Si les équations sont simples, écrire la déclaration d architecture à l aide d affectations simples. Si les équations ne sont pas évidentes, décrire directement la table de vérité, dans l architecture à l aide d affectations conditionnelles ou sélectives. 8

Décodeur BN BR (Description VHDL) 1/ Bien comprendre le problème posé. trouver le schéma logique du circuit combinatoire qui génère une valeur de sortie en binaire réfléchie, correspondant à une valeur d entrée exprimée en binaire naturel 2/ Faire le bilan des entrées et des sorties. on définit pour cet exemple le format des valeurs d entrée/sortie à 3 bits ( la démarche est la même pour un autre format ) E2 S2 E1 S1 E0 S0 9

Décodeur BN BR (Description VHDL) 3/ Ecrire la déclaration d entité. E2 S2 E1 S1 E0 S0 entity bn_br is port ( E2,E1,E0 : in std_logic; S2,S1,S0 : out std_logic ); end bn_br; 10

Décodeur BN BR (Description VHDL) 4/ Etablir la table de vérité 5/ Si les équations sont simples, écrire la déclaration d architecture à l aide d affectations simples.» C est le cas E2 E1 E0 S2 S1 S0 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 0 0 0 0 0 1 0 1 1 0 1 0 1 1 0 1 1 1 1 0 1 1 0 0 S2 = E2 S1 = E2 E1 S0 = E1 E0 11

Décodeur BN BR (Description VHDL) (Description VHDL utilisant des affectations simples) S2 = E2 S1 = E2 E1 S0 = E1 E0 5/ Déclaration d architecture architecture bn_br_arch of bn_br is begin S2 <= E2; S1 <= E2 xor E1; S0 <= E1 xor E0; end bn_br_arch; 12

Décodeur BN BR (Description VHDL) 6/ Description complète du décodeur library ieee; use ieee.std_logic_1164.all; entity bn_br is port ( E2,E1,E0 : in std_logic; S2,S1,S0 : out std_logic ); end bn_br; architecture bn_br_arch1 of bn_br is begin S2 <= E2; S1 <= E2 xor E1; S0 <= E1 xor E0; end bn_br_arch1; 13

Décodeur BN BR (Description VHDL utilisant une affectation conditionnelle) 6/ Description faite directement à partir de la table de vérité : E2 E1 E0 S2 S1 S0 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 0 0 0 0 0 1 0 1 1 0 1 0 1 1 0 1 1 1 1 0 1 1 0 0 architecture bn_br_arch2 of bn_br is signal entree,sortie : std_logic_vector (2 downto 0); begin entree(2) <= E2; Ne pas oublier d initialiser les entree(1) <= E1; cases du tableau des entrées entree(0) <= E0; avant de l utiliser. sortie <= "000" when entree="000" else "001" when entree="001" else "011" when entree="010" else "010" when entree="011" else "110" when entree="100" else "111" when entree="101" else "101" when entree="110" else "100" ; S2 <= sortie(2); Ne pas oublier d affecter les S1 <= sortie(1); signaux de sorties avant de S0 <= sortie(0); fermer l architecture end bn_br_arch2; 14

Décodeur BN BR (Description VHDL utilisant une affectation sélective) 6/ Description faite directement à partir de la table de vérité : E2 E1 E0 S2 S1 S0 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 0 0 0 0 0 1 0 1 1 0 1 0 1 1 0 1 1 1 1 0 1 1 0 0 architecture bn_br_arch2 of bn_br is signal entree,sortie : std_logic_vector (2 downto 0); begin entree(2) <= E2; entree(1) <= E1; entree(0) <= E0; with entree select sortie <= "000" when "000", "001" when "001", "011" when "010", "010" when "011", "110" when "100", "111" when "101", "101" when "110", "100" when others; S2 <= sortie(2); S1 <= sortie(1); S0 <= sortie(0); end bn_br_arch2; 15

Décodeur 2 4, 3 8, (Recherche du schéma) 1/ Bien comprendre le problème posé. Un décodeur 2 4 est un circuit à 2 entrées et 4 sorties. Un décodeur 3 8 est un circuit à 3 entrées et 8 sorties. C est un circuit qui, a un instant donné, n a qu une seule sortie active, parmi les 4 ou les 8. C est la sortie dont l indice correspond à la valeur d entrée. L état actif d une sortie peut être l état 1 ou l état 0. 16

Décodeur 2 4 (Recherche du schéma) 2/ Faire le bilan des entrées et des sorties. Pour un décodeur 2 4, on a donc 2 entrées et 4 sorties ( on fait le choix d un état actif à 1 ) 0 1 01 S3 E1 S2 E0 S1 S0 01 10 1 0 1 0 17

Décodeur 2 4 (Recherche du schéma) 3/ Etablir la table de vérité E1 E0 S3 S2 S1 S0 0 0 0 1 1 0 1 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 4/ Recherche des équations des sorties équations évidentes S0 = E1.E0 S1 = E1.E0 S2 = E1.E0 S3 = E1.E0 18

Décodeur 2 4 (Recherche du schéma) 5/ Etablir le schéma S0 = E1.E0 S1 = E1.E0 S2 = E1.E0 S3 = E1.E0 E1 E0 E1 E0 NOT inst3 NOT inst AND2 inst4 AND2 inst5 OUTPUT OUTPUT S0 S1 S0 S1 AND2 inst6 OUTPUT S2 S2 AND2 inst7 OUTPUT S3 S3 19

Décodeur 2 4 (Description VHDL) 6/ Description complète du décodeur library ieee; use ieee.std_logic_1164.all; entity dec2_4 is port ( E1,E0 : in std_logic; S3,S2,S1,S0 : out std_logic ); end dec2_4; architecture dec2_4_arch1 _arch1 of dec2_4 is begin S3 <= E1 and E0; S2 <= E1 and (not E0); S1 <= (not E1) and E0; S0 <= (not E1) and (not E0); end dec2_4_arch1; _arch1; 20

Décodeur BCD 7 segments (Description VHDL) 1/ Bien comprendre le problème posé. Un décodeur BCD 7 segments est un circuit de commande d un afficheur 7 segments. Il génère en sortie les 7 signaux nécessaires à l affichage du symbole hexadécimal, correspondant à la valeur binaire d entrée comprise entre 0 et 15 2/ Faire le bilan des entrées et des sorties. Il possède 4 entrées (valeur binaire de 0 à 15), et 7 sorties commandant chacune les segments de l afficheur. 21

Décodeur BCD 7 segments (Description VHDL) 3/ Table de vérité. a b c d e f g E3 E2 E1 E0 S0 S1 S2 S3 S4 S5 S6 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 0 1 1 0 1 1 1 1 1 0 0 1 0 1 1 0 0 1 1 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 0 0 1 1 1 1 0 1 1 0 0 1 1 1 1 1 0 0 0 1 1 1 22

Décodeur BCD 7 segments Schéma interne ENSL1 23

Décodeur BCD 7 segments (Description VHDL) Description VHDL Déclaration d entité library ieee; use ieee.std_logic_1164.all; entity bcd_7seg is port ( E : in std_logic_vector (3 downto 0) ; S : out std_logic_vector (0 to 6) ); end bcd_7seg ; 24

Décodeur BCD 7 segments (Description VHDL) Déclaration d architecture (en utilisant une affectation conditionnelle) onnelle) 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 a b c d e f g E3 E2 E1 E0 S0 S1 S2 S3 S4 S5 S6 1 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 0 1 1 0 1 1 1 1 1 0 0 1 0 1 1 0 0 1 1 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 0 0 1 1 1 1 0 1 1 0 0 1 1 1 1 1 0 0 0 1 1 1 architecture bcd_7seg_arch of bcd_7seg is begin S <= "1111110" when E="0000" else "0110000" when E="0001" else "1101101" when E="0010" else "1111001" when E="0011" else "0110011" when E="0100" else "1011011" when E="0101" else "1011111" when E="0110" else "1110000" when E="0111" else "1111111" when E="1000" else "1111011" when E="1001" else "1110111" when E="1010" else "0011111" when E="1011" else "1001110" when E="1100" else "0111101" when E="1101" else "1001110" when E="1110" else "1000111" ; end bcd_7seg_arch; Iut de Toulon Dépt: GEII - Semestre 1 2009/2010 25

Décodeur BCD 7 segments (Description VHDL) Déclaration d architecture (en utilisant une affectation sélective) 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 a b c d e f g E3 E2 E1 E0 S0 S1 S2 S3 S4 S5 S6 1 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 0 1 1 0 1 1 1 1 1 0 0 1 0 1 1 0 0 1 1 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 0 0 1 1 1 1 0 1 1 0 0 1 1 1 1 1 0 0 0 1 1 1 architecture bcd_7seg_2_arch of bcd_7seg_2 is begin with E select S <= "1111110" when "0000", "0110000" when "0001", "1101101" when "0010", "1111001" when "0011", "0110011" when "0100", "1011011" when "0101", "1011111" when "0110", "1110000" when "0111", "1111111" when "1000", "1111011" when "1001", "1110111" when "1010", "0011111" when "1011", "1001110" when "1100", "0111101" when "1101", "1001110" when "1110", "1000111" when others ; end bcd_7seg_2_arch; 26

Multiplexeurs 2 1, 4 1 (Recherche du schéma) Les multiplexeurs logiques sont des circuits d aiguillage qui : ne possèdent qu une sortie et qui possèdent deux types d entrées : les entrées à aiguiller, dont le nombre est quasiment toujours une puissance de 2 (2 entrées, 4 entrées, 8 entrées, ) les entrées de sélection, qui permettent de choisir parmi les entrées à aiguiller, celle dont l état logique va se retrouver en sortie Bilan des entrées/sorties pour un multiplexeur 4 1 nombre de sortie : 1 sortie nombre d entrées : 4 entrées à aiguiller + 2 entrées de sélection E0 E1 E2 S E3 sel1 sel0 27

Multiplexeurs 4 1 (Recherche du schéma) Table de vérité Sel1 Sel0 S 0 0 0 1 1 0 1 1 E0 E1 E2 E3 E0 E1 E2 S E3 sel1 sel0 Equation S = Sel1.Sel0.E0 + Sel1.Sel0.E1 + Sel1.Sel0.E2 + Sel1.Sel0.E3 28

Multiplexeurs 4 1 (Recherche du schéma) S = Sel1.Sel0.E0 + Sel1.Sel0.E1 + Sel1.Sel0.E2 + Sel1.Sel0.E3 Schéma E3 E3 AND3 inst E2 E2 AND3 OR4 E1 E1 inst7 AND3 inst8 inst11 OUTPUT S S E0 E0 AND3 Sel1 Sel0 Sel1 Sel0 NOT inst12 NOT inst13 inst9 29

Multiplexeurs 4 1 ( 1ère Description VHDL utilisant une affectation simple) S = Sel1.Sel0.E0 + Sel1.Sel0.E1 + Sel1.Sel0.E2 + Sel1.Sel0.E3 library ieee; use ieee.std_logic_1164.all; entity mux4_1 is port ( ); end mux4_1; E3,E2,E1,E0,Sel1,Sel0 : in std_logic; S: out std_logic architecture mux4_1_arch1 of mux4_1 is begin S <= ((not Sel1) and (not Sel0) and E0) or ((not Sel1) and Sel0 and E1) or (Sel1 and (not Sel0) and E2) or (Sel1 and Sel0 and E3) ; end mux4_1_arch1; 30

Multiplexeurs 4 1 (2ème Description VHDL utilisant une affectation conditionnelle) toutes les entrées sont déclarées sous forme de simple bit library ieee; use ieee.std_logic_1164.all; entity mux4_1 is port ( end mux4_1; E3,E2,E1,E0,Sel1,Sel0 : in std_logic; S: out std_logic ); architecture mux4_1_arch2 of mux4_1 is signal sel : std_logic_vector ( 1 downto 0); begin sel(1) <= Sel1; sel(0) <= Sel0; end mux4_1_arch2; s <= E0 when sel="00" else E1 when sel="01" else E2 when sel="10" else E3 ; Sel1 Sel0 S 0 0 0 1 1 0 1 1 E0 E1 E2 E3 Symbole : mux4_1 E3 E2 E1 E0 Sel1 Sel0 inst S 31

Multiplexeurs 4 1 ( 3ème Description VHDL utilisant une affectation sélective ) les entrées à aiguiller sont déclarées sous forme de simple bit les entrées de sélection sont déclarées sous forme de BUS library ieee; use ieee.std_logic_1164.all; entity mux_4_1 is port ( E3,E2,E1,E0 : in std_logic; sel: in std_logic_vector ( 1 downto 0); S: out std_logic ); end mux_4_1; architecture mux_4_1_arch3 of mux_4_1 is begin with sel select s <= E0 when "00", E1 when "01", E2 when "10", E3 when others; end mux_4_1_arch3; Symbole : mux_4_1 E3 E2 E1 E0 inst1 sel[1..0] Sel1 Sel0 S 0 0 0 1 1 0 1 1 E0 E1 E2 E3 S 32

Démultiplexeurs 1 2, 1 4 (Recherche du schéma) Les démultiplexeurs sont des circuits d aiguillage qui réalisent l opération inverse du multiplexeur : leur nombre de sorties est quasiment toujours une puissance de 2 (2 sorties, 4 sorties, 8 sorties, ) ils ne possèdent qu une seule entrée à aiguiller et des entrées de sélection, pour choisir la sortie vers laquelle l entrée à aiguiller sera dirigée. Bilan des entrées/sorties pour un démultiplexeur 1 4 Nombre de sortie : 4 sorties Nombre d entrées : 1 entrée à aiguiller + 2 entrées de sélection S0 S1 E S2 S3 sel1 sel0 33

Démultiplexeur 1 4 (Recherche du schéma) Table de vérité S0 S1 E S2 S3 sel1 sel0 Sel1 Sel0 S0 S1 S2 S3 0 0 0 1 1 0 1 1 E 0 0 0 0 E 0 0 0 0 E 0 0 0 0 E Equations S0 = Sel1.Sel0.E S1 = Sel1.Sel0.E S2 = Sel1.Sel0.E S3 = Sel1.Sel0.E 34

Démultiplexeur 1 4 (Schéma) Schéma S0 = Sel1.Sel0.E S1 = Sel1.Sel0.E S2 = Sel1.Sel0.E S3 = Sel1.Sel0.E E E AND3 inst5 OUTPUT S3 S3 AND3 inst6 OUTPUT S2 S2 Sel1 Sel0 Sel1 Sel0 NOT inst NOT inst4 AND3 inst7 AND3 inst8 OUTPUT OUTPUT S1 S0 S1 S0 35

Démultiplexeurs 1 4 ( Description VHDL ) library ieee; use ieee.std_logic_1164.all; entity dmux1_4 is port ( E: in std_logic; sel: in std_logic_vector ( 1 downto 0); S3,S2,S1,S0: out std_logic ); end dmux1_4; architecture dmux1_4_arch1 of dmux1_4 is begin Symbole: dmux1_4 E sel[1..0] inst S3 S2 S1 S0 S3 <= sel(1) and sel(0) and E ; S2 <= sel(1) and (not sel(0)) and E ; S1 <= (not sel(1)) and sel(0) and E ; S0 <= (not sel(1)) and (not sel(0)) and E ; S3 = Sel1.Sel0.E S2 = Sel1.Sel0.E S1 = Sel1.Sel0.E S0 = Sel1.Sel0.E end dmux1_4_arch1; 36

L encodeur de priorité (Recherche du schéma) Les encodeurs de priorité sont des circuits qui : comportent «n» lignes d entrée et «m» lignes de sortie, avec n > m lorsque une ou plusieurs lignes d entrée sont activées, l encodeur fournit en sortie une valeur binaire correspondant à l indice de l entrée active de rang le plus élevé Bilan des entrées/sorties pour un encodeur de priorité 4 2 nombre de sorties : 2 sorties + 1 nombre d entrées : 4 entrées I3 I2 I1 I0 Gs Q1 Q0 37

L encodeur de priorité 4 2 (Recherche du schéma) Table de vérité I3 I2 I1 I0 I3 I2 I1 I0 Gs Q1 Q0 0 0 0 0 0 0 0 1 0 0 1 X 0 1 X X 1 X X X 0 0 0 1 0 0 1 0 1 1 1 0 1 1 1 Gs Q1 Q0 Les lignes d entrées sont notées de I3 à I0 Les sorties d encodage sont Q1 et Q0 Lorsque deux entrées sont actives simultanément la priorité est donnée au poids le plus fort (indice le plus grand) Si toutes les entrées sont inactives alors Q1 Q0 = «00» et Gs= 0 La sorties Gs (Got Something), indique par un 1 qu un code est valide en sortie ( au moins une ligne est active). 38

L encodeur de priorité 4 2 (Recherche du schéma) - Les équations Q0 I3 I2 I1 I0 00 01 11 10 I3 I2 I1 I0 Gs Q1 Q0 00 0 0 1 1 0 0 0 0 0 0 0 1 0 0 1 X 0 1 X X 1 X X X 0 0 0 1 0 0 1 0 1 1 1 0 1 1 1 01 11 10 0 0 0 0 1 1 1 1 1 1 1 1 Equations évidentes : Gs = I3 + I2 + I1 + I0 Q1 = I3 + I2 Tableau de Karnaugh pour Q0 : Q0 = I3 + ( I2. I1 ) 39

L encodeur de priorité 4 2 (Recherche du schéma) - Le schéma Gs = I3 + I2 + I1 + I0 Q1 = I3 + I2 Q0 = I3 + ( I2. I1 ) I3 I2 I1 I0 I3 I2 I1 I0 OR4 inst OR2 OUTPUT OUTPUT Gs Q1 Gs Q1 inst5 inst6 NOT OR2 OUTPUT Q2 Q0 AND2 inst8 inst7 40

L encodeur de priorité 4 2 cascadable (Recherche du schéma) En vue d associer plusieurs encodeurs entre eux, deux lignes sont rajoutées : Ei en entrée et Eo en sortie I3 I2 I1 I0 Ei Eo Gs Q1 Q0 Le fonctionnement est le suivant : Si l entrée Ei (Enable Input) est à 0, alors : Gs = Q1 = Q0 = Eo = 0. Sinon ( si Ei = 1 ) : Si toutes les lignes d entrée sont inactives alors : Q1Q0 = «00» et Eo = 1 Si une entrée est active alors Eo = 0 La sortie Gs (Got something) indique par un 1 qu une ligne d entrée au moins est active 41

L encodeur de priorité 4 2 cascadable (Recherche du schéma) - Table de vérité Ei I3 I2 I1 I0 Eo Gs Q1 Q0 0 X X X X 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 0 0 1 0 1 0 0 1 0 0 1 X 0 1 0 1 1 0 1 X X 0 1 1 0 1 1 X X X 0 1 1 1 - Equations Gs = Ei. ( I3 + I2 + I1 + I0 ) Q1 = Ei. ( I3 + I2 ) Q0 = Ei. ( I3 + ( I2. I1 ) ) Eo = Ei. ( I3 + I2 + I1 + I0 ) 42

L encodeur de priorité 4 2 cascadable (Recherche du schéma) - Le schéma Gs = Ei. ( I3 + I2 + I1 + I0 ) Q1 = Ei. ( I3 + I2 ) Q0 = Ei. ( I3 + ( I2. I1 ) ) Eo = Ei. ( I3 + I2 + I1 + I0 ) Ei I3 I2 I1 I0 Ei I3 I2 I1 I0 inst6 NOT OR4 inst OR2 inst5 AND2 NOT inst10 OR2 inst8 AND2 inst9 AND2 inst4 AND2 inst2 AND2 inst3 OUTPUT OUTPUT OUTPUT OUTPUT Eo Gs Q1 Q0 Eo Gs Q1 Q0 inst7 43

L encodeur de priorité 8 3 (Recherche du schéma) - Réalisation par une mise en cascade de 2 encodeurs 4 2 E7 E6 E5 E4 E3 E2 E1 E0 1 Ei I3 I2 I1 I0 Eo Ei I3 I2 I1 I0 Eo Gs Q1 Q0 Gs Q1 Q0 Gs2 Q3 Q2 Gs1 Q1 Q0? Gs S2 S1 S0 44

E7 E6 E5 E4 ENSL1 E3 E2 E1 E0 1 Ei I3 I2 I1 I0 Eo Ei I3 I2 I1 I0 Eo Gs Q1 Q0 Gs Q1 Q0 Gs2 Q3 Q2 Gs1 Q1 Q0? Table de vérité E7 E6 E5 E4 E3 E2 E1 E0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 X 0 0 0 0 0 1 X X 0 0 0 0 1 X X X 0 0 0 1 X X X X 0 0 1 X X X X X 0 1 X X X X X X 1 X X X X X X X Gs S2 S1 S0 Gs2 Q3 Q2 Gs1 Q1 Q0 Gs S2 S1 S0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 1 0 1 1 1 0 0 0 1 0 0 1 0 1 1 1 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 - Equations Gs = Gs2 + Gs1 S2 = Gs2 S1 = Q3 + Q1 S0 = Q2 + Q0 45

Additionneur (Recherche du schéma) Le principe de l addition est le même quelle que soit la base utilisée: En décimal : bit de retenue En binaire: bits d entrées + 1 1 1 7 3 7 2 (A) 5 4 6 5 (B) 2 8 3 7 (A+B) + 1 1 1 1 Si on arrive à trouver le schéma logique, d une cellule capable de générer le bit de 1 0 1 0 (A) somme et le bit de retenue, pour toutes les combinaisons possibles des bits 1 1 1 1 (B) d entrées, alors en cascadant «n» cellules identiques, on arrivera à faire l addition de nombres au format «n» bits. 1 0 0 1 (A+B) bit de somme Chaque cellule additionneur aura : 3 bits d entrées : a n (bit de rang n du nombre A) b n (bit de rang n du nombre B) r n (retenue générée par la cellule de rang n-1) 2 bits de sortie : s n (bit de somme de rang n) r n+1 (retenue de rang n appliquée à la cellule de rang n+1) a n b n r n Add r n+1 s n 46

Additionneur 4 bits a3 a2 a1 a0 b3 b2 b1 b0 s4 s3 s2 s1 s0 Réalisé en cascadant 4 cellules a3 b3 r3 a2 b2 r2 a1 b1 r1 a0 b0 r0 a n b n r n a n b n r n a n b n r n a n b n r n Add Add Add Add r n+1 s n r n+1 s n r n+1 s n r n+1 s n s4 s3 s2 s1 s0 47

Cellule Additionneur (Recherche du schéma) a n b n r n Add r n+1 s n Table de vérité: r n a n b n r n+1 s n 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 0 0 0 1 0 1 1 0 0 1 1 0 1 0 1 1 Karnaugh: r n+1 s n a r n b n n 00 01 11 10 0 0 0 1 0 1 0 1 1 1 r n+1 = r n.b n + a n.b n + a r n b n n 00 01 11 10 0 0 1 0 1 1 1 0 1 0 s n = r n.a n.b n + r n.a n.b n + r n.a n.b n + r n.a n.b n s n = r n.(a n.b n + a n.b n ) + r n.(a n.b n + a n.b n ) s n = r n.(a b n n ) + r n.(a n b n ) = r n a n b n s n = r a n n b n r n.a n 48

Cellule Additionneur (Recherche du schéma) Equations: s n = r n a n b n r n+1 = r n.b n + a n.b n + r n.a n Schéma: Symbole: a n b n r n a b rin XOR inst AND2 inst1 XOR inst3 OUTPUT s s n Add rin a b s rout AND2 OR3 OUTPUT rout r n+1 inst inst2 inst5 AND2 inst4 49

Additionneur 4 bits GND b[0] a[0] Add rin a b s rout s[0] a[3..0] inst OUTPUT s[4..0] b[3..0] b[1] a[1] Add rin a b s rout s[1] inst1 b[2] a[2] Add rin a b s rout s[2] inst2 b[3] a[3] Add rin a b s rout s[3] s[4] inst3 50

Cellule Additionneur (description VHDL) library ieee; use ieee.std_logic_1164.all; entity add is port ( end add; rin,a,b : in std_logic; s,rout : out std_logic ); architecture add_arch of add is signal entree : std_logic_vector (2 downto 0); signal sortie : std_logic_vector (1 downto 0); begin entree(2) <= rin; entree(1) <= a; entree(0) <= b; with entree select sortie <= "00" when "000", "01" when "001", "01" when "010", "10" when "011", "01" when "100", "10" when "101", "10" when "110", "11" when others; rout <= sortie(1); s <= sortie(0); Symbole: Add inst rin a b s rout r n a n b n r n+1 s n 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 1 0 0 1 1 0 1 0 1 1 end add_arch; 51

Comparateur C est un circuit qui reçoit deux nombres binaire A & B, en entrée, comme l additionneur, et qui détermine sur trois sorties si : A>B, A<B ou A=B. Principe de la comparaison : Soit deux nombres A= 01101101 et B= 01110100, simplement en les observant, on peut dire que A<B Il suffit pour cela de comparer leurs bits de même rang, en commençant par les poids forts : A= B= 0 1 1 0 0 1 1 1 Le premier bit à 1 rencontré sur l un des deux nombres, alors que son équivalent est à 0 sur l autre, permet de déterminer le plus grand des deux nombres 52

Comparateur (recherche du schéma) Comme l additionneur, le comparateur, sera réalisé par une mise en cascade de cellules de comparaison fonctionnant de la façon suivante: Chaque cellule aura 5 entrées et 3 sorties: an & bn : bits de rang n des nombres A & B à comparer sin, ein & iin : bits d entrée, utilisés lors de la mise en cascade de plusieurs cellules a n b n s in e in i in s out e out i out Deux cas déterminerons des comportements différents de la cellule : 1er cas : Si a n = b n, alors s out = s in, e out = e in, i out = i in 2ème cas : Si a n b n, soit 2 possibilités : a n = 1 et b n = 0 (a n > b n ), alors s out = 1, e out = 0, i out = 0 a n = 0 et b n = 1 (a n < b n ), alors s out = 0, e out = 0, i out = 1 53

Comparateur (recherche du schéma) Table de vérité an bn sout eout iout 0 0 0 1 1 0 1 1 sin ein iin 0 0 1 1 0 0 sin ein iin Equations s. out = a n.b n + s in.(a n b n ) e. out = e in.(a n b n ). i out = a n.b n + i in.(a n b n ) 54

Schéma ENSL1 s. out = a n.b n + s in.(a n b n ) e. out = e in.(a n b n ). i out = a n.b n + i in.(a n b n ) Comp_sch sin sout ein eout iin iout b a inst b n a n b a NOT inst NOT inst5 AND2 inst6 AND2 inst7 OR2 inst12 OR2 inst13 OUTPUT OUTPUT sout iout s out i out XNOR AND2 s in sin inst9 inst8 AND2 e in ein inst10 OUTPUT eout e out AND2 i in iin inst11 55

Comparateur 4 bits Comp_sch b[3..0] a[3..0] GND a[0] b[0] sin ein iin b a sout eout iout inst Comp_sch a[1] b[1] sin ein iin b a sout eout iout inst1 Comp_sch a[2] b[2] sin ein iin b a sout eout iout inst2 Comp_sch a[3] b[3] sin ein iin b a sout eout iout OUTPUT OUTPUT OUTPUT S E I inst3 56

Comparateur (description VHDL) library ieee; use ieee.std_logic_1164.all; entity comp is port ( sin,ein,iin,b,a : in std_logic; sout,eout,iout : out std_logic ); end comp; architecture comp_arch of comp is signal entree : std_logic_vector (1 downto 0); begin entree(1) <= a; entree(0) <= b; Symbole : Comp_sch sin sout ein eout iin iout b a inst sout <= iout <= eout <= '1' when entree="10" else '0' when entree="01" else sin; '0' when entree="10" else '1' when entree="01" else iin; '0' when entree="10" else '0' when entree="01" else ein; end comp_arch; 57

Paramètres dynamiques des opérateurs logiques NOT E OUTPUT S inst E 50% 50% S 90% 50% 10% 90% 50% 10% Réalité t PHL tf t PLH tr E S Représentation tp temps de propagation (~ns) 58

Paramètres dynamiques des opérateurs logiques Les temps de propagation à travers les portes logiques sont générateurs d aléas Un aléa apparaît en sortie d une fonction logique combinatoire, suite à un changement de valeur sur une entrée Alors qu une fonction ne devrait pas changer d état, à cause des temps de propagation, il apparaît un état transitoire de très courte durée où la fonction change de valeur malgré tout, c est l aléa Les simulateurs l appellent «glitch» 59

Paramètres dynamiques des opérateurs logiques Soit une fonction F définie par le tableau de Karnaugh suivant : C B A 0 1 00 01 11 10 0 1 1 1 0 0 0 1 A.C A.B F = A.C + A.B L aléa se rencontre lorsque l on passe d une case à une case adjacente de même valeur n étant pas dans un même groupement Dans notre exemple on risque de rencontrer un aléa sur un changement d état de la variable d entrée A lorsque C= 0 et B= 1 60

Schéma : F = A.C + A.B A B C A B= 1 C= 0 NOT inst NOT inst1 A C= 1 AND2 inst2 AND2 inst3 A.B A.C OR2 inst4 OUTPUT F F A A A.C 0 1 0 A.B 1 0 1 F Etat transitoire de très courte durée, du aux temps de propagation à travers les portes logiques, où pendant environ 1ns les 2 entrées du «OU» sont à 0. Ce qui provoque un aléa. 61

Paramètres dynamiques des opérateurs logiques Si on désire conserver la continuité de l état d une sortie, pendant une transition entre 2 cases où la fonction prend pour valeur 1, il faut et il suffit, que la transition se passe dans un même groupement Il n y a de risque d aléas qu entre 2 cases adjacentes, n étant pas prises dans un même groupement Pour éviter les aléas il faut donc rajouter des groupements redondants C B A 0 00 01 11 10 0 1 1 1 B.C 1 0 0 0 1 A.C A.B F = A.C + A.B + B.C Il n est pas toujours utile de supprimer tous les aléas 62

Retour sur l additionneur 4 bits réalisé en cascadant 4 cellules a3 a2 a1 a0 b3 b2 b1 b0 s4 s3 s2 s1 s0 a3 b3 r3 a2 b2 r2 a1 b1 r1 a0 b0 r0 a n b n r n a n b n r n a n b n r n a n b n r n Add Add Add Add r n+1 s n r n+1 s n r n+1 s n r n+1 s n s4 s3 s2 s1 s0 63

Cellule Additionneur (description VHDL) library ieee; use ieee.std_logic_1164.all; entity add is port ( end add; rin,a,b : in std_logic; s,rout : out std_logic ); architecture add_arch of add is signal entree : std_logic_vector (2 downto 0); signal sortie : std_logic_vector (1 downto 0); begin entree(2) <= rin; entree(1) <= a; entree(0) <= b; with entree select sortie <= "00" when "000", "01" when "001", "01" when "010", "10" when "011", "01" when "100", "10" when "101", "10" when "110", "11" when others; rout <= sortie(1); s <= sortie(0); Symbole: Add inst rin a b s rout r n a n b n r n+1 s n 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 1 0 0 1 1 0 1 0 1 1 end add_arch; 64

Additionneur 4 bits GND b[0] a[0] Add rin a b s rout s[0] a[3..0] inst OUTPUT s[4..0] b[3..0] b[1] a[1] Add rin a b s rout s[1] inst1 b[2] a[2] Add rin a b s rout s[2] inst2 b[3] a[3] Add rin a b s rout s[3] s[4] inst3 65

Additionneur a Additionneur s b library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity addi is port ( a,b : in std_logic_vector (3 downto 0); s : out std_logic_vector (4 downto 0) ); end addi; architecture addi_a of addi is begin s <= ('0'&a) + ('0'&b); end addi_a; Pour pouvoir utiliser des opérateurs arithmétiques standards (+,-, ) sur des std_logic_vector & :opérateur de concaténation La concaténation est définie sur des tableaux à une dimension : std_logic_vector L opération : CONCAT & ENATION donne : CONCATENATION 66

En VHDL il est possible de fusionner deux tableaux, on appelle cette opération la concaténation, pour affecter les valeurs correspondantes à un tableau plus grand signal etat : std_logic_vector ( 4 downto 0 ) ; signal sous_etat1 : std_logic_vector ( 1 downto 0 ) ; signal sous_etat2 : std_logic_vector ( 2 downto 0 ) ; etat <= sous_etat1 & sous_etat2 ; --concatenation 67

L utilisation de la librairie «ieee.std_logic_unsigned.all» va permettre de faciliter la tâche du concepteur. On a bien vu que la description de l additionneur est beaucoup plus simple en utilisant la librairie «ieee.std_logic_unsigned.all» 68

Unité Arithmétique et logique (A.L.U) sel a A.L.U. y b cin a[7..0] L.U. b[7..0] A.U. M U X Y[7..0] cin sel[3..0] sel[2..0] sel[3] 69

Unité Arithmétique et Logique (description VHDL) a[7..0] b[7..0] cin sel[3..0] library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity ALU is port ( a, b: in std_logic_vector(7 downto 0); sel: in std_logic_vector(3 downto 0); cin: in std_logic; y: out std_logic_vector(7 downto 0) ); end ALU; L.U. A.U. sel[2..0] M U X sel[3] Y[7..0] architecture ALU_arch of ALU is signal arith, logic: std_logic_vector(7 downto 0); begin ----- Unité arithmétique: ------ with sel(2 downto 0) select arith <= a when "000", a+1 when "001", a-1 when "010", b when "011", b+1 when "100", b-1 when "101", a+b when "110", a+b+cin when others; ----- Unité logique: ----------- with sel(2 downto 0) select logic <= not(a) when "000", not(b) when "001", a and b when "010", a or b when "011", a nand b when "100", a nor b when "101", a xor b when "110", not(a xor b) when others; -------- Mux: --------------- with sel(3) select y <= arith when '0', logic when others; end ALU_arch; 70

71