Académique Documents
Professionnel Documents
Culture Documents
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
Source: Wikipdia
Clavier
Processeur
M M M M
affichages
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.
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.
Contrle
tat
Entres de contrle
Unit de contrle
Sorties de contrle
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
Sorties
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.
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.
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
K1: R0 R1
Entres Horloge
charger
Registres
registres charger registres lire
Sorties
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'
Entres Horloge
charger
Registres
registres charger registres lire
Sorties
Entres Horloge
charger
Registres
registres charger registres lire
Sorties
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
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
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
S0
D3
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.
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
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.
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
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
"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.
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
dbuter, toutes les sorties sont dsactives. Ensuite, seule celle dont le numro correspond au signal dentre est active.
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.
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
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'
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.
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
Q' Q
Q3
CLK
Q'
Utilisation dune variable Qinterne parce quon ne peut pas lire un port de sortie (Q) en VHDL.
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.
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.
Entres Horloge
charger
Registres
registres charger registres lire
Sorties
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
D R2 charge
R2B
2:4
choixB R3A
0 1 2 3
D R3 charge
R3B
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?
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.
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
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).
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
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
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.
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
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.
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.
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
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.