0% ont trouvé ce document utile (0 vote)
14 vues74 pages

Cours VHDL 10

Le module M21.2 vise à enseigner aux étudiants en génie électrique la conception et l'utilisation des FPGA à travers des cours théoriques et des travaux pratiques. Il couvre des sujets tels que l'architecture des FPGA, les langages de description matérielle comme VHDL, et les méthodologies de conception. L'évaluation repose sur un contrôle continu, des travaux pratiques et un examen final, avec une note minimale de 12 pour valider le module.

Transféré par

omar haji
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
14 vues74 pages

Cours VHDL 10

Le module M21.2 vise à enseigner aux étudiants en génie électrique la conception et l'utilisation des FPGA à travers des cours théoriques et des travaux pratiques. Il couvre des sujets tels que l'architecture des FPGA, les langages de description matérielle comme VHDL, et les méthodologies de conception. L'évaluation repose sur un contrôle continu, des travaux pratiques et un examen final, avec une note minimale de 12 pour valider le module.

Transféré par

omar haji
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 74

M21.

Synthèse sur FPGA

Langage VHDL
VHSIC : Very High-Speed Integrated Circuits
HDL : Hardware Description Language
Objectif du module M21
 Fournir une base solide pour que les étudiants en génie électrique comprennent et développent des
systèmes basés sur des microcontrôleurs dans divers contextes industriels et technologiques ;
 Offrir une compréhension approfondie de la conception et de l'utilisation des FPGA dans divers
domaines de l'ingénierie électrique, en mettant l’accent sur la pratique et les applications réelles ;
 Introduire l’utilisation d’outils avancée de modélisation de systèmes électroniques et
d'implémentation sur des FPGA.

Contenu Synthèse sur FPGA


COURS :
 Introduction aux FPGA : Historique et évolution des FPGA, Architecture générale d'un FPGA, Comparaison avec
d'autres solutions : ASIC, Microprocesseur et DSP.
 Langages de description matérielle HDL : Principes de base des langages HDL (VHDL, Verilog) , Utilisation d’outils
de synthèse et de simulation.
 Conception de systèmes sur FPGA : Méthodologie de conception (flux de conception, étapes de développement),
Techniques avancées de conception avec prise en compte des contraintes temporelles et de consommation
électrique.
 Utilisation d'outils de génération de code pour l’implémentation sur FPGA d’application de traitement du signal,
commande de systèmes, ….
Travaux Pratiques :
 TP1 : Traitement du signal en temps réel sur FPGA.
 TP2: Implémentation sur FPGA de fonctions numériques pour le contrôle d’un dispositif.

2
Evaluation
- La note minimale pour valider le module doit être supérieure ou égale à 12

-La note minimale pour valider le composant module doit être supérieure ou égale à 12
La note du module : n = 0.50 x n1+ 0.50 x n2

Avec ni désigne la note globale de l’élément i du module :


ni=0.2 x nCC + 0.3 x nTP + 0.5 x nEF

- nCC = note du contrôle continu.


- nTP = notes de travaux pratiques.
- nEF = note de l’examen final de fin de semestre

Modalités de prise en compte de la note de Rattrapage :


ni=0.2 x nCC + 0.3 x nTP + 0.5 x nMax

- nMax = maximum (nEF ; Note de l’examen de rattrapage).

• La note minimale pour valider le module : 12.00/20


• Seuls les éléments de module dont la note est inférieure à 12.00/20 sont concernés par le rattrapage.
• La note finale après rattrapage du module est plafonnée à : 12.00/20

3
Introduction aux FPGA

Historique et évolution des FPGA, Architecture générale d'un FPGA,


Comparaison avec d'autres solutions : ASIC, Microprocesseur et DSP.
Introduction

 Besoin croissant des entreprises d’avoir du personnel qualifié dans la


programmation des cartes FPGA
FPGA (Field Programmable Gate Array)

6
Architecture

7
Comparaison de solutions numériques
Langages de description matérielle
HDL

Principes de base des langages HDL (VHDL, Verilog) , Utilisation


d’outils de synthèse et de simulation.
VHDL (HDL : Hardware Description Language)

 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 ( // ) Les deux portes
 Des comportements séquentiels travaillent en //

10
VHDL (HDL : Hardware Description Language)

 Langage formel pour la spécification des systèmes digitaux, aussi


bien au niveau comportemental que structurel

 Caractéristiques principales:
o description à plusieurs niveaux
o simulation activée par événements (event-driven)
o Modularité
o Extensibilité
o langage général, fortement typé
Entité et architecture
 Au plus haut niveau d’abstraction, un système digital est vu comme une “boîte
noire”, dont on connaît l’interface avec l’extérieur
 C’est l’entité (entity)

 Une entité doit toujours être associée avec au moins une description de son
implémentation:
 c’est l’architecture
Structure d’un programme VHDL
library ieee;
use ieee.std_logic_1164. all;

entity Telecom is
port (
Déclaration
des Nom de
entrées/sorties );
l’entité
end Telecom;

architecture Reseau of Telecom is


Déclaration
de
l’architecture begin Nom de l’architecture
Corps de
l’architecture
end Reseau;
VHDL: concepts de base
 Structure générale

14
Les types (1)
 VHDL est un langage fortement typé: toute donnée doit être déclarée
avant utilisation, en indiquant son type.

 Les types prédéfinis sont:


 Scalaire
o integer
o real
o enumerated
o physical
 Composé
o array
o record
 Pointeur
o acces
 I/O
o file
Les types (2)
 On peut également créer de nouveaux types, en fonction des types
prédéfinis.

 Par exemple:

type HuitBits is range 0 to 255;

type CodeDEtat is (init, ST1, ST2, exit);

type word is array (0 to 31) of bit;

type EtatsLogiques is record


valeur : integer range -127 to 128;
force : integer;
end record;
Les types (3)
 Les types de données les plus utilisés sont std_logic, pour les
données à un bit, et std_logic_vector, pour les bus

 Ces types ne sont pas prédéfinis: pour les utiliser, il faut déclarer le
paquet (package) std_logic_1164, qui fait partie de la
bibliothèque (library) IEEE:

library ieee;
use ieee.std_logic_1164. all ;
use ieee.std_logic_unsigned. all ;
Les types (4)

 Pour utiliser des fonctions arithmétiques sur les STD_LOGIC_VECTOR


on doit déclarer
 USE IEEE.NUMERIC_STD.ALL;
 ou USE IEEE.std_logic_arith.all;

 exemples
 Q<=Q+1; -- Q est un std_logic_vector et 1 est un entier!!
 A<B -- A et B des std_logic_vector
 Data<=CONV_STD_LOGIC_VECTOR(TEMP,8);
o Avec la déclaration: TEMP integer range 0 to 255;

18
Le type std_logic
 Une donnée de type std_logic possède une valeur parmi neuf possibles:
o ‘U’ uninitialized
o ‘X’ forcing unknown
o ‘0’ forcing 0
o ‘1’ forcing 1
o ‘Z’ high impedance
o ‘W’ weak unknown
o ‘L’ weak 0 (pull-down)
o ‘H’ weak 1 (pull-up)
o ‘-’ don’t care

 Pour une affectation, les valeurs utilisées sont: ’X’, ‘0’, ‘1’, ‘Z’
Opérateurs (1)

 Opérations logiques: (Type : boolean, bit, std_ulogic)


and or nand nor xor not

 Opérations de décalage
sll srl sla sra rol ror

 Opérations de signe:
+ -
Opérateurs (2)
 Relationnels ( retournent un boolean)
= /= < <= > >=

 Arithmétiques
 + - * / MOD

 Concaténations d’éléments : &


 "bon" & "jour" => "bonjour"
 "1001"&"0110"=>"10010110"

Un bus (ou ensemble


de fils électrique) est
représenté sous forme
d’un vecteur de bits

STD_LOGIC_VECTOR (3 DOWNTO 0);


21
Littéraux
 Caractères: ’0’ , ’x’ , ’a’ , ’%’

 Chaînes: ”11110101” , ”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

Ne pas confondre 1 bit


exemple ‘0’ ou ‘1’
Avec un vecteur de bits
"11" ou "1101110"
22
 Quelques notes sur la syntaxe d’un programme VHDL:
o pas de différentiation entre majuscules et minuscules
o format libre
o toute phrase termine par un point virgule
o le début d’un commentaire est signalé par un double trait (“--”).
Le commentaire termine avec la fin de ligne
Exercice

 Ecrire un programme VHDL pour réaliser le module suivant

A
S1

S2
B

24
Données traitées par VHDL
 Toute donnée traitée par VHDL doit être déclarée comme
constante, variable ou signal

 Constantes:
constant pi : real := 3.1416;
constant index_max : integer is 10*N;

 Variables:
 valeur modifiable immédiatement par une affectation (:=)
variable stop : boolean;
variable etat : CodeDEtat := ST0;

 Signaux:
 modélisation de l’entrée/sortie d’un dispositif.
 C’est une forme d’onde qui change avec le temps: la modification a
lieu à la prochaine itération de la simulation (retard delta)
Signaux

 Pour connecter les différents composants d’un système, VHDL utilise les
signaux (signal),
C’est l’équivalent des fils ou câbles d’interconnexion dans le monde réel

Initialisation
À éviter dans
 Exemple: la synthèse

signal s : std_logic := ’0’;


•••
s <= ’1’ after 10ns, ‘0’ after 18ns, ‘1’ after 25ns;

affectation
Signaux (suite)

 On peut associer certains attributs aux signaux, qui produisent une valeur.

 Exemples d’attributs :
o •s’ event :
(=vrai) si un événement arrive pendant le delta présent (c’est-à-dire, si le
signal s change de valeur)

o •s’ active:
(=vrai) si une transaction arrive pendant le delta présent (c’est-à-dire, si le
signal s est évalué, qu’il change ou pas de valeur)

 Un signal est toujours global à une architecture donnée


Logique combinatoire
 Assignation simples 1

library IEEE;
use IEEE.std_logic_1164.all;

entity ET3 is
port(
E : IN std_logic_vector(2 downto 0);
S : OUT std_logic
);
end ET3;

architecture arch_ET3 of ET3 is


begin
S <= E(2) and E(1) and E(0);
end arch_ET3;

28
Logique combinatoire
 Assignation simples 2

library IEEE;
use IEEE.std_logic_1164.all;

entity example is
port(
E:IN std_logic_vector(2 downto 0);
S1:OUT std_logic;
S2,S3:OUT std_logic_vector(3 downto 1);
S4:OUT std_logic_vector(2 downto 0)
);
end example;

architecture arch_example of example is


begin
S1 <= '0';
S2 <= '1'& E(1 downto 0);
S3 <= "101";
S4 <= "111" XOR E;
end arch_example;

29
Logique combinatoire: Instructions concurrentes
 Assignation conditionnelle
 Structure WHEN/ELSE

signal <= signal1 when expresion_boolénne else


………
signalx when expresion_boolénne else LIBRARY ieee;
signalpardéfaut; USE ieee.std_logic_1164.all;
---------------------------------------------
ENTITY encoder IS
PORT ( x: IN STD_LOGIC_VECTOR (3 DOWNTO 0);
y: OUT STD_LOGIC_VECTOR (1 DOWNTO 0));
END encoder;
---------------------------------------------
ARCHITECTURE encoder1 OF encoder IS
BEGIN
y <= "00" WHEN x="0001" ELSE
"01" WHEN x="0010" ELSE
"10" WHEN x="0100" ELSE
"11" WHEN x="1000" ELSE
"ZZ";
END encoder1;
---------------------------------------------
30
Exercice
Ecrire un programme VHDL au niveau comportemental puis réaliser un Testbench pour
tester le montage suivant

31
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

32
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: PORT MAP
 Ma Référence :port map ( liste ordonnée de signaux) ;
ou
 Ma Référence : port map ( port=> signal , port => signal ) ;

33
TD : additionneur 4 bits
étape 1: créer un composant ADDITIONNEUR 1 bits

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY adit1 IS PORT (


Ci, X, Y: IN STD_LOGIC;
S, Cout: OUT STD_LOGIC);
END adit1;

ARCHITECTURE Dataflow OF adit1 IS


BEGIN
Cout <= (X AND Y) OR (Ci AND (X XOR Y));
S <= X XOR Y XOR Ci;
END Dataflow;

34
TD : additionneur 4 bits
étape2: structurer le niveau supérieur ( comment faire 4 bits avec 1 bit?)

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;
TD : additionneur 4 bits
étape2: structurer le niveau supérieur ( comment faire 4 bits avec 1 bit?)

architecture arch_add4full of add4full is


-- declaration du composant add1full
component adit1 is
port(
Ci:IN std_logic;
X,Y:IN std_logic;
S,Cout:OUT std_logic
);
end component adit1;

-- declaration des fils internes pour le report carry


signal Fil1,Fil2,Fil3:std_logic;

begin
-- placement des 4 aditionneurs complets
U0: adit1 port map (Cin,A(0),B(0),Res(0),Fil1);
U1: adit1 port map (Fil1,A(1),B(1),Res(1),Fil2);
U2: adit1 port map (X=>A(2),Ci=>Fil2,Y=>B(2),Cout=>Fil3,S=>Res(2));
U3: adit1 port map (Fil3,A(3),B(3),Res(3),Cout);
end arch_add4full;
Exercice

37
Exercice
 B1B0 > A1A0

38
Exercice
 Réaliser puis simuler une bascule RS:
 à portes NAND
 à portes NOR

39
Processus (process)
 Une architecture en VHDL est un ensemble de processus exécutés
en parallèle (en concurrence)
 L’ordre relatif des processus à l’intérieur d’une architecture n’a
pas d’importance
 Il existe deux types de processus:
 le processus implicite ou phrase concurrente
 le processus explicite

architecture toto of test is


begin
c <= a and b; Processus implicites
z <= c when oe=‘1’ else ‘Z’;
Seq: process (clk, reset)
begin
Processus explicite
.
.
end process;
end toto;
Processus (process)
 Un processus explicite est un ensemble de phrases exécutées
séquentiellement:
 à l’intérieur d’un processus l’ordre des phrases a donc une
importance
 Un processus ne peut pas être déclaré à l’intérieur d’un autre
processus.

liste de sensibilité

procA: process (a, b)


déclarations du processus
étiquette optionnelle

begin
corps du processus
end process;
Logique séquentielle: le process
 Le mot clé PROCESS
 Syntaxe:
MONETIQUETTE : process (signal1, signal2 etc)
-- zone déclarative
Signal sFIL1,sFIL2 : xxxxxxxx
Begin
xxx
xxx
xxx
end process MONETIQUETTE;

 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
process Process
Process(a,b)
begin begin
begin
q <= d; c <= a and b;
c <= a and b;
wait until R = ‘1’; wait on a, b;
end process;
end process; end process;
42
TD
 Réaliser un conteur modulo 16
entity Compteur is
PORT (
Rst, Clk : in std_logic;
Cpt : out std_logic_vector (3 downto 0));
Clk 4Bits end Compteur ;

Compteur Cpt
architecture DESCRIPTION of Compteur is
signal Compt : std_logic_vector (3 downto 0);
Rst begin
process (Rst , Clk)
begin
if Rst = '0' then
Compt <= "0000";
elsif (Clk ='1' and Clk 'event) then
Compt <= Compt + 1;
end if;
end process;
Cpt <= Compt ;
end DESCRIPTION;

43
Résumé d’instructions

VHDL
Conception de systèmes sur FPGA

Méthodologie de conception (flux de conception, étapes de


développement), Techniques avancées de conception avec prise en
compte des contraintes temporelles et de consommation électrique.
Flot de conception

49
Conception
d’un CI en
VHDL

50
Spécification

Validation fonctionnelle

Design correct
non

oui

Validation temporelle

Spécifications
non temporelles
correctes
oui

Programmation

 Spécification : saisie du circuit logique (spécification syntaxique : VHDL, Verilog, mode graphique, etc.)

 Validation fonctionnelle : simulation fonctionnelle du concept (problèmes des sorites/sorties, boucles,


etc.). Vérification ne prenant pas en compte les aspects temporels du circuit

 Validation temporelle : Simulation temporelle (et fonctionnelle) du circuit (temps de propagation,


recouvrement de signaux, etc.).

 Implémentation : le programme est porté physiquement sur le circuit FPGA en fonction des spécifications
précisé par le programmeur (pins, etc.)
51
Outils de Conception

Utilisation d'outils de génération de code pour l’implémentation sur


FPGA d’application de traitement du signal, commande de systèmes, ….
Initiation à la programmation sous ISE de chez Xilinx

 On veut réaliser un additionneur

A S

B + R

53
Lancement de l’outil ISE

54
Création d’un nouveau projet
 File>New Project
 La fenêtre New Project Wizard – Create New Project apparaît, renseignez la avec les
valeurs voulues :
Project Name : nom de votre projet (attention pas d’espaces dans le nom)
Project Location : chemin de sauvegarde du projet et des fichiers associés
Top-Level Source Type : HDL
Cliquer sur Next
 et renseigner les informations suivantes:

55
Editer le programme
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity bloc is
Port ( A : in STD_LOGIC;
B : in STD_LOGIC;
S : out STD_LOGIC;
R : out STD_LOGIC);
end bloc;

architecture Behavioral of bloc is

begin
S <= A xor B ;
R <= A and B ;

56
end Behavioral;
Synthèse

 En double cliquant à gauche sur la ligne Synthesize – XST vous


lancer automatiquement le synthétiseur Xilinx XST

 Il est possible de visualiser le rapport de synthèse qui comporte


toutes les informations sur le résultat de synthèse, on peut voir
comment le synthétiseur à transformer la description en un
circuit au niveau RTL (Register Transfert Level).
 On peut visualiser le schéma RTL (schéma avec des fonctions simple
de l’électronique numérique)
 Ou le schéma Technologique (schéma avec les éléments internes du
FPGA, LUT ou registre par exemple).

57
Testbench
 VHDL est à la fois un langage de synthèse, et de simulation
 Un testbenchVHDL est un code VHDL destiné à la vérification, par
simulation, du bon fonctionnement d’un système
 Dans l’industrie, les testbenchs jouent un rôle très important ; ils sont
intégrés dans les spécifications d’un système

58
Structure d’un fichier VHDL

59
Exemple d’un programme à tester
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity porte is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
x : out STD_LOGIC);
end porte;

architecture Behavioral of porte is

begin

x <= a xor b;

end Behavioral;
60
Fichier testbench

library IEEE;
use IEEE.STD_LOGIC_1164.ALL; signal E1: STD_LOGIC :='0';
signal E2: STD_LOGIC :='0';
entity testbench is signal S: STD_LOGIC ;
end testbench;
begin
architecture Behavioral of testbench is
uut: porte port map (a=>E1,
b=>E2, x=>S);
component porte is
E1<='1' after 100 ns, '0' after 300 ns;
Port ( a : in STD_LOGIC;
E2<='1' after 150 ns, '0' after 350 ns;
b : in STD_LOGIC;
x : out STD_LOGIC);
end Behavioral;
end component;

61
Exercice

 Ecrire un programme VHDL pour réaliser le schéma suivant


 Vérifier le programme à l’aide de l’outil ISE

A
S1

S2
B

62
TD

CLK
50MHz 1..10Hz 4Bits
Diviseur Compteur Codeur
Modulo 16 BCD/7Segments

Reset

Combinatoire
Séquentiel
entity diviseur is
PORT (
clk : in std_logic;
Div : out std_logic);
CLK Div
50MHz 1..10Hz
end diviseur;
Diviseur
architecture DESCRIPTION of diviseur is
signal CMP: std_logic_vector (24 downto 0);
begin
detection : process
begin

WAIT UNTIL rising_edge (clk);

CMP <= CMP + 1;


if (CMP > "0111111111111111111111111") then
Div <= '1';
else
Div <= '0';
end if;
end process;

end DESCRIPTION;
entity diviseur is
PORT (
clk : in std_logic;
Div : out std_logic);
CLK Div
50MHz 1..10Hz
end diviseur;
Diviseur
architecture DESCRIPTION of diviseur is
signal CMP: std_logic_vector (24 downto 0);
begin
detection : process (clk)
begin

if (clk=‘1’ and clk’event) then


CMP <= CMP + 1;
if (CMP > "0111111111111111111111111") then
Div <= '1';
else
Div <= '0';
end if;
End if;
end process;

end DESCRIPTION;
entity Compteur is
PORT (
Clock 4Bits
Reset, Clock : in std_logic;
Compteur S : out std_logic_vector (3 downto 0));
Modulo 16
end Compteur ;
Reset

architecture DESCRIPTION of Compteur is


signal Compt : std_logic_vector (3 downto 0);
begin
process (Reset , Clock)
begin
if Reset = '0' then
Compt <= "0000";
elsif (Clock ='1' and Clock 'event) then
Compt <= Compt + 1;
end if;
end process;
S <= Compt ;
end DESCRIPTION;
entity decod is
port (
a : in std_logic_vector(3 downto 0);
segment : out std_logic_vector(6 downto 0)
);
end decod;
4Bits
Codeur
BCD/7Segments architecture descrip of decod is
begin
with a select
segment <= "1000000" when x"0",
"1111001" when x"1",
Combinatoire "0100100" when x"2",
"0110000" when x"3",
"0011001" when x"4",
"0010010" when x"5",
"0000010" when x"6",
"0111000" when x"7",
"0000000" when x"8",
"0010000" when x"9",
"0001000" when x"A",
"0000011" when x"B",
"1000110" when x"C",
"0100001" when x"D",
"0000110" when x"E",
"0001110" when x"F",
"1000000" when others ;
End descrip;
TD: Registre à décalage universel
IL I3 I2 I1 I0 IR

S0
S1
REG_DEC

CLOCK

Q3 Q2 Q1 Q0

(1s + 1s + 4p) entrées/4p sorties


1 entrée horloge
2 entrées de sélection qui permettent de choisir le mode :

S0 S1 Fonction réalisée après le top horloge Opération


0 0 Q[3..0] <=Q[3..0] Pas de changement
0 1 Q[3..0] <=I[3..0] Chargement parallèle
1 0 Q[3..1]<=Q[2..0], Q[0]<=IR Décalage à gauche avec IR
1 1 Q[3]<=IL, Q[2..0]<=Q[3..1] Décalage à droite avec IL

68
IL I3 I2 I1 I0 IR

S0
S1
REG_DEC LIBRARY ieee;
CLOCK
USE ieee.std_logic_1164.all;
---------------------------------------

Q3 Q2 Q1 Q0
ENTITY Reg0 IS
PORT (
CLOCK, S0, S1 : IN STD_LOGIC;
IL, IR : in bit;
I : IN bit_VECTOR(3 downto 0);
Q : OUT bit_VECTOR(3 downto 0)
);
END Reg0;

69
ARCHITECTURE decaller OF Reg0 IS
IL I3 I2 I1 I0 IR
signal decal : bit_VECTOR(3 downto 0);
BEGIN
PROCESS (CLOCK)
S0 BEGIN
S1
REG_DEC IF (CLOCK'EVENT AND CLOCK='1') THEN
if(S0='0' and S1='1') then
CLOCK decal<=I;
else if(S0='1' and S1='0') then
Q3 Q2 Q1 Q0
decal<=decal SLL 1;
decal(0) <= IR ;
else if(S0='1' and S1='1') then
decal<=decal SRL 1;
decal(3) <= IL ;
end if;
end if;
end if;
END IF;
END PROCESS;
Q <= decal;
END decaller;
70
LIBRARY ieee;
USE ieee.std_logic_1164.all;
---------------------------------------
D Q
ENTITY bascule IS
PORT ( d, clk: IN STD_LOGIC;
q: BUFFER STD_LOGIC;
CLOCK Q
qbar: OUT STD_LOGIC
);
END bascule;
---------------------------------------
ARCHITECTURE ok OF bascule IS
BEGIN
PROCESS (clk)
BEGIN
IF (clk'EVENT AND clk='1') THEN
q <= d;
END IF;
END PROCESS;
qbar <= NOT q;
END ok;

71
LIBRARY ieee;
USE ieee.std_logic_1164.all;
Q0 Q1 Q2 Q3 ---------------------------------------
S1 1 ENTITY multiplexeur IS
PORT ( S : IN integer range 0 to 3;
S0 0
D Q : IN STD_LOGIC_VECTOR(3 downto 0);
D : OUT STD_LOGIC
);
END multiplexeur;
---------------------------------------
ARCHITECTURE choix OF multiplexeur IS
BEGIN
with S select
D<= Q(0) when 0,
Q(1) when 1,
Q(2) when 2,
Q(3) when 3;
END choix;
---------------------------------------

72
IL Q2 I3 Q3 Q3 Q1 I2 Q2 Q2 Q0 I1 Q1 Q1 IR I0 Q0

S1 S1 S1 S1
U1 U2 U3 U4
S0 S0 S0 S0

U5 U6 U7 U8
D Q D Q D Q D Q

Q Q Q Q

CLOCK

Q3 Q2 Q1 Q0

73
(Sortie série avec Choix du sens)
entity DECAL_DG is
port (CLK, 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(CLK)
begin
if (CLK'event and CLK='1') then
if SENS = '1' then
Q <= Q(2 downto 0) & IN_OUT;
else Q <= OUT_IN & Q(3 downto 1);
end if;
end if;
end process;

OUT_IN <= Q(3) when SENS = '1' else 'Z';


IN_OUT <= Q(0) when SENS = '0' else 'Z';

74 end ARCH_DECAL_DG;

Vous aimerez peut-être aussi