VHDL Structures de bases Synth è se d ’ op é rateurs standards.

Slides:



Advertisements
Présentations similaires
Ing Mohamed MASMOUDI Cours VHDL Ing Mohamed MASMOUDI
Advertisements

Cours #6 Conception d’unités de contrôle
Cours #7 Vérification d’un modèle VHDL
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Analyse de machines.
Advanced Boolean Equation Language
Concepts intermédiaires de VHDL
Chapitre 5 : Les circuits séquentiels
Introduction au VHDL - R.WEBER - Polytech'Orleans
The relationship between the different FEB projects The first MainBoard and its Processing DaughterBoard will be developed for 3-in-1, but keeping the.
CHAftITREI ARCHITECTURE de BASE. Modèle de Von Neumann Langage d’assemblage1 John Von Neumann est à l'origine d'un modèle de machine universelle de traitement.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
A1 : SYSTEMES DE NUMÉRATION ET CODES. PLAN A- Systèmes de numération 1- Système décimal 2- Système binaire 3- Système hexadécimal 4- Conversion des nombres.
1 Les circuits combinatoires Chapitre Les Circuits combinatoires Un circuit combinatoire est un circuit numérique dont les sorties dépendent uniquement.
UE2 - M22 Licence acoustique
La technologie des mémoires
Module de gestion des tournées de livraison
Les Instructions Itératives (Les Boucles)
Introduction au Langage Pascal
Environnement du développement de BD ORACLE REPORTS 10g
Quelques Termes INFORMATIQUE ? ORDINATEUR ( Système Informatique)?
Session 1 6 mars 2017 Plateforme ICONICS Justine Guégan
Visite guidée - session 3 Les postes de charge et les gammes
Logique Combinatoire.
Description d’un circuit combinatoire en VHDL
Automates Programmables Industriels Automates Programmables
Arithmétique entière en VHDL
Représentation de l’information en binaire:
Chapitre 01: Structure d'un module VHDL
S.P.I BUS série synchrone à grande vitesse Cliquez ici pour avancer
Lois fondamentales de l'algèbre de Boole
Architecture de machines Eléments de logique
Collecte de données CAPI
L’Instruction de Test Alternatif
Généralité sur les bases de données
1. Logique combinatoire vs Logique séquentielle
Plan du cours Introduction : création de circuits
Fonctions logiques et algèbre booléenne
Plan du cours Introduction : création de circuits
Réseaux pré-diffusés programmables par l’utilisateur: FPGA
Synthèse et implémentation de circuits arithmétiques sur FPGA
Revue générale.
Tests de boîte blanche.
Codification et Représentation de l’information
Fonctions Logiques & Algèbre de BOOLE
Programmation en C++ C++ de base
VALMEM Traduction automatique d'une description comportementale VHDL + annotations temporelles en automates temporisés A. Bara, E. Encrenaz LIP6 VALMEM.
PROGRAMMATION ET ENSEIGNEMENT
Guide Utilisateur. Guide Utilisateur.
Calcul Scientifique Initiation à SCILB
La Logique séquentielle ● Contrairement à la logique combinatoire elle permet de mémoriser des états binaires. ● Principe : ● Pour déterminer l'état présent.
Architecture des processeurs « Partie matérielle » CE311/CE317 Module « Systèmes matériels et logiciels » Crédit : 5 (en 2 parties) Vincent Beroulle Bureau.
S.P.I BUS série synchrone à grande vitesse Cliquez ici pour avancer
MINISTÈRE DE L’ENSEIGNEMENT SUPÉRIEUR ET DE LA RECHERCHE SCIENTIFIQUE
NUMERATION et REPRESENTATION DES NOMBRES
SYSTèMES à évènements discrets
TGV Trigger Générique Vme Face avant Tri d’événements de physique
Les réseaux logiques programmables
"Interprétation matérielle de temps multi-dimensionnel "
Sylvie DELAËT 2002 Architecture des machines Bienvenus en Amphi d’Architecture des Machines.
1. Les Circuits combinatoires Un circuit combinatoire est un circuit numérique dont les sorties dépendent uniquement des entrées. S i =F(E i ) S i =F(E.
1 Architecture des ordinateurs Généralités. 2 Définition Informatique = Information + Automatique Ce terme a été introduit en France. Il est très répandu.
Opérateurs et fonctions arithmétiques Opérateurs de relation Opérateurs logiques Cours 02.
PROGRAMMATION ET ENSEIGNEMENT
Type Tableau Partie 1 : Vecteurs
DONNÉE DE BASE QM Manuel de formation. Agenda 2  Introduction  Objectif de la formation  Données de base QM: Caractéristique de contrôle Catalogue.
Introduction aux Circuits Reconfigurables et FPGA.
بسم الله الرحمن الرحيم. mise en situation difficulté : Vous voulez transmettre une information un ami qui se trouve très loin de toi et ne peut vous entendre,
Transcription de la présentation:

VHDL Structures de bases Synth è se d ’ op é rateurs standards

2 Présentation Electronique reprogrammable  Apparition des premiers circuits vers les ann é es 70: premiers PLD-> PAL, GAL  Evolution vers composants plus complexes: CPLD, FPGA  Diff é rentes technologies pour la programmation des connexions Permanents, Volatiles statiques, Volatiles Capacit é de programmation In-Situ composants dits ISP via interface JTAG  Contexte de comp é titivit é mondiale Importance du Time-To-Market

3 Connexions programmables Introduction  Deux formes canoniques pour les é quations logiques Somme de produits S=a.b+ c.d Produits de somme S=(z+f).(e +x) Connexions programmables ET cablé OU cablé Constitution d’un réseau programmable Représentation standard

4 xPLD Simple Programme Logic Device  Composants simples r é seau ET/OU programmable ou fixe PAL (OTP en g é n é ral), GAL reprogrammable Différentes familles en fonction des ressources rajoutés par le constructeurs

5 FPGA Field Programmable Grid Array  Granularit é plus fine que les CPLD ( macrocellules - complexes mais + nombreuses)  Int é gration mat é rielle de composants suppl é mentaires RAM: appel é LUT (Look-Up Table) Mutiplexeurs divers PLL Multiplieurs câbl é s (FPGA haut de gamme => concurrence avec les DSP)  R é seau de routage r é parti ( non centralis é contrairement aux CPLD) Exemple de référence Famille Cyclone (FPGA Low Cost d’ALTERA) Concurrent: Spartan3 (chez Xilinx) Répartition des applications Source Altera

6 FPGA La carte DE2 (utilisé en TP) Specifications FPGA Cyclone II EP2C35F672C6 FPGA and EPCS16 serial configuration device I/O Devices Built-in USB Blaster for FPGA configuration 10/100 Ethernet, RS-232, Infrared port Video Out (VGA 10-bit DAC) Video In (NTSC/PAL/Multi-format) USB 2.0 (type A and type B) PS/2 mouse or keyboard port Line-in, Line-out, microphone-in (24-bit audio CODEC) Expansion headers (76 signal pins) Memory 8-MB SDRAM, 512-KB SRAM, 4-MB Flash SD memory card slot Switches, LEDs, Displays, and Clocks 18 toggle switches 4 debounced pushbutton switches 18 red LEDs, 9 green LEDs Eight 7-segment displays 16 x 2 LCD display 27-MHz and 50-MHz oscillators, external SMA clock input

7 VHDL introduction Programmation ou description?  Les objectifs du langage VHDL Conception de circuits int é gr é s reconfigurable ou non (ASIC, FPGA … ) : SYNTHESE Mise au point de mod è le de simulations num é riques (circuits virtuels) : MODELISATION  Le langage est capable de DECRIRE des comportements CONCURRENTS ( // ) Des comportements s é quentiels Synthèse ou modélisation Notre cible en TP: FPGA Cyclone 2 sur la carte DE2 Les deux portes travaillent en // Nous nous focaliserons dans ce cours à la synthèse uniquement

8 VHDL: concepts de base Structure générale Votre fichier texte de description: xxx.vhd Mode transfert des signaux de votre entity

9 Flot de conception Un outils de développement: Quartus II d’Altera

10 VHDL: concepts de base Méthodologie de conception  Guide pratique du d é butant D é composition du cahier des charges en fonctions é l é mentaires Classification de la fonction COMBINATOIRE: instructions dites concurrentes SEQUENTIELLE: utilisation d ’ un PROCESS Logique combinatoire La sortie ne dépend pas de l’état passé Un vecteur d’entrée = un vecteur de sortie unique Des exemples: Multiplexeurs Additionneurs Décodeur 7 segements Encodeurs de priorité Logique séquentielle La sortie dépend de son état passé Système nécessitant une horloge (systèmes dits synchrones) Des exemples: Compteurs Registres à décalage Machine d’état (automate)

11 VHDL: concepts de base Les questions à se poser  On identifie les fonctions et on les dessine sur papier  On rep è re et nomme les entr é es de chaque blocs ( on é vite d ’ utiliser les mêmes noms)  On r é pertorie les signaux INTERNES (mot cl é SIGNAL)  Le bloc est-il combinatoire ou s é quentiel? Si s é quentiel alors description avec le mot cl é PROCESS + instructions autoris é es  Le bloc est-il utilis é plusieurs fois Si oui il vaut mieux cr é er un composant (entity+ architecture) Sinon le bloc est synth é tiser par les lignes de codes directement Exemple: faire une porte ET 4entrée avec des ET 2 entrées Il faut un SIGNAL On créera 1 composant ET2 (entity+architecture) Utilisé 3 fois pour décrire ET4 ET4 est un composant (entity+architecture) Voir page 12 pour plus de détails

12 VHDL: concepts de base Un autre exemple: Horloge BCD 2 digits  Blocs d é codeurs 7 segments - combinatoire  Blocs compteurs – s é quentiel  Les Blocs compteurs sont cascad é pour la propagation de la retenue Apr è s 9 j ’ ai 0 avec un de retenue! Affichage 10 Sorties pilotant les Leds de l’afficheur 1 Séquentiel donc process COMPT:PROCESS(CLK) Begin …. END PROCESS; Ce fil ne sort pas du composant de plus haut niveau: on le déclarera SIGNAL FILS: bit_vector(3 downto 0);

13 VHDL: concepts de base Les librairies  Facilite la tâche du concepteur  Rajout de fonctionnalit é s suppl é mentaires La librairie IEEE  A mettre au d é but de votre description  Pour rajouter les types é tendues std_logic et std_logic_vector use IEEE.STD_LOGIC_1164.all;  DORENAVANT nous remplacerons SYSTEMATIQUEMENT BIT par STD_LOGIC BIT_VECTOR par STD_LOGIC_VECTOR  Pour utiliser des fonctions arithm é tiques sur ces STD_LOGIC_VECTOR USE IEEE.NUMERIC_STD.ALL; Et aussi USE IEEE.std_logic_arith.all; Q<=Q+1; -- Q é tant par exemple un std_logic_vector et 1 est un entier!! A<B -- A et B des std_logic_vector oData<=CONV_STD_LOGIC_VECTOR(TEMP,8); avec TEMP integer range 0 to 255; Exemples Applicatifs

14 VHDL: concepts de base Complément sur les opérations arithmétiques  Le rajout de use IEEE.numeric_std.all; permet De travailler avec des valeurs sign é es et non sign é es signal A,B: signed(3 downto 0); signal tempo: unsigned(3 downto 0); De convertir un std_logic_vector en signed ou unsigned A<= signed(SW(3 downto 0)); B<=unsigned(RES); De convertir des signed ou unsigned en std_logic_vector LEDG(3 downto 0)<=std_logic_vector(tempo); De redimensionner des vecteurs Permet d ’é tendre le bit de signe correctement! signal A,B: signed(LARG downto 0); A<= resize(signed(SW(LARG downto 1)),LARG+1); De travailler avec les op é rateurs arithm é tiques standart >, >=, =<,<, +,- etc ….  Le rajout de use IEEE.std_logic_unsigned.all; permet De travailler avec les op é rateurs arithm é tiques standart de m é langer des entiers avec des std_logic_vector: A<= A +1; IEEE.std_logic_unsigned.all et IEEE.std_logic_arith.all sont d’anciennes bibliothèques Ne pas mettre en même temps: IEEE.numeric_std.all; IEEE.std_logic_arith.all; Préfèrez l’emploi de IEEE.numeric_std.all; Alternative à resize A<=resize(signed(SW(LARG downto 1)),LARG+1); Recopie du bit bit de poids forts A<= A(3)&A

15 VHDL: concepts de base Littéraux  Caract è res: ’ 0 ’, ’ x ’, ’ a ’, ’ % ’  Cha î nes: ” ”, ” xx ”, ” bonjour ”, ” ”  Cha î nes de bits: B ” 0010_1101 ”, X ” 2D ”, O ” 055 ”  D é cimaux:27, -5, 4e3, 76_562, 4.25  Bas é s: 2#1001#, 8#65_07, 16#C5#e2 Les opérateurs  Logiques (boolean, bit, std_ulogic) AND, OR, NAND, NOR, XOR, NOT  Relationnels ( retournent un boolean) = /= >=  Arithm é tiques + -* / ** MOD REM  Concat é nations d ’é l é ments de tableaux & "bon" & "jour" => "bonjour" Ne pas confondre 1 bit exemple ‘0’ ou ‘1’ Avec un vecteur de bits ” 11 ” ou ” ” Un bus (ou ensemble de fils électrique) est représenté sous forme d’un vecteur de bits STD_LOGIC_VECTOR (3 DOWNTO 0);

16 Logique combinatoire: Instructions concurrentes Assignation simples library IEEE; use IEEE.std_logic_1164.all; --librairie pour inclure type std_logic --portes ET --3 entrées E2 E1 E sortie S0 entity ET3 is port( E:IN std_logic_vector(2 downto 0); S:OUT std_logic ); end ET3; --definition de l'architecture architecture arch_ET3 of ET3 is begin S<=E(2) and E(1) and E(0); -- E(2) accès au fil 2 end arch_ET3; library IEEE; use IEEE.std_logic_1164.all; entity example is port( E:IN std_logic_vector(2 downto 0); S1:OUT std_logic; --1 fil S2,S3:OUT std_logic_vector(3 downto 1); --3 fils S1[3:1] S4:OUT std_logic_vector(2 downto 0) ); end example; --definition de l'architecture architecture arch_example of example is begin S1<='0'; S2<='1'& E(1 downto 0); -- operateur COLLER (ou CONCATENE) & -- S2(3) S2(2)S2(1) -- '1' E(1)E(0) S3<="101"; S4<= "111" XOR E; --manip sur les bus directement end arch_example; Exemple 1 Exemple 2 Bit Poid Fort Bit Poid faible

17 Logique combinatoire: Instructions concurrentes Assignation conditionnelle  Structure WHEN/ELSE signal <= signal1 when expresion_boolénne else ……… signal1xx when expresion_boolénne else signal par défaut; ---- Solution 1: with WHEN/ELSE LIBRARY ieee; 3 USE ieee.std_logic_1164.all; ENTITY encoder IS 6 PORT ( x: IN STD_LOGIC_VECTOR (3 DOWNTO 0); 7 y: OUT STD_LOGIC_VECTOR (1 DOWNTO 0)); 8 END encoder; ARCHITECTURE encoder1 OF encoder IS 11 BEGIN 12 y <= "00" WHEN x="0001" ELSE 13 "01" WHEN x="0010" ELSE 14 "10" WHEN x="0100" ELSE 15 "11" WHEN x="1000" ELSE 20 "ZZZ"; 21 END encoder1; Exemple d’application: encodeur clavier pour PIC Intérêt: réduire le nombre d’entrée du PIC

18 Logique combinatoire: Instructions concurrentes Assignation sélective with expression select signal1 <= signal1when valeur 1, signal2 when valeur2, signal par défaut when others ; Le multiplexeur : on aiguille une enrée vers la sortie en fonction d’un numéro d’aiguillage MUX 1 voie parmi 4 Autre possibilté: std_logic_vector(1 downto 0)

19 Logique combinatoire: Instructions concurrentes Instanciation (placement) de composants déjà crées  D é coupage de votre projet en fonctions: cr é ation de composants ad é quats  Assemblage des composants cr éé s pour structurer votre projet  MOT CLE: PORTMAP Ma R é f é rence :port map ( liste ordonn é e de signaux) ; ou Ma R é f é rence : port map ( port=> signal, port => signal ) ; Analogie avec ORCAD: on choisit un composant de la bibliothèque en le référencant sur la feuille Exemple: résistance R1 Un 555: U1 exemple: applicatif: Comment faire un additionneur 4 bits? etape 1: je crée un composant ADDITIONNEUR 1 bits LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY fa IS PORT ( Ci, X, Y: IN STD_LOGIC; S, Cout : OUT STD_LOGIC); END fa; ARCHITECTURE Dataflow OF fa IS BEGIN Cout <= (X AND Y) OR (Ci AND (X XOR Y)); S <= X XOR Y XOR Ci; END Dataflow; Full Adder

20 Logique combinatoire: Instructions concurrentes étape 2: je valide le composant ( compilation /simulation) étape3: je structure mon niveau supérieur ( comment faire 4 bits avec 1 bit?) architecture arch_add4full of add4full is -- declaration du composant add1full component add1full is port( Ci:IN std_logic; X,Y:IN std_logic; S,Cout:OUT std_logic ); end component add1full; -- declaration des fils internes pour le report carry signal Fil1,Fil2,Fil3:std_logic; begin -- placement des 4 aditionneurs complets U0: add1full port map (Cin,A(0),B(0),Res(0),Fil1); U1: add1full port map (Fil1,A(1),B(1),Res(1),Fil2); U2: add1full port map (X=>A(2),Rin=>Fil2,Y=>B(2),Cout=>Fil3,S=>Res(2)); U3: add1full port map (Fil3,A(3),B(3),Res(3),Cout); end arch_add4full; --librairie pour inclure type std_logic library IEEE; use IEEE.std_logic_1164.all; entity add4full is port( Cin:IN std_logic; A:IN std_logic_vector(3 downto 0); B:IN std_logic_vector(3 downto 0); Res:OUT std_logic_vector(3 downto 0); Cout:OUT std_logic ); end add4full ;

21 VHDL: concepts de base Notre ET4 --librairie pour inclure type std_logic library IEEE; use IEEE.std_logic_1164.all; ENTITY ET2 IS PORT ( A,B: INSTD_LOGIC; S: OUTSTD_LOGIC ); END ET2; ARCHITECTURE arch_ET2 OF ET2 IS BEGIN S<= A and B; END arch_ET2; library IEEE; --librairie pour inclure type std_logic use IEEE.std_logic_1164.all; ENTITY ET4 IS PORT (X1,X2,X3,X4: IN STD_LOGIC; Y: OUTSTD_LOGIC ); END ET4; ARCHITECTURE arch_ET4 OF ET4 IS -- partie déclarative COMPOSANT COMPONENT ET2 is PORT (A,B: INSTD_LOGIC; S: OUTSTD_LOGIC); END COMPONENT ET2; -- partie déclarative SIGNAL --pas de IN ou OUT car signal INTERNE SIGNAL FIL1,FIL2: STD_LOGIC ; BEGIN ere porte ET placée U1:ET2 port map (A=>X1,B=>X2,S=>FIL1); -- 2ème porte ET placée U2:ET2 port map (A=>X3,B=>X4,S=>FIL2); -- 3ème porte ET placée U3:ET2 port map (A=>FIL1,B=>FIL2,S=>Y); -- on pourrait faire à la place !!!! -- Y<= X1 and X2 and X3 and X4 END arch_ET4; Je commence par faire ma ET2 2 fichiers.vhd avec chacun 1 entity+1 architecture Je respecte les noms choisis sur papier On déclare ET2 Les fils de connexions INTERNES PORT MAP pour placement et connexion

22 Logique combinatoire: Instructions concurrentes Bilan  Pour d é crire des syst è mes combinatoires les instructions types « concurrentes » seront pr é f é r é es  L ’ ordre des instructions est SANS IMPORTANCE ( car en parall è le)  Il est souhaite de scinder les projets en composants simples APPROCHE METHODOLOGIQUE TOP-DOWN  Utilisation des biblioth è ques IEEE --les libraries library IEEE; use IEEE.std_logic_1164.all; ………. ENTITY LENIVEAUTOP ( ………..) End ENTITY ARCHITECTURE ….. COMPONENT Truc … END COMPONENT COMPONENT Machin … END COMPONENT SIGNAL: ………. SIGNAL: …….. XX<=“1110”; YY<= A AND B; U1: Truc PORT MAP( …….); S<= “10” when (A=B) else “00”; U2: Machin PORT MAP( …….); With (Toto) select G<= …… END ARCHITECTURE Squelette de description VHDL Déclaration de composants créés Utilisation des ressources disponibles

23 Logique combinatoire: exemples Décodeurs 7 segments  UTILISATION D ’ UNE TABLE (LUT) POUR DECRIRE LE SYSTEME library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; --definition de l'architecture architecture arch_dec_7seg_v1 of decod7seg is -- definition d'un nouveau type -- tableau de 16 elements de 7 bits type ROM is array(15 downto 0) of std_logic_vector(6 downto 0); --initialisaion du tableau -- tableau vu comme une memoire(LUT) signal LUT:ROM:=( " "," "," "," "," "," "," ", " "," "," "," "," "," "," ", " "," "); begin -- pour indexer tableau il faut un entier -- fonction de conversion conv_integer dans IEEE.std_logic_unsigned.all oSeg<=LUT(conv_integer(iDigit)); end arch_dec_7seg_v1; entity decod7seg is port( iDigit:IN std_logic_vector(3 downto 0); oSeg:OUT std_logic_vector(6 downto 0) ); end decod7seg; Carte DE2: Anode commune Segment actif à ‘0’ Brochage: voir p31 du manuel Création de nouveaux types: TYPE Tableau: ARRAY

24 Logique combinatoire: exemples Additionneur « haut niveau »  Emploi des librairies IEEE;  On augmente la taille de 1 si l ’ on souhaite conserver la retenue d ’ entr é e architecture arch1_add4full of adddirect is --creation de TEMP pour resultat: extension de 1 bit signal TEMP:std_logic_vector(LARG downto 0); begin TEMP<=('0'&A)+('0'&B)+Cin; --A et B etendu de 1 bit. Res<=TEMP(TEMP'HIGH-1 downto 0); Cout<=TEMP(TEMP'HIGH); --TEMP'HIGH renvoi indice poids fort end arch1_add4full; --librairie pour inclure type std_logic library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity adddirect is generic (LARG:integer:=4); -- parametre generique -- taille aditionneur changer en 1 clic! port( Cin:IN std_logic; A:IN std_logic_vector(LARG-1 downto 0); B:IN std_logic_vector(A'range); Res:OUT std_logic_vector(A'range); Cout:OUT std_logic ); end adddirect; Les attributs des signaux -Exemple S[5:0] S’HIGH renvoie 5 et S’LOW renvoie 0 S’RANGE renvoie 5 downto 0 S’event renvoie TRUE si changement d’état de S Utilisation de GENERIC lors du PORT MAP U1: generic(10) adddirect PORT MAP(xxxxxx);

25 Logique combinatoire: exemples 2 LIBRARY ieee; 3 USE ieee.std_logic_1164.all; 4 USE ieee.std_logic_unsigned.all; ENTITY ALU IS 7 PORT (a, b: IN STD_LOGIC_VECTOR (7 DOWNTO 0); 8 sel: IN STD_LOGIC_VECTOR (3 DOWNTO 0); 9 cin: IN STD_LOGIC; 10 y: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); 11 END ALU; ARCHITECTURE dataflow OF ALU IS 14 SIGNAL arith, logic: STD_LOGIC_VECTOR (7 DOWNTO 0); 15 BEGIN Arithmetic unit: WITH sel(2 DOWNTO 0) SELECT 18 arith <= a WHEN "000", 19 a+1 WHEN "001", 20 a-1 WHEN "010", 21 b WHEN "011", 22 b+1 WHEN "100", b-1 WHEN "101", 24 a+b WHEN "110", 25 a+b+cin WHEN OTHERS; Logic unit: WITH sel(2 DOWNTO 0) SELECT 28 logic <= NOT a WHEN "000", 29 NOT b WHEN "001", 30 a AND b WHEN "010", 31 a OR b WHEN "011", 32 a NAND b WHEN "100", 33 a NOR b WHEN "101", 34 a XOR b WHEN "110", 35 NOT (a XOR b) WHEN OTHERS; Mux: WITH sel(3) SELECT 38 y <= arith WHEN '0', 39 logic WHEN OTHERS; 40 END dataflow; Arithmetic Logic Unit (ALU) Sélection Op arithmétique/logique Code Opératoire (mot de commande sur 3 bits)

26 Logique combinatoire: exemples Buffers 3 états 1 LIBRARY ieee; 2 USE ieee.std_logic_1164.all; ENTITY tri_state IS 5 PORT ( ena: IN STD_LOGIC; 6 input: IN STD_LOGIC_VECTOR (7 DOWNTO 0); 7 output: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); 8 END tri_state; ARCHITECTURE tri_state OF tri_state IS 11 BEGIN 12 output <= input WHEN (ena='0') ELSE 13 (OTHERS => 'Z'); 14 END tri_state; De manière générale il faut se poser la question: Le composant cible dispose t’il des ressources nécessaires pour synthétiser ma fonction Pas de 3 états possibles si le composants n’en a pas!!

27 Logique séquentielle: le process Le mot clé PROCESS  Syntaxe:  Le PROCESS est activ é lors d ’ un changement d ’é tat d ’ un des signaux de la liste de sensibilit é  Une fois dans le PROCESS le d é roulement est SEQUENTIELLE  Les instructions utilisables dans un PROCESS sont SPECIFIQUE ( pas de when/else par exemple)  Les signaux sont mis à jour uniquement à la fin du process MONETIQUETTE:process (signal1, signal2 etc) -- zone déclarative Signal sFIL1,sFIL2: xxxxxxxx Begin xxx end process MONETIQUETTE ; process begin q <= d; wait until Reloj = ‘1’; end process; Process begin c <= a and b; wait on a, b; end process; Process(a,b) begin c <= a and b; end process; Écritures alternatives

28 Logique séquentielle: le process Réveil du process  Exemple: bascule D latch Fonctionnement sur niveau Processus activé

29 Logique séquentielle: le process Rendre synchrone  Bascule D edge: fonctionnement sur front Autre façon: Process(CLK) Begin If (CLK=‘1’) then Q<=D; End if; End process;

30 Logique séquentielle: le process Ecriture correcte des process  Les compilateurs imposent une certaine rigidit é dans la description des process  Les r è gles a respecter process(horl) if (horl’event and horl = ‘1’) then if (ena = ‘ 1 ’) then contenu_registre <= valeur_in; end if; end process; Ce qu’il faut faire! En pratique le FPGA (ou CPLD) possède une ou des broches spécifiques pour le signal d’horloge

31 Logique séquentielle: le process Penser à l’initialisation du systèmes  Signaux reset et set: comportement d é fini par l ’ utilisateur LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY dff IS PORT ( d, clk, rst: IN STD_LOGIC; q: OUT STD_LOGIC); END dff; ARCHITECTURE behavior OF dff IS BEGIN PROCESS (rst, clk) BEGIN IF (rst=‘ 0 ') THEN q <= '0'; ELSIF (clk'EVENT AND clk='1') THEN q <= d; END IF; END PROCESS; END behavior; Reset ASYNCHRONE Comportement synchrone de la bascule process (CLK) Begin if (CLK'event and CLK ='1') then if (RESET =’1’) then S <= ‘0’; elsif (SET =’1’)then S <= ‘1’; else S <= D; end if; end process ; Reset et Set SYNCHRONE On remarquera que RST a disparu de la liste de sensibilité Actif à 1 ici pour l’exemple

32 Logique séquentielle: le process Mise à jour des signaux à la fin du process  Exemple 1: bascule avec sortie compl é ment é e ---- Solution 1: NE MARCHE PAS LIBRARY ieee; 3 USE ieee.std_logic_1164.all; ENTITY dff IS 6 PORT ( d, clk: IN STD_LOGIC; 7 q: BUFFER STD_LOGIC; 8 qbar: OUT STD_LOGIC); 9 END dff; ARCHITECTURE not_ok OF dff IS 12 BEGIN 13 PROCESS (clk) 14 BEGIN 15 IF (clk'EVENT AND clk='1') THEN 16 q <= d; 17 qbar <= NOT q; 18 END IF; 19 END PROCESS; 20 END not_ok; LIGNE 17 Je me fais avoir car si d a changé q ne changera qu’à la fin du process ---- Solution 2: OK LIBRARY ieee; 3 USE ieee.std_logic_1164.all; ENTITY dff IS 6 PORT ( d, clk: IN STD_LOGIC; 7 q: BUFFER STD_LOGIC; 8 qbar: OUT STD_LOGIC); 9 END dff; ARCHITECTURE ok OF dff IS 12 BEGIN 13 PROCESS (clk) 14 BEGIN 15 IF (clk'EVENT AND clk='1') THEN 16 q <= d; 17 END IF; 18 END PROCESS; 19 qbar <= NOT q; 20 END ok; LIGNE 19 Je décris un relation COMBINATOIRE => je sors du PROCESS!!!

33 Logique séquentielle: le process Mise à jour des signaux  Cas des compteurs Library ieee; Use ieee.std_logic_1164.all; Use ieee.numeric_std.all; Use ieee.std_logic_unsigned.all; entity CMP4BITSRET is PORT ( RESET, CLOCK : in std_logic; RET : out std_logic; Q : out std_logic_vector (3 downto 0)); end CMP4BITSRET; architecture DESCRIPTION of CMP4BITSRET is signal CMP: std_logic_vector (3 downto 0); begin process (RESET,CLOCK) begin if RESET ='1' then CMP <= "0000"; elsif (CLOCK ='1' and CLOCK'event) then CMP <= CMP + 1; if (CMP = "1111") then RET <= '1'; else RET <= '0'; end if; end process; Q <= CMP; end DESCRIPTION; =1111 oui mais à la fin du process Conclusion: etat 1111 et pas de retenue! Prochain front: =0 je detecte 1111, l’ancienne valeur et RET passe à 1 Oui mais trop tard!!

34 Logique séquentielle: le process Des solutions SOLUTION 2: process (RESET,CLOCK) begin if RESET='1' then CMP <= "0000"; elsif (CLOCK ='1' and CLOCK'event) then CMP <= CMP + 1; end if; end process; -- Validation de la retenue RET <= '1' when (CMP = "1111") else '0'; SOLUTION 1: process (RESET,CLOCK) begin if RESET ='1' then CMP <= "0000"; elsif (CLOCK ='1' and CLOCK'event) then CMP <= CMP + 1; if (CMP = "1110") then –- La retenue passera à un quand CMP = 14 décimal RET <= '1'; else RET <= '0'; end if; end process; Version complètement synchrone: J’anticipe pour avoir un résultat correct Je décris le combinatoire HORS du PROCESS

35 Logique séquentielle: les instructions Assignations directes  S<= signal; Library ieee; Use ieee.std_logic_1164.all; Use ieee.numeric_std.all; Use ieee.std_logic_unsigned.all; entity CMP4BITS is PORT ( CLOCK : in std_logic; Q : out std_logic_vector (3 downto 0)); end CMP4BITS; architecture DESCRIPTION of CMP4BITS is signal Q_BUS_INTERNE : std_logic_vector(3 downto 0)); begin process (CLOCK) begin if (CLOCK ='1' and CLOCK'event) then Q_BUS_INTERNE <= Q_BUS_INTERNE + 1; end if; end process; Q <= Q_BUS_INTERNE; -- affectation du bus interne au -- signal de sortie Q end DESCRIPTION; Q est défini en sortie OR Q<=Q+1 signifie Relire état courant et incrémente Solution 1: définir BUFFER au lieu de OUT Solution 2: couramment utilisée: passer par un signal

36 Logique séquentielle: les instructions Assignation conditionnelle  Structure SI/SINON SI COMPTEUR GRAY LIBRARY ieee; USE ieee.std_logic_1164.all; USE work.std_arith.all; entity GRAY is port (H,R :in std_logic; Q :out std_logic_vector(2 downto 0)); end GRAY; architecture ARCH_GRAY of GRAY is signal X :std_logic_vector(2 downto 0); begin process(H,R) begin if R='1' then X <= "000"; elsif (H'event and H='1') then if X = "000" then X <= "001"; elsif X = "001" then X <= "011"; elsif X = "011" then X <= "010"; elsif X = "010" then X <= "110"; elsif X = "110" then X <= "111"; elsif X = "111" then X <= "101"; elsif X = "101" then X <= "100"; elsif X = "100" then X <= "000"; end if; end process; Q <= X; end ARCH_GRAY; Library ieee; Use ieee.std_logic_1164.all; Use ieee.numeric_std.all; Use ieee.std_logic_unsigned.all; entity BASCULET is port ( D,CLK : in std_logic; S : buffer std_logic); end BASCULET; architecture DESCRIPTION of BASCULET is begin PRO_BASCULET : process (CLK) Begin if (CLK'event and CLK='1') then if (D=’1’) then S <= not (S); end if; end process PRO_BASCULET; end DESCRIPTION; Bascule T Compteur de GRAY T comme TOGGLE ( basculement) La sortie change d’état à chaque front ( utilisation pour la synthèse des compteurs) Code binaire réfléchi (codeur de position par exemple)

37 Logique séquentielle: les instructions Assignation conditionnelle  Structure CASE/IS Utile pour d é crire des grafcets, machine d ’é tats CAS possibles de l’expression EST LORSQUE signal = valeur1 => instructions séquentielles; LORSQUE signal = valeur2 =>instructions séquentielles; LORSQUE signal = valeur3 =>instructions séquentielles; LORSQUE signal = AUTRES =>instructions séquentielles; FIN DE CAS; Case selecteur is when condition1 => instructions ; ……. instructions ; when condition2 => instructions ; ---- when others => instructions ; end case ;

38 Logique séquentielle: les instructions  Exemple de CASE/IS Description d ’ un registre à d é calage Reg_dec: PROCESS (h) VARIABLE stmp: std_logic_vector(3 DOWNTO 0); BEGIN If (h=‘1’ and h’event) then CASE selection IS WHEN ”11”=> stmp := d_entree; --chargement paralelle WHEN ”10”=>stmp:= stmp(2 DOWNTO 0) & edg; --gauche WHEN ”01”=>stmp:= edd & stmp(3 DOWNTO 1); --droite WHEN OTHERS => ; --mémorisation END CASE; sortie <= stmp; END PROCESS Reg_dec; Schéma de principe d’un registre à décalage SIMPLE registre à décalage à droite OU à gauche On peut utiliser une variable à la place d’un signal Affecttation d’une variable Mavariable:= ma valeur; CONTRAIREMENT AU SIGNAUX LA VALEUR EST MISE A JOUR DE SUITE Rappel : & « colle » les signaux ensemble la sortie est SYNCHRONE Pas de retard supplémentaire car utilisation d’une variable Si emploi d’un signal à la place d’une variable affectation EN DEHORS DU PROCESS ( voir chapitre Mise à jour des signaux et page suivante pour un exemple)

39 Logique séquentielle: des exemples Registre à décalage simple  Sortie s é rie ( 1 seule sortie) LIBRARY ieee; 3 USE ieee.std_logic_1164.all; ENTITY shiftreg IS 6 GENERIC (n: INTEGER := 4); 7 PORT (d, clk, rst: IN STD_LOGIC; 8 q: OUT STD_LOGIC); 9 END shiftreg; ARCHITECTURE behavior OF shiftreg IS 12 SIGNAL internal: STD_LOGIC_VECTOR (n-1 DOWNTO 0); 13 BEGIN 14 PROCESS (clk, rst) 15 BEGIN 16 IF (rst='1') THEN 17 internal '0'); 18 ELSIF (clk'EVENT AND clk='1') THEN 19 internal <= d & internal(internal'LEFT DOWNTO 1); 20 END IF; 21 END PROCESS; 22 q <= internal(0); 23 END behavior;

40 Logique séquentielle: des exemples Registre à décalage  Sortie parall è le  Choix du sens LIBRARY ieee; USE ieee.std_logic_1164.all; USE work.std_arith.all; entity DECAL_DG is port (H,R,SENS :in std_logic; IN_OUT,OUT_IN :inout std_logic); end DECAL_DG; architecture ARCH_DECAL_DG of DECAL_DG is signal Q :std_logic_vector(3 downto 0); begin process(H,R) begin if R='1' then Q <= "0000"; elsif (H'event and H='1') then if SENS = '1' then Q <= Q(2 downto 0) & IN_OUT; else Q <= OUT_IN & Q(3 downto 1); end if; end process; OUT_IN <= Q(3) when SENS = '1' else 'Z'; IN_OUT <= Q(0) when SENS = '0' else 'Z'; end ARCH_DECAL_DG; Emploi de signaux et non de variables Affectation en dehors du process

41 Logique séquentielle: des exemples Une RAM LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY ram IS GENERIC ( bits: INTEGER := 8; -- # of bits per word words: INTEGER := 16); -- # of words in the memory PORT ( wr_ena, clk: IN STD_LOGIC; addr: IN INTEGER RANGE 0 TO words-1; data_in: IN STD_LOGIC_VECTOR (bits-1 DOWNTO 0); data_out: OUT STD_LOGIC_VECTOR (bits-1 DOWNTO 0)); 12 END ram; ARCHITECTURE ram OF ram IS TYPE vector_array IS ARRAY (0 TO words-1) OF STD_LOGIC_VECTOR (bits-1 DOWNTO 0); SIGNAL memory: vector_array; BEGIN PROCESS (clk, wr_ena) BEGIN IF (clk'EVENT AND clk='1') THEN IF (wr_ena='1') THEN memory(addr) <= data_in; END IF; END PROCESS; data_out <= memory(addr); END ram; Création d’un nouveau type: TYPE C’est un tableau de vecteurs Déclaration d’un signal du type créé précédemment

42 Logique séquentielle: des exemples Diviseur de fréquence  Diviseur par comptable  Possibilit é de faire par d é comptage aussi LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_arith.all; entity DIV_FREQ1 is port (H :in std_logic; N :in std_logic_vector(3 downto 0); DIV : out std_logic); end DIV_FREQ1; architecture ARCH_DIV_FREQ1 of DIV_FREQ1 is signal Q :std_logic_vector(3 downto 0); begin process(H) begin if (H'event and H='1') then if Q = 15 then Q <= N; else Q <= Q + 1; end if; end process; DIV <= '1' when Q = 15 else '0'; end ARCH_DIV_FREQ1; Application et utilisation d’un diviseur de fréquence On évitera de cascader la sortie du diviseur sur l’horloge du bloc suivant La bonne méthode: Horloge du système LA même pour tous les blocs La sortie du diviseur est une entrée de validation du bloc suivant Si En=‘1’ alors je compte

43 Logique séquentielle: des exemples Application et utilisation d’un diviseur de fréquence LIBRARY ieee; USE ieee.std_logic_1164.all; USE work.std_arith.all; entity COMPTCAS is port (H,R,EN :in std_logic; CO :out std_logic; Q :out std_logic_vector(3 downto 0)); end COMPTCAS; architecture ARCH_COMPTCAS of COMPTCAS is signal X :std_logic_vector(3 downto 0); begin process(H,R) begin if R='1' then X <= "0000"; elsif (H'event and H='1') then if EN = '1' then X <= X + 1; else X <= X; end if; end process; Q <= X; CO <= '1' when Q = 15 else '0'; end ARCH_COMPTCAS; LIBRARY ieee; USE ieee.std_logic_1164.all; USE work.std_arith.all; entity COMPT12 is port (H,RAZ,EN :in std_logic; CO :out std_logic; Q :out std_logic_vector(11 downto 0)); end COMPT12; architecture ARCH_COMPT12 of COMPT12 is signal X :std_logic_vector(11 downto 0); signal CO1,CO2,CO3,EN1 :std_logic; component COMPTCAS port (H,R,EN : in std_logic; CO : out std_logic; Q : out std_logic_vector(3 downto 0)); end component; begin COMPTEUR1 : COMPTCAS port map(H,RAZ,EN,CO1,Q(3 downto 0)); COMPTEUR2 : COMPTCAS port map(H,RAZ,CO1,CO2,Q(7 downto 4)); EN1 <= CO1 and CO2; COMPTEUR3 : COMPTCAS port map(H,RAZ,EN1,CO3,Q(11 downto 8)); CO <= CO1 and CO2 and CO3; end ARCH_COMPT12; COMPOSANT HAUT NIVEAU

44 Logique séquentielle: des exemples Détection d’un front  D é tection d ’ un changement d ’é tat d ’ un signal  Contrainte: DESCRIPTION SYNCHRONE Detection: PROCESS VARIABLE detect : std_logic_vector(1 DOWNTO 0); BEGIN WAIT UNTIL rising_edge (clk); -- c'est donc synchrone de clk front_montant <= '0'; front_descendant <= '0' ; detect(1) := detect(0); detect(0) := signal_lent; IF detect = "01" THEN front_montant <= '1'; END IF; IF detect = "10" THEN front_descendant <= '1'; END IF; END PROCESS; Rappel: la variable prend sa valeur instannément Le signal prend sa valeur à la sortie du process Équivalent à Process(clk) If (clk=‘1’ and clk’event) ……

45 Bibliographie  Certaines illustrations et exemples proviennent de cours ou d ’ ouvrages pr é sents ci- dessous Introduction à la Synth è se logique Philippe LECARDONNEL & Philippe LETENNEUR Le langage de description VHDL T. BLOTIN VHDl J.maillefert Circuit Design with VHDL Volnei A. Pedroni  Un lien bien utile pour l ’é tudiant GEII