Vous êtes sur la page 1sur 54

Cours #5 Conception de chemins des donnes

Conception et implmentation de systmes numriques

Plan

Processeurs: introduction Modules combinatoires: multiplexeurs, dcodeurs et encodeurs lments mmoire pour chemins des donnes: registres chargement parallle et dcalage, bloc de registres, RAM Units fonctionnelles: units arithmtiques, units logiques, comparateurs, compteurs

Conception et implmentation de systmes numriques

Un exemple pour commencer

Conception et implmentation de systmes numriques

Source: Wikipdia

Un exemple pour commencer


Moteurs des plateaux

Clavier

Processeur

M M M M

tat Grer largent Grer linventaire senseur de pices

actuateurs pour rendre la monnaie

affichages

Conception et implmentation de systmes numriques

Deux types de processeurs

Un processeur est un type spcial de systme numrique dont le but est de traiter des donnes par une succession dtapes simples, pouvant rsulter en un traitement global complexe. Un processeur doit acqurir des donnes, les traiter, et produire un rsultat sous forme numrique ou vido. On distingue deux types principaux de processeurs: Les processeurs usage gnralpeuvent tre programms. Le programme excut par un processeur est gard en mmoire sous la forme dune liste dinstructions.
On rfre souvent ce type de processeur par le nom de microprocesseur. Un microcontrleur est un cas particulier dun processeur usage gnral. Un processeur spcialis est un processeur usage gnral auquel on a ajout des instructions spciales. Les processeurs usage spcifique sont des processeurs non programmables qui sont conus dans le but de rpondre un besoin unique. Ils sont plus simples et plus efficaces que les processeurs usage gnral. Ils ne peuvent pas en gnral tre facilement reprogramms.

Conception et implmentation de systmes numriques

Parties dun processeur

Un processeur est compos de deux parties: Le chemin des donnes (datapath) traite les donnes. Il inclut:

des registres; des units fonctionnelles (comme une unit arithmtique et logique) un mcanisme de commutation pour transfrer et manipuler les donnes.

Lunit de contrle (control unit) est responsable du squencement des oprations


excuter par le chemin de donnes selon des entres externes et le rsultat des oprations.
Entre des donnes Sortie des donnes

Chemin des donnes

Contrle

tat

Entres de contrle

Unit de contrle

Sorties de contrle

Conception et implmentation de systmes numriques

Architecture dun chemin des donnes

Un chemin des donnes a deux parties principales: un bloc de registres qui conserve les donnes traiter et des rsultats prcdents, de faon pouvoir combiner toutes ces valeurs dans de nouveaux calculs. des units fonctionnelles pour effectuer des oprations sur les donnes conserves dans les registres. Des modules combinatoires permettent de choisir, router et contrler le flot dinformation entre les registres et les units fonctionnelles.

Entres Horloge
charger

Registres
registres charger registres lire

Units fonctionnelles et modules combinatoires


opration tat

Sorties

Conception et implmentation de systmes numriques

Architecture dun chemin des donnes Exemple: processeur BlackFin

Conception et implmentation de systmes numriques

Analog Devices, BlackFin Embedded Processor ADSP-BF534/ADSP-BF536/ADSP-BF537, 2009.

Conception de chemins des donnesavec lapproche RTL

Lapproche RTL (Register Transfer Level) est la plus populaire pour la conception de chemins des donnes. Elle saccorde bien aux langages de description matrielle comme VHDL et Verilog. Dans lapproche RTL, le concepteur spcifie les registres du processeur, les transferts de donnes entre ces registres, les oprations effectuer et les signaux de contrle pour grer ces activits. Lapproche RTL peut tre dcompose en quatre tapes: 1. Analyse du problme afin de comprendre le flot des donnes travers le processeur. 2. Conception du chemin des donnes, identification des signaux de contrle et dtat. 3. Conception de lunit de contrle du processeur laide dune machine tats gnrant des signaux de contrle. 4. Vrification que le processeur rsultant rencontre les spcifications.

Conception et implmentation de systmes numriques

Approche RTL et micro-oprations

Une micro-opration est une opration lmentaire effectue sur les donnes gardes dans des registres, en mmoire ou des donnes externes. La spcification dune micro-opration inclut: les oprandes (registres ou donnes externes); la nature de la micro-opration effectuer; lendroit o le rsultat de la micro-opration doit tre sauvegard; et, une condition remplir pour que la micro-opration soit effectue. On distingue quatre types principaux de micro-oprations: les transferts entre registres; les micro-oprations arithmtiques (addition, soustraction, multiplication, division, reste) les micro-oprations logiques (NON, ET, OU, OUX, etc.); et, le dcalage.

Conception et implmentation de systmes numriques

Approche RTL et micro-oprations


La notation RTL est une forme de pseudocode. On peut utiliser des noms de registres (R0, R1, etc.) ou des identificateurs plus reprsentatifs. Le symbole indique une assignation de valeur. Le principe de la concurrence des oprations est intrinsque lapproche RTL.
Micro-opration Signification Copier le contenu de R1 dans R0. Placer la somme de R1 et de R3 dans R2. Placer le rsultat de lopration ET logique entre R2 et R3 dans R2. Si le signal de contrle K1 est actif, placer le rsultat du dcalage logique vers la gauche de 3 positions du registre R1 dans le registre R2; sinon, ne rien faire. Simultanment, placer la diffrence entre R1 et R3 dans R2 et copier le contenu de R0 dans R4.

R0 R1 R2 R1 + R3 R2 R2 ET R3 K1: R2 sll R1, 3 R2 R1 R3, R4 R0


sll: shift logical left

Conception et implmentation de systmes numriques

Exemples dimplmentation de micro-oprations

R0 R1

K1: R0 R1

Entres Horloge
charger

Registres
registres charger registres lire

Units fonctionnelles et modules combinatoires


opration tat

Sorties

Conception et implmentation de systmes numriques

lments mmoire pour chemins des donnes Registre chargement parallle


Un registre est llment mmoire de base pour des donnes. Un registre est utilis pour entreposer une information, encode sur un groupe de bits, comme par exemple un octet de mmoire dans un ordinateur ou le contenu de laccumulateur dune calculatrice. Un registre est compos dun groupe de bascules contrles par une horloge commune et dont les entres et sorties partagent un identificateur commun. Chaque bascule du registre est diffrencie des autres par un indice unique. Un registre chargement parallle comporte un signal de chargement qui permet de moduler le signal dhorloge. Quand ce signal est actif, le contenu du registre est modifi sur une transition de lhorloge. Dans le cas contraire, le contenu du registre reste inchang.
0

D3:D0 charge
Conception et implmentation de systmes numriques

/ 4

/ 4

Q3:Q0

clk

CLK

Q'

Exemples dimplmentation de micro-oprations


R2 R2 + R3 K2: R2 R2 + R3 K2: R2 R2 + R3
Pas recommand: mieux vaut utiliser le signal de chargement dune bascule.

Entres Horloge
charger

Registres
registres charger registres lire

Units fonctionnelles et modules combinatoires


opration tat

Sorties

Conception et implmentation de systmes numriques

Exemple dimplmentation de micro-oprations


K2K1: R2 R0 + R1, K2K1: R2 R0 + R3

Entres Horloge
charger

Registres
registres charger registres lire

Units fonctionnelles et modules combinatoires


opration tat

Sorties

Conception et implmentation de systmes numriques

Exemples dimplmentation de micro-oprations


K4: R0 sll R2, 1 K4K6: R5 sll R7,R9 ;K4K6: R5 slr R7,R9

Conception et implmentation de systmes numriques

Synchronisation des oprations du chemin des donnes


Le bloc des registres est contrl par un signal dhorloge. chaque coup dhorloge, le bloc des registres peut emmagasiner: une nouvelle donne provenant du port des entres; un rsultat qui vient dtre calcul par lunit fonctionnelle; ou bien, effectuer un transfert entre deux registres (via lunit fonctionnelle en gnral). Entre deux coups dhorloge, lunit fonctionnelle: lit des donnes provenant du bloc des registres; effectue les calculs spcifis par le code dopration qui lui est appliqu; et, applique les rsultat ses ports de sortie;
Une micro-opration ne prend effet que lors dune transition active du signal dhorloge. Le bloc des registres ne saisit un rsultat calcul par lunit fonctionnelle que lors de la prochaine transition dhorloge. La priode dhorloge doit tre suffisamment longue pour que lunit fonctionnelle ait le temps deffectuer son traitement.
Conception et implmentation de systmes numriques

Synchronisation des oprations du chemin des donnes

Conception et implmentation de systmes numriques

Plan

Processeurs: introduction Modules combinatoires: multiplexeurs, dcodeurs et encodeurs lments mmoire pour chemins des donnes: registres chargement parallle et dcalage, bloc de registres, RAM Units fonctionnelles: units arithmtiques, units logiques, comparateurs, compteurs

Conception et implmentation de systmes numriques

Modules combinatoires utiles Multiplexeur

Un multiplexeur permet de choisir un seul signal partir dun ensemble de signaux, selon la valeur dun signal de contrle. Un multiplexeur a: un groupe de signaux dentre D; un groupe de signaux de contrle S (pour slection); et, un signal de sortie F. Le signal de sortie est gal au signal dentre choisi par les signaux de contrle.
D0 0 F D1 1 D1 D0 S F

S S1 S0

D0

D0 D1 D2 D3

0 1 2 3 D2

D1

S1

Conception et implmentation de systmes numriques

S0

D3

Modules combinatoires utiles Multiplexeur 2:1 en VHDL

library IEEE; use IEEE.STD_LOGIC_1164.all; entity mux21 is port(D0, D1, S : in STD_LOGIC; F : out STD_LOGIC); end mux21; architecture flotDeDonnees of mux21 is begin with S select F <= D0 when '0', D1 when others; end flotDeDonnees;

Pas ncessaire de donner les quations boolennes. Assignation choisie avec tous les cas couverts.

Conception et implmentation de systmes numriques

Modules combinatoires utiles Multiplexeur gnral en VHDL


library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity mux is generic ( n : positive := 3 -- nombre de signaux de contrle ); port ( D : in std_logic_vector(2 ** n - 1 downto 0); S: in unsigned(n - 1 downto 0); F : out std_logic ); end mux; architecture comportementale of mux is begin process (D, S) begin F <= D(to_integer(S)); end process; end comportementale;

Description comportementale trs compacte. Normalement on ne dcrirait pas un multiplexeur dans une entit spare, on utiliserait plutt le patron de code dans un module.
Conception et implmentation de systmes numriques

Rappel: loquet D en VHDL

Un loquet D peut-tre modlis en VHDL par un nonc if-then lintrieur dun processus. Le processus doit avoir dans sa liste de sensitivit le signal de contrle G et le signal de donne D. Le signal D est assign la sortie Q quand le signal de contrle G est actif (mode transparent)
library ieee; use ieee.std_logic_1164.all; entity loquetD is port ( G : in STD_LOGIC; -- contrle D : in STD_LOGIC; -- donne Q : out STD_LOGIC ); end loquetD; architecture loquetD of loquetD is begin process(G, D) is begin if (G = '1') then Q <= D; -else -- implicite, infre lment mmoire --- ne pas changer Q end if; end process; end loquetD;

Patron de code spcial reconnu par les synthtiseurs pour signifier un loquet.

Conception et implmentation de systmes numriques

Modules combinatoires utiles Dcodeur: exemple dutilisation

Exemple: systme de gicleurs automatiques autour dune rsidence. La pression de laqueduc municipal est insuffisante pour activer tous les gicleurs en mme temps. Les gicleurs sont diviss en quatre zones. Une seule zone doit arroser la fois. Chaque zone est munie dune valve. Un dcodeur permet douvrir une seule valve la fois. Une valve principale doit aussi tre ouverte.
Conception et implmentation de systmes numriques

Modules combinatoires utiles Dcodeur


Un dcodeur active un signal spcifique correspondant un code numrique en particulier. Un dcodeur a n signaux dentre et 2n signaux de sortie. Chacun des signaux de sortie correspond un des mintermes et maxtermes composs des signaux dentre. Une et une seule ligne de sortie est active un moment donn. Le numro de la ligne active correspond la valeur binaire applique aux lignes dentre. Selon les dcodeurs, la ligne active pourra tre une valeur 0 ou une valeur 1, et toutes les autres lignes seront lautre valeur.
Table de vrit dun dcodeur 3:8 (A2, A1, A0) sont les entres. (F7, F6, , F0) sont les sorties.
Conception et implmentation de systmes numriques

Modules combinatoires utiles Dcodeur 3:8 en VHDL


library ieee; use ieee.std_logic_1164.all; entity decodeur38 is port( A : in std_logic_vector(2 downto 0); F: out std_logic_vector(7 downto 0) ); end decodeur38; architecture flotDeDonnees of decodeur38 is begin with A select "00000001" "00000010" "00000100" "00001000" "00010000" "00100000" "01000000" "10000000" (others => F <= when when when when when when when when 'X')

"000", "001", "010", "011", "100", "101", "110", "111", when others;

end flotDeDonnees;

Une assignation choisie spcifie les huit cas possibles du signal dentre F. Lutilisation de la clause others permet de rendre le modle plus robuste la simulation. En effet, le type std_logic peut prendre des valeurs autres que 0 et 1 voir notes de cours 3. Lors de la simulation, si le signal F prend une valeur comme X1W, la sortie du dcodeur sera un vecteur de X. Lexpression (others => X) permet dassigner la valeur X chacun des lments du vecteur F.

Conception et implmentation de systmes numriques

Parenthse: agrgats en VHDL

En VHDL, un agrgat est une opration de base qui combine plusieurs valeurs en une valeur compose.

-- Exemple 1 variable Data_1 : BIT_VECTOR (0 to 3) := ('0','1','0','1'); -- assignation positionelle -- Exemple 2 variable Data_2 : BIT_VECTOR (0 to 3) := (1=>'1',0=>'0',3=>'1',2=>'0'); -- assignation nomme -- Exemple 3 signal Data_Bus : Std_Logic_Vector (15 downto 0); . . . Data_Bus <= (15 downto 8 => '0', 7 downto 0 => '1'); -- assignation positionelle avec gammes dindices -- Exemple 4 type Status_Record is record Code : Integer; Name : String (1 to 4); end record; variable Status_Var : Status_Record := (Code => 57, Name => "MOVE"); -- Exemple 5 signal Data_Bus : Std_Logic_Vector (15 downto 0); . . . Data_Bus <= (14 downto 8 => '0', others => '1'); -- utilisation du choix others (en dernier) -- Exemple 6 signal Data_Bus : Std_Logic_Vector (15 downto 0); . . . Data_Bus <= (others => 'Z'); -- utilisation du choix others par lui-mme

Conception et implmentation de systmes numriques

Modules combinatoires utiles Dcodeur gnral en VHDL


library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity decodeur is generic ( n : positive := 3; -- nombre de signaux d'entre valeurActive : std_logic := '1' ); port( A : in std_logic_vector(n - 1 downto 0); F: out std_logic_vector(2 ** n - 1 downto 0) On exploite le fait que les noncs sont excuts de ); faon squentielle lintrieur dun processus. Pour end decodeur; architecture comportementale of decodeur is begin process(A) begin F <= (others => not(valeurActive)); F(to_integer(unsigned(A))) <= valeurActive; end process; end comportementale;

dbuter, toutes les sorties sont dsactives. Ensuite, seule celle dont le numro correspond au signal dentre est active.

Conception et implmentation de systmes numriques

Modules combinatoires utiles Encodeur priorit


Un encodeur identifie un signal actif parmi un ensemble de signaux, et produit un code qui correspond ce signal actif. Un encodeur fonctionne de faon contraire un dcodeur. Il a n lignes de sortie et 2n lignes dentre. Le code la sortie reprsente le numro de la ligne qui est active. Un signal de sortie spcial indique si au moins une des lignes en entre est active. Un encodeur priorit permet davoir plus dune ligne dentre active la fois. La priorit peut tre accorde la ligne ayant le plus grand ou le plus petit numro, ou selon un autre choix.
Table de vrit partielle dun encodeur 8:3 (D7, D6, , D0) sont les entres. (A2, A1, A0 et V) sont les sorties.

Conception et implmentation de systmes numriques

Plan

Processeurs: introduction Modules combinatoires: multiplexeurs, dcodeurs et encodeurs lments mmoire pour chemins des donnes: registres chargement parallle et dcalage, bloc de registres, RAM Units fonctionnelles: units arithmtiques, units logiques, comparateurs, compteurs

Conception et implmentation de systmes numriques

lments mmoire pour chemins des donnes Registre chargement parallle


Un registre est llment mmoire de base pour des donnes. Un registre est utilis pour entreposer une information, encode sur un groupe de bits, comme par exemple un octet de mmoire dans un ordinateur ou le contenu de laccumulateur dune calculatrice. Un registre est compos dun groupe de bascules contrles par une horloge commune et dont les entres et sorties partagent un identificateur commun. Chaque bascule du registre est diffrencie des autres par un indice unique. Un registre chargement parallle comporte un signal de chargement qui permet de moduler le signal dhorloge. Quand ce signal est actif, le contenu du registre est modifi sur une transition de lhorloge. Dans le cas contraire, le contenu du registre reste inchang.
0

D3:D0 charge
Conception et implmentation de systmes numriques

/ 4

/ 4

Q3:Q0

clk

CLK

Q'

Registre chargement parallle


library IEEE; use IEEE.STD_LOGIC_1164.all; entity registre is generic ( W : integer := 8 ); port( reset : in STD_LOGIC; CLK : in STD_LOGIC; charge : in STD_LOGIC; D : in STD_LOGIC_VECTOR(W - 1 downto 0); Q : out STD_LOGIC_VECTOR(W - 1 downto 0) ); end registre; architecture arch of registre is begin process (CLK, reset) begin if reset='0' then Q <= (others => '0'); elsif CLK='1' and CLK'event then if charge='1' then Q <= D; end if; end if; end process; end arch;

Conception et implmentation de systmes numriques

lments mmoire pour chemins des donnes Registre dcalage


Un registre dcalage peut dcaler ses bits vers la gauche ou la droite. En gnral, un registre dcalage ne dcale son contenu que dune position par coup dhorloge. Un registre dcalage de 1 position peut tre construit par une cascade de bascules D dont la sortie est relie lentre de la bascule suivante. Un registre dcalage peut tre utilis pour faire une conversion entre les formats srie et parallle et est donc une composante fondamentale de plusieurs circuits de communication. Un registre dcalage permet aussi deffectuer: la multiplication par un puissance de deux, qui correspond un dcalage de bits vers la gauche; la division par une puissance de deux, qui correspond un dcalage vers la droite.

Conception et implmentation de systmes numriques

Registre de 4 bits dcalage de 1 position et chargement parallle


Q0 D0 entreeSerie Q1
0 1 2 3

Q0

CLK Q1 D1 Q0 Q2
0 1 2 3

Q' Q
Q1

Les multiplexeurs partagent le mme signal de contrle mode. Ce module est trs polyvalent, il a quatre modes de fonctionnement. mmoire chargement parallle dcalage vers la gauche (Q0 vers Q3) dcalage vers la droite (Q3 vers Q0)

CLK Q2 D2 Q1 Q3
0 1 2 3

Q' Q
Q2

CLK Q3 D3 Q2 entreeSerie mode / 2


0 1 2 3

Q' Q
Q3

CLK

Q'

Conception et implmentation de systmes numriques

Registre de 4 bits dcalage et chargement parallle Modle VHDL


library IEEE; use IEEE.STD_LOGIC_1164.all; entity registreadecallage is generic ( W : integer := 8 -- nombre de bits du registre ); port( reset : in STD_LOGIC; CLK : in STD_LOGIC; mode : in STD_LOGIC_VECTOR(1 downto 0); -- mode entreeSerie : in STD_LOGIC; -- entree serielle D : in STD_LOGIC_VECTOR(W - 1 downto 0); Q : out STD_LOGIC_VECTOR(W - 1 downto 0) ); end registreadecallage; architecture arch of registreadecallage is begin process (CLK, reset) variable Qinterne : STD_LOGIC_VECTOR(W - 1 downto 0); begin if reset='0' then Qinterne := (others => '0'); Q <= (others => '0'); elsif CLK='1' and CLK'event then case mode is when "00" => -- garde Qinterne := Qinterne; when "01" => -- charge Qinterne := D; when "10" => -- decale gauche Qinterne := Qinterne(W - 2 downto 0) & entreeSerie; when "11" => -- decale droite Qinterne := entreeSerie & Qinterne(W - 1 downto 1); when others => Qinterne := Qinterne; end case; Q <= Qinterne; end if; end process; end arch;

Utilisation dune variable Qinterne parce quon ne peut pas lire un port de sortie (Q) en VHDL.

Conception et implmentation de systmes numriques

lments mmoire pour chemins des donnes Bloc de registres


Un bloc de registres (register file) regroupe plusieurs registres dun chemin des donnes. Cest effectivement une petite mmoire qui rassemble plusieurs des donnes du circuit. Un bloc de registres compos de plusieurs registres de largeurs identiques qui partagent des ports dentre et de sortie. Le nombre de registres peut varier de 1 seul 1024, et leur largeur peut varier de 4 128 bits. Par exemple, pour un microprocesseur de 32 ou 64 bits, le nombre rfre la largeur des registres du bloc des registres. Le bloc des registres a en gnral plusieurs ports dentre et de sortie indpendants. Des signaux de contrle permettent de choisir quel registre est dirig chacune des sorties, et quels registres doivent tre chargs.

Conception et implmentation de systmes numriques

lments mmoire pour chemins des donnes Bloc de registres


donne

D R0 charge

charge

choixA

D 2:4
choixCharge

0 1 2 3

R1 charge

D R2 charge

Q
choixB

D R3 charge

Un bloc de registre peut avoir plusieurs ports dentre et de sortie. Un registre peut la fois tre la cible dune criture et la source pour lun des ports de sortie.

Conception et implmentation de systmes numriques

Version coteuse en multiplexeurs!

Rappel: architecture dun chemin des donnes

Entres Horloge
charger

Registres
registres charger registres lire

Units fonctionnelles et modules combinatoires


opration tat

Sorties

Conception et implmentation de systmes numriques

lments mmoire pour chemins des donnes Bloc de registres: version avec tampons trois tats
R0A donne

D R0 charge

R0B

A B

charge

R1A

D 2:4
choixCharge

R1B

2:4
choixA

0 1 2 3

R1 charge
R2A

0 1 2 3

R0A R1A R2A R3A

D R2 charge

R2B

2:4
choixB R3A

0 1 2 3

R0B R1B R2B R3B

D R3 charge

R3B

Conception et implmentation de systmes numriques

lments mmoire pour chemins des donnes Bloc de registres: code VHDL
-- dans la partie dclarative de larchitecture type lesRegistres_type is array(0 to Nreg - 1) of signed(Wd - 1 downto 0); signal lesRegistres : lesRegistres_type; signal A : signed(Wd - 1 downto 0); signal choixA : integer range 0 to Nreg - 1; signal B : signed(Wd - 1 downto 0); signal choixB : integer range 0 to Nreg - 1; signal donnee : signed(Wd - 1 downto 0); signal choixCharge : integer range 0 to Nreg - 1; signal charge : std_logic; -- dans le corps de larchitecture process (CLK, reset) begin if rising_edge(CLK) then if reset = '1' then lesRegistres <= (others => (others => '0')); else if charge = '1' then lesRegistres(choixCharge) <= donnee; Ici: un port dcriture, deux ports de lecture end if; end if; end if; Implmentation par multiplexeurs ou tampons trois end process;

tats?

-- signaux de sortie du bloc des registres A <= lesRegistres(choixA); B <= lesRegistres(choixB);

Expression (others=>(others=>'0')) parce que le bloc des registres est une structure de donnes deux dimensions. Wd et Nd sont des generic de lentit.

Conception et implmentation de systmes numriques

lments mmoire pour chemins des donnes Mmoire vive

Une mmoire vive peut tre vue comme un bloc de registres de trs grande taille, avec: un (parfois deux) port de sortie un (parfois deux) port dentre un (parfois deux) port dadresse un port de contrle de lopration. La description dune mmoire des donnes en VHDL peut prendre plusieurs formes, selon une multitude de paramtres. Ceux-ci incluent, entre autres: le nombre de ports dentre et de sortie; le fait que les sorties soient synchrones ou asynchrones; le nombre de cycles ncessaires la mmoire pour dplacer des donnes; la prsence de signaux dactivation; et, la spcification de valeurs initiales.
Il faut consulter la documentation du synthtiseur pour adopter le bon patron de code VHDL correspondant aux paramtres de la mmoire RAM dsire.
Conception et implmentation de systmes numriques

lments mmoire pour chemins des donnes Mmoire vive


-- dans la partie dclarative de larchitecture type memoireDonnees_type is array(0 to 2 ** Md - 1) of signed(Wd - 1 downto 0); signal memoireDonnees : memoireDonnees_type; signal sortieMemoireDonnees : signed(Wd - 1 downto 0); signal adresseMemoireDonnees : integer range 0 to 2 ** Md - 1; signal lectureEcritureN : std_logic; -- dans le corps de larchitecture -- mmoire des donnes process (CLK) begin if rising_edge(CLK) then if lectureEcritureN = '0' then memoireDonnees(adresseMemoireDonnees) <= B; end if; end if; end process; sortieMemoireDonnees <= memoireDonnees(adresseMemoireDonnees);

Conception et implmentation de systmes numriques

Important: pas de reset! Si on utilise un reset, loutil de synthse implmentera la mmoire avec des bascules (faible densit). Sans reset, loutil de synthse pourra implmenter la mmoire dans des blocs RAM ddis du FPGA (haute densit).

Comment se synthtise la mmoire dans un FPGA?


Colonnes de blocs de mmoire intgres travers les CLBs. (Xilinx: Block RAM) LUTs des CLBs (Xilinx: Distributed RAM)
Columns of embedded RAM blocks Arrays of programmable logic blocks

Conception et implmentation de systmes numriques

Plan

Processeurs: introduction Modules combinatoires: multiplexeurs, dcodeurs et encodeurs lments mmoire pour chemins des donnes: registres chargement parallle et dcalage, bloc de registres, RAM Units fonctionnelles: units arithmtiques, units logiques, comparateurs, compteurs

Conception et implmentation de systmes numriques

Units fonctionnelles Unit arithmtique


Une unit arithmtique effectue des oprations arithmtiques entre des oprandes sous le contrle dun code dopration. Les units arithmtiques sont au cur de tous les microprocesseurs. Les synthtiseurs de VHDL sur le march reconnaissent les oprations arithmtiques daddition, soustraction et multiplication et infrent correctement des structures matrielles pour les implmenter. Les oprateurs correspondants sont +, - et *. Les oprations de division, reste et modulo sont supportes uniquement lorsque le deuxime oprande est une constante gale une puissance de deux. Ce support permet au concepteur dlever de faon notable le niveau dabstraction de modlisation de circuits arithmtiques en vitant davoir penser aux menus dtails de leur implmentation. Il est utile de bien comprendre les complexits relatives de ces oprations de faon pouvoir faire des choix de conception clairs.

Conception et implmentation de systmes numriques

Units fonctionnelles Unit arithmtique


library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity unitearithmetique is generic ( W : positive := 8 -- largeur des oprandes ); port( A, B : in signed(W - 1 downto 0); -- les oprandes choix : in std_logic_vector(2 downto 0); -- le slecteur d'opration F : out signed(W - 1 downto 0) -- le rsultat ); end unitearithmetique; architecture arch of unitearithmetique is begin process(A, B, choix) variable t : signed(2 * W - 1 downto 0); begin t := A * B; case to_integer(unsigned(choix)) is when 0 => F <= A + B; when 1 => F <= A - B; when 2 => F <= A + B + 1; when 3 => F <= A + 1; when 4 => F <= abs(A); when 5 => F <= -A; when 6 => F <= t(2 * W - 1 downto W); when 7 => F <= t(W - 1 downto 0); when others => F <= (others => 'X'); end case; end process; end arch;

Conception et implmentation de systmes numriques

Units fonctionnelles Unit arithmtique: quels types utiliser?

real: a dpend pour des valeurs constantes: ok pour des registres et valeurs intermdiaires: non! trop prcis et pas synthtisable integer, natural, positive: acceptables Bien supports par les synthtiseurs pour les oprations arithmtiques. Bonne abstraction par rapport un vecteur de bits. Important de spcifier la gamme de valeurs possibles de faon contraindre les ressources matrielles utilises pour les reprsenter. signed, unsigned: acceptables Dfinis dans le package normalis numeric_std, comme des tableaux de std_logic. Bien supports par les outils de synthse. Le package numeric_std redfinit les oprateurs de VHDL pour ces deux types. std_logic_vector: non, trop bas niveau Conception et implmentation de systmes numriques

Units fonctionnelles Unit logique


Les units logiques effectuent une opration logique sur des oprandes sous le contrle dun signal externe. Elles sont au cur de tout microprocesseur. Par exemple, on peut vouloir effectuer une des oprations ET, OU, OUX, ou NON-ET entre deux vecteurs de faon dynamique.

Pour les types, on peut utiliser std_logic_vector, signed ou unsigned. Le package std_logic_1164 redfinit les oprateurs logiques and, nand, or, nor, xor, xnor et not pour les objets de type std_logic et std_logic_vector. Le package numeric_std fait de mme pour les types unsigned et signed.

Conception et implmentation de systmes numriques

Units fonctionnelles Unit logique


library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity unitelogique is generic ( W : positive := 8 -- largeur des oprandes ); port( A, B : in std_logic_vector(W - 1 downto 0); -- les oprandes choix : in std_logic_vector(2 downto 0); -- le slecteur d'opration F : out std_logic_vector(W - 1 downto 0) -- le rsultat ); end unitelogique; architecture arch of unitelogique is begin process(A, B, choix) begin case to_integer(unsigned(choix)) is when 0 => F <= A and B; when 1 => F <= A or B; when 2 => F <= A nand B; when 3 => F <= A nor B; when 4 => F <= A xor B; when 5 => F <= A xnor B; when 6 => F <= not(A); when 7 => F <= not(B); when others => F <= (others => 'X'); end case; end process; end arch;

Conception et implmentation de systmes numriques

Units fonctionnelles Comparateurs


Un comparateur permet de comparer les grandeurs relatives de deux valeurs et didentifier leur galit ventuelle. Ce type de circuit est essentiel dans un microprocesseur pour pouvoir effectuer des branchements conditionnels. Les oprateurs de VHDL pour la comparaison sont =, /=, <, <=, >, et >=. Dans chaque cas le rsultat de la comparaison est de type boolean. Comme pour les oprations arithmtiques, le type des oprandes est critique et peut dterminer la valeur de la comparaison.

Conception et implmentation de systmes numriques

Units fonctionnelles Comparateur: code VHDL


library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity comparateur is generic ( W : positive := 8 -- largeur des oprandes ); port( A, B : in signed(W - 1 downto 0); eq, neq, gt, lt, ge, le : out std_logic ); end comparateur; architecture arch of comparateur is begin eq <= '1' when A = B else '0'; neq <= '1' when A /= B else '0'; gt <= '1' when A > B else '0'; lt <= '1' when A < B else '0'; ge <= '1' when A >= B else '0'; le <= '1' when A <= B else '0'; end arch;

Conception et implmentation de systmes numriques

Units fonctionnelles Compteurs


Un compteur compte le nombre doccurrences dun vnement. Un compteur est habituellement compos dun registre coupl un circuit combinatoire qui calcule la prochaine valeur du compte en fonction de sa valeur prsente. Il y a plusieurs types de compteurs: Compteur binaire. Progression monotone: 000, 001, 010, 011, , 101, 110, 111, 000, 001, etc. Un compteur binaire n bits a 2n tats diffrents. Compteur modulo-n. Ce compteur est rinitialis zro ds quune valeur spcifie est atteinte. Cas particulier: compteur BCD: 0000, 0001, 1000, 1001, 0000, ; Compteur anneau. 0001, 0010, 0100, 1000, 0001, 0010, etc. Peut entrer dans une squence dtats interdits si une erreur se produit. Compteur Johnson. 0000, 0001, 0011, 0111, 1111, 1110, 1100, 1000, 0000, 0001, Compteur squence arbitraire. Lutilisateur dtermine la squence, comme
par exemple 0, 3, 1, 4, 2, 6, 0, 3, 1, etc.
Conception et implmentation de systmes numriques

Units fonctionnelles Compteur: code VHDL


library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.numeric_std.all; entity compteurSynchrone is generic ( W : integer := 4 -- nombre de bits du compteur ); port( reset : in STD_LOGIC; CLK : in STD_LOGIC; mode : in unsigned(1 downto 0); D : in unsigned(W - 1 downto 0); Q : out unsigned(W - 1 downto 0) ); end compteurSynchrone; architecture comportementale of compteurSynchrone is begin process (CLK, reset) variable Qinterne : unsigned(W - 1 downto 0); begin if reset='0' then Qinterne := (others => '0'); elsif CLK='1' and CLK'event then case mode is when "01" => Qinterne := Qinterne + 1; when "10" => Qinterne := Qinterne - 1; when "11" => Qinterne := D; when others => Qinterne := Qinterne; end case; end if; Q <= Qinterne; end process; end comportementale;

Conception et implmentation de systmes numriques

Units fonctionnelles Compteurs

En plus de la squence suivie, les compteurs peuvent tre caractriss par: La valeur de rinitialisation (souvent 0). La direction du compte (le haut, le bas ou les deux). Le chargement parallle dune valeur de compte. Une entre ou une sortie srielle.

Conception et implmentation de systmes numriques

Vous aimerez peut-être aussi