inf3500 : conception et implémentation de systèmes numériques pierre langlois cours #5...

61
INF3500 : Conception et implémentation de systèmes numériques http://creativecommons.org/licenses/by-nc- sa/2.5/ca/ Pierre Langlois Cours #5 Conception de chemins des données

Upload: michelle-leduc

Post on 04-Apr-2015

115 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

http://creativecommons.org/licenses/by-nc-sa/2.5/ca/

Pierre Langlois

Cours #5Conception de chemins des données

Page 2: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques 2

Évaluation formative du cours

• L’évaluation formative du cours est faite par les étudiants.• Le but est d’établir si le déroulement du cours est satisfaisant à ce point et

d’apporter des modifications si nécessaire.• Merci de remplir le sondage en ligne sur le site Moodle cette semaine.• Le sondage est anonyme.

Page 3: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Plan pour aujourd’hui

• Processeurs: introduction (sections 5.1, 5.2)• Modules combinatoires: section 5.3

– muxltiplexeurs, décodeurs et encodeurs• Unités fonctionnelles: section 5.5

– unités arithmétiques, unités logiques, comparateurs, compteurs• Exemples de conception d’un chemin des données: CORDIC

3

+ Parenthèses sur VHDL, des mises en

contexte, des précisions sur les notes de

cours et des exemples!

Page 4: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Un exemple pour commencer

4Source: Wikipédia

Page 5: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Un exemple pour commencer

5

ProcesseurClavier

senseur de pièces

MM

MM

Moteurs des plateaux

actuateurs pour rendre la monnaie

affichages

ÉtatGérer l’argentGérer l’inventaire

Page 6: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Deux types de processeurs

• Un processeur est un type spécial de système numérique dont le but est de traiter des données par une succession d’étapes simples, pouvant résulter en un traitement global complexe.

• Un processeur doit acquérir des données, les traiter, et produire un résultat sous forme numérique ou vidéo.

• On distingue deux types principaux de processeurs :– Les processeurs à usage général peuvent être programmés. Le programme exécuté

par un processeur est gardé en mémoire sous la forme d’une liste d’instructions.• On réfère souvent à ce type de processeur par le nom de « microprocesseur ».• Un microcontrôleur est un cas particulier d’un processeur à usage général.• Un processeur spécialisé est un processeur à usage général auquel on a ajouté des

instructions spéciales.– Les processeurs à usage spécifique sont des processeurs non programmables qui

sont conçus dans le but de répondre à un besoin unique.• Ils sont plus simples et plus efficaces que les processeurs à usage général.• Ils ne peuvent pas en général être facilement reprogrammés.

6

(notes, section 5.1)

Page 7: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Parties d’un processeur

• Un processeur est composé de deux parties:– Le chemin des données (datapath) traite les données. Il inclut:

• des registres;• des unités fonctionnelles (comme une unité arithmétique et logique)• un mécanisme de commutation pour transférer et manipuler les données.

– L’unité de contrôle (control unit) est responsable du séquençage des opérations à exécuter par le chemin de données selon des entrées externes et le résultat des opérations.

7

(notes, section 5.1)

Chemin des données

Unité de contrôle

Contrôle État

Sortie des données

Sorties de contrôle

Entrée des données

Entrées de contrôle

Page 8: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Architecture d’un chemin des données

• Un chemin des données a deux parties principales:– un bloc de registres qui conserve les données à traiter et des résultats précédents, de

façon à pouvoir combiner toutes ces valeurs dans de nouveaux calculs.– des unités fonctionnelles pour effectuer des opérations sur les données conservées

dans les registres. • Des modules combinatoires permettent de choisir, router et contrôler le flot

d’information entre les registres et les unités fonctionnelles.

8

(notes, section 5.2)

RegistresUnités fonctionnelles et modules combinatoires

SortiesEntrées

opération état

Horloge

chargerregistres à

chargerregistres à

lire

L’unité fonctionnelle peut parfois avoir un état entreposé dans des éléments à mémoire.• Information sur un calcul précédent (p. ex. négatif, zéro, etc.).• Pour effectuer un calcul sur plusieurs cycles.• Pour garder en mémoire une valeur spéciale (p. ex. un accumulateur).

Page 9: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Architecture d’un chemin des donnéesExemple: processeur BlackFin

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

Page 10: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Conception de chemins des données avec l’approche RTL

• L’approche RTL (Register Transfer Level) est la plus populaire pour la conception de chemins des données. Elle s’accorde bien aux langages de description matérielle comme VHDL et Verilog.

• Dans l’approche RTL, le concepteur spécifie les registres du processeur, les transferts de données entre ces registres, les opérations à effectuer et les signaux de contrôle pour gérer ces activités.

• L’approche RTL peut être décomposée en quatre étapes :1. Analyse du problème afin de comprendre le flot des données à travers le processeur.2. Conception du chemin des données, identification des signaux de contrôle et d’état.3. Conception de l’unité de contrôle du processeur à l’aide d’une machine à états

générant des signaux de contrôle.4. Vérification que le processeur résultant rencontre les spécifications.

10

(notes, section 5.2)

Page 11: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Approche RTL et micro-opérations

• Une micro-opération est une opération élémentaire effectuée sur les données gardées dans des registres, en mémoire ou des données externes.

• La spécification d’une micro-opération inclut :– les opérandes (registres ou données externes);– la nature de la micro-opération à effectuer;– l’endroit où le résultat de la micro-opération doit être sauvegardé; et,– une condition à remplir pour que la micro-opération soit effectuée.

• On distingue quatre types principaux de micro-opérations :– les transferts entre registres;– les micro-opérations arithmétiques (addition, soustraction, multiplication, division,

reste)– les micro-opérations logiques (NON, ET, OU, OUX, etc.); et,– le décalage.

11

(notes, section 5.2)

Page 12: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Approche RTL et micro-opérations

• La notation RTL est une forme de pseudocode.• On peut utiliser des noms de registres (R0, R1, etc.) ou des identificateurs plus

représentatifs.• Le symbole ← indique une assignation de valeur.• Le principe de la concurrence des opérations est intrinsèque à l’approche RTL.

12

(notes, section 5.2)

Micro-opération Signification

R0 ← R1 Copier le contenu de R1 dans R0.

R2 ← R1 + R3 Placer la somme de R1 et de R3 dans R2.

R2 ← R2 ET R3 Placer le résultat de l’opération ET logique entre R2 et R3 dans R2.

K1 : R2 ← sll R1, 3Si le signal de contrôle K1 est actif, placer le résultat du décalage logique vers la gauche de 3 positions du registre R1 dans le registre R2; sinon, ne rien faire.

R2 ← R1 − R3, R4 ← R0 Simultanément, placer la différence entre R1 et R3 dans R2 et copier le contenu de R0 dans R4.

sll: « shift logical left »

Page 13: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Exemples d’implémentation de micro-opérations

13

(notes, section 5.2)

K1: R0 ← R1R0 ← R1

RegistresUnités fonctionnelles et modules combinatoires

SortiesEntrées

opération état

Horloge

chargerregistres à

chargerregistres à

lire

Page 14: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Registre à chargement parallèle

• Un registre est l’élément à mémoire de base pour des données.• Un registre est utilisé pour entreposer une information, encodée sur un groupe

de bits, comme par exemple un octet de mémoire dans un ordinateur ou le contenu de l’accumulateur d’une calculatrice.

• Un registre est composé d’un groupe de bascules contrôlées par une horloge commune et dont les entrées et sorties partagent un identificateur commun. Chaque bascule du registre est différenciée des autres par un indice unique.

• Un registre à chargement parallèle comporte un signal de chargement qui permet de moduler le signal d’horloge. Quand ce signal est actif, le contenu du registre est modifié sur une transition de l’horloge. Dans le cas contraire, le contenu du registre reste inchangé.

14

(notes, section 5.4)

/n

0

1

clk

/n

charge

Dn-1:D0

Qn-1:Q0/n

D

CLK

Q

zéro

reset

Page 15: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Modules combinatoires utilesMultiplexeur

• Un multiplexeur permet de choisir un seul signal à partir d’un ensemble de signaux, selon la valeur d’un signal de contrôle.

• Un multiplexeur a :– un groupe de signaux d’entrée D;– un groupe de signaux de contrôle S (pour sélection); et,– un signal de sortie F.

• Le signal de sortie est égal au signal d’entrée choisi par les signaux de contrôle.

15

(notes, section 5.3)

0

1

F

0

D2

FD1

D0

D3

S0

S1

1

2

3

D0

D1

S

F

D0

D1

S

F

D0

D1

S0S1

D2

D3

12

0

n

kkkDmF

où mk est un minterme formé par la kième combinaison de signaux de contrôle S.

Page 16: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Registre à chargement parallèleCode VHDL

16

(notes, section 5.4)

library IEEE;use IEEE.STD_LOGIC_1164.all;

entity registre isgeneric (

W : integer := 4);port(

reset, CLK, 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 isbegin

process (CLK, reset)begin

if reset = '0' thenQ <= (others => '0');

elsif rising_edge(CLK) thenif charge = '1' then

Q <= D;end if;

end if;end process;

end arch;

/n

0

1

clk

/n

charge

Dn-1:D0

Qn-1:Q0/n

D

CLK

Q

zéro

reset

D

CLK

Q

zéro

charge

Page 17: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Exemples d’implémentation de micro-opérations

17

(notes, section 5.2)

R2 ← R2 + R3 K2: R2 ← R2 + R3

Pas recommandé: mieux vaut utiliser le signal de chargement d’une bascule.

RegistresUnités fonctionnelles et modules combinatoires

SortiesEntrées

opération état

Horloge

chargerregistres à

chargerregistres à

lire

Page 18: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Exemples d’implémentation de micro-opérations

18

(notes, section 5.2)

K2K1: R2 ← R0 + R1; K2K1’: R2 ← R0 + R3

RegistresUnités fonctionnelles et modules combinatoires

SortiesEntrées

opération état

Horloge

chargerregistres à

chargerregistres à

lire

Page 19: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Exemples d’implémentation de micro-opérations

19

(notes, section 5.2)

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

Page 20: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Registre à décalage

• Un registre à décalage peut décaler ses bits vers la gauche ou la droite.• En général, un registre à décalage ne décale son contenu que d’une position par

coup d’horloge.• Un registre à décalage de 1 position peut être construit par une cascade de

bascules D dont la sortie est reliée à l’entrée de la bascule suivante.• Un registre à décalage peut être utilisé pour faire une conversion entre les

formats série et parallèle et est donc une composante fondamentale de plusieurs circuits de communication.

• Un registre à décalage permet aussi d’effectuer:– la multiplication par un puissance de deux, qui correspond à un décalage de bits vers

la gauche;– la division par une puissance de deux, qui correspond à un décalage vers la droite.

20

(notes, section 5.4)

Page 21: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Registre de 4 bits à décalage de 1 positionet à chargement parallèle: schéma

21

(notes, section 5.4)

D

CLK Q'

Q Q2

/2

D

CLK Q'

Q

mode

Q3

D

CLK Q'

QD0 Q0

D

CLK Q'

QD1 Q1

entreeSerie

0

1

2

3

0

1

2

3

Q1

Q0

Q0

Q2

Q1

D2

0

1

2

3

Q1

Q3

Q2

D3

0

1

2

3

Q2

entreeSerie

Q3

Les multiplexeurs partagent le même signal de contrôle ‘mode’.

Ce module est très polyvalent, il a quatre modes de fonctionnement.• mémoire• chargement parallèle• décalage vers la gauche (Q0 vers Q3) • décalage vers la droite (Q3 vers Q0)

Page 22: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Registre de 4 bits à décalage et à chargement parallèleModèle VHDL

22

(notes, section 5.4)

library IEEE;use IEEE.STD_LOGIC_1164.all;

entity registreadecalage isgeneric (

W : integer := 8 -- nombre de bits du registre);port(

CLK, reset : in STD_LOGIC;mode : in STD_LOGIC_VECTOR(1 downto 0); -- modeentreeSerie : in STD_LOGIC; -- entree serielleD : in STD_LOGIC_VECTOR(W - 1 downto 0);Q : out STD_LOGIC_VECTOR(W - 1 downto 0)

);end registreadecalage;

architecture arch of registreadecalage isbegin

process (CLK, reset)variable Qinterne : STD_LOGIC_VECTOR(W - 1 downto 0);begin

if reset='0' thenQinterne := (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 d’une variable Qinterne parce qu’on ne peut pas lire un port de sortie (Q) en VHDL.

Page 23: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Synchronisation des opérations du chemin des données

• Le bloc des registres est contrôlé par un signal d’horloge.• À chaque coup d’horloge, le bloc des registres peut emmagasiner:

– une nouvelle donnée provenant du port des entrées;– un résultat qui vient d’être calculé par l’unité fonctionnelle; ou bien,– effectuer un transfert entre deux registres (via l’unité fonctionnelle en général).

• Entre deux coups d’horloge, l’unité fonctionnelle:– lit des données provenant du bloc des registres;– effectue les calculs spécifiés par le code d’opération qui lui est appliqué; et,– applique les résultat à ses ports de sortie;

23

(notes, section 5.2)

Une micro-opération ne prend effet que lors d’une transition active du signal d’horloge. Le bloc des registres ne saisit un résultat calculé par l’unité fonctionnelle que lors de la prochaine transition d’horloge.

La période d’horloge doit être suffisamment longue pour que l’unité fonctionnelle ait le temps d’effectuer son traitement.

Page 24: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Synchronisation des opérations du chemin des données

24

(notes, section 5.2)

Page 25: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Plan pour aujourd’hui

• Processeurs: introduction (sections 5.1, 5.2)• Modules combinatoires: section 5.3

– muxltiplexeurs, décodeurs et encodeurs• Unités fonctionnelles: section 5.5

– unités arithmétiques, unités logiques, comparateurs, compteurs• Exemples de conception d’un chemin des données: CORDIC

25

+ Parenthèses sur VHDL, des mises en

contexte, des précisions sur les notes de

cours et des exemples!

Page 26: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Modules combinatoires utilesMultiplexeur

• Un multiplexeur permet de choisir un seul signal à partir d’un ensemble de signaux, selon la valeur d’un signal de contrôle.

• Un multiplexeur a :– un groupe de signaux d’entrée D;– un groupe de signaux de contrôle S (pour sélection); et,– un signal de sortie F.

• Le signal de sortie est égal au signal d’entrée choisi par les signaux de contrôle.

26

(notes, section 5.3)

0

1

F

0

D2

FD1

D0

D3

S0

S1

1

2

3

D0

D1

S

F

D0

D1

S

F

D0

D1

S0S1

D2

D3

12

0

n

kkkDmF

où mk est un minterme formé par la kième combinaison de signaux de contrôle S.

Code VHDL?

Page 27: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Modules combinatoires utilesMultiplexeur 2:1 en VHDL

27

(notes, section 5.3)

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 isbegin

with S selectF <= D0 when '0', D1 when others;

end flotDeDonnees;

Pas nécessaire de donner les équations booléennes.Assignation choisie avec tous les cas couverts.

Code VHDL pour le cas général, où le nombre de ports d’entrées est paramétré?

Page 28: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Modules combinatoires utilesMultiplexeur général en VHDL

28

(notes, section 5.3)

library ieee;use ieee.std_logic_1164.all; use ieee.numeric_std.all;

entity mux is generic (

n : positive := 3 -- nombre de signaux de contrôle);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 très compacte.

Normalement on ne décrirait pas un multiplexeur dans une entité séparée, on utiliserait plutôt le patron de code dans un module.

Discussion: le processus de synthèse de ce code.

Page 29: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Rappel: loquet D en VHDL

• Un loquet D peut-être modélisé en VHDL par un énoncé if-then à l’intérieur d’un processus.

• Le processus doit avoir dans sa liste de sensitivité le signal de contrôle G et le signal de donnée D.

• Le signal D est assigné à la sortie Q quand le signal de contrôle G est actif (mode transparent)

29

library ieee;use ieee.std_logic_1164.all;entity loquetD is

port (G : in STD_LOGIC; -- contrôleD : in STD_LOGIC; -- donnéeQ : out STD_LOGIC

);end loquetD;architecture loquetD of loquetD isbegin

process(G, D) isbegin

if (G = '1') thenQ <= D;

-- else -- implicite, infère élément à mémoire-- -- ne pas changer Q

end if;end process;

end loquetD;

(notes, section 2.4)

Patron de code spécial reconnu par les synthétiseurs pour signifier un loquet.

Page 30: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Un loquet ou un multiplexeur ou les deux?

30

(notes, section 4.5.6)

library ieee;use ieee.std_logic_1164.all;

entity mystere1 isport (a, b, c: in std_logic;

s : in std_logic_vector (1 downto 0);o : out std_logic);

end mystere1;

architecture archi of mystere1 isbegin

process (a, b, c, s)begin

if (s = "00") then o <= a;elsif (s = "01") then o <= b;elsif (s = "10") then o <= c;end if;

end process;end archi;

library ieee;use ieee.std_logic_1164.all;

entity mystere2 isport (a, b, c: in std_logic;

s : in std_logic_vector (1 downto 0);o : out std_logic);

end mystere2;

architecture archi of mystere2 isbegin

process (a, b, c, s)begin

if (s = "00") then o <= a;elsif (s = "01") then o <= b;elsif (s = "10") then o <= c;else o <= c;end if;

end process;end archi;

Page 31: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Modules combinatoires utilesDécodeur: exemple d’utilisation

31

(notes, section 5.3)

Exemple: système de gicleurs automatiques autour d’une résidence.La pression de l’aqueduc municipal est insuffisante pour activer tous les gicleurs en même temps. Les gicleurs sont divisés en quatre zones.Une seule zone doit arroser à la fois.Chaque zone est munie d’une valve.Un décodeur permet d’ouvrir une seule valve à la fois.Une valve principale doit aussi être ouverte.

Page 32: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Modules combinatoires utilesDécodeur

• Un décodeur active un signal spécifique correspondant à un code numérique en particulier.

• Un décodeur a n signaux d’entrée et 2n signaux de sortie.– Chacun des signaux de sortie correspond à un des mintermes et maxtermes

composés des signaux d’entrée.– Une et une seule ligne de sortie est active à un moment donné.– Le numéro de la ligne active ligne correspond à la valeur binaire appliquée aux lignes

d’entrée.– Selon les décodeurs, la ligne active pourra être à une valeur 0 ou une valeur 1, et

toutes les autres lignes seront à l’autre valeur.

32

(notes, section 5.3)

# A2 A1 A0 F7 F6 F5 F4 F3 F2 F1 F0

0 0 0 0 0 0 0 0 0 0 0 11 0 0 1 0 0 0 0 0 0 1 02 0 1 0 0 0 0 0 0 1 0 03 0 1 1 0 0 0 0 1 0 0 04 1 0 0 0 0 0 1 0 0 0 05 1 0 1 0 0 1 0 0 0 0 06 1 1 0 0 1 0 0 0 0 0 07 1 1 1 1 0 0 0 0 0 0 0

Table de vérité d’un décodeur 3:8

(A2, A1, A0) sont les entrées.

(F7, F6, …, F0) sont les sorties.

Page 33: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Modules combinatoires utilesDécodeur 3:8 en VHDL

33

(notes, section 5.3)

Une assignation choisie spécifie les huit cas possibles du signal d’entrée F.L’utilisation de la clause others permet de rendre le modèle plus robuste à la simulation. En effet, le type std_logic peut prendre des valeurs autres que ‘0’ et ‘1’ – voir la section 2.5.4.Lors de la simulation, si le signal F prend une valeur comme « X1W », la sortie du décodeur sera un vecteur de ‘X’.L’expression (others => ‘X’) permet d’assigner la valeur ‘X’ à chacun des éléments du vecteur F.

library ieee;use ieee.std_logic_1164.all;

entity decodeur38 isport(

A : in std_logic_vector(2 downto 0);F: out std_logic_vector(7 downto 0)

);end decodeur38;

architecture flotDeDonnees of decodeur38 is

beginwith A select F <=

"00000001" when "000","00000010" when "001","00000100" when "010","00001000" when "011","00010000" when "100","00100000" when "101","01000000" when "110","10000000" when "111",(others => 'X') when others;

end flotDeDonnees;Discussion: le processus de synthèse de ce code.

Page 34: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Parenthèse: agrégats en VHDL

• En VHDL, un agrégat est une opération de base qui combine plusieurs valeurs en une valeur composée.

34

(pas dans les notes)

-- Exemple 1variable Data_1 : BIT_VECTOR (0 to 3) := ('0','1','0','1'); -- assignation positionelle

-- Exemple 2variable Data_2 : BIT_VECTOR (0 to 3) := (1=>'1',0=>'0',3=>'1',2=>'0'); -- assignation nommée

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

Page 35: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Modules combinatoires utilesDécodeur général en VHDL

35

(notes, section 5.3)

library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;

entity decodeur is generic (

n : positive := 3 -- nombre de signaux d'entrée);port(

A : in std_logic_vector(n - 1 downto 0);F: out std_logic_vector(2 ** n - 1 downto 0)

);end decodeur;

architecture comportementale of decodeur isbegin

process(A)begin

F <= (to_integer(unsigned(A)) => '1', others => '0');

end process;

end comportementale;Discussion: le processus de synthèse de ce code.

Page 36: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Modules combinatoires utilesEncodeur à 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 façon contraire à un décodeur.– Il a n lignes de sortie et 2n lignes d’entrée.– Le code à la sortie représente le numéro de la ligne qui est active.– Un signal de sortie spécial indique si au moins une des lignes en entrée est active.

• Un encodeur à priorité permet d’avoir plus d’une ligne d’entrée active à la fois. La priorité peut être accordée à la ligne ayant le plus grand ou le plus petit numéro, ou selon un autre choix.

36

(notes, section 5.3)

D7 D6 D5 D4 D3 D2 D1 D0 A2 A1 A0 V

0 0 0 0 0 0 0 0 - - - 00 0 0 0 0 0 0 1 0 0 0 10 0 0 0 0 0 1 - 0 0 1 10 0 0 0 0 1 - - 0 1 0 10 0 0 0 1 - - - 0 1 1 10 0 0 1 - - - - 1 0 0 10 0 1 - - - - - 1 0 1 10 1 - - - - - - 1 1 0 11 - - - - - - - 1 1 1 1

Table de vérité partielle d’un encodeur 8:3

(D7, D6, …, D0) sont les entrées.

(A2, A1, A0 et V) sont les sorties.

Combien de lignes cette table de vérité a-t-elle?

Page 37: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Encodeur à prioritéExemple: estimer le logarithme à base deux d’un nombre

N, base 10

N, base 2 indice du ‘1’ le plus

significatif

partie fractionnaire

~log2N= indice + partie fract.

(base 2)

~log2N= indice +

partie fract.(base 10)

log2N

4 00000100 2 .00 010.0000000 2.0 2.0

7 00000111 2 .11 010.1100000 2.75 2.8073…

15 00001111 3 .111 011.1110000 3.875 3.9068…

65 01000001 6 .000001 110.0000010 6.015625 6.0223…

237 11101101 7 .1101101 111.1101101 7.8515625 7.8887…

37

(notes, section 5.3)

L’indice du ‘1’ le plus significatif d’un nombre binaire non signé donne la valeur plancher du logarithme en base 2 de ce nombre: on peut le trouver avec un encodeur à priorité.

Les autres bits du nombre peuvent être interprétés comme une valeur binaire fractionnaire.

La somme de l’indice et de la valeur binaire fractionnaire donne une approximation du logarithme en base 2 du nombre.

Page 38: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Encodeur à prioritéExemple: estimer le logarithme à base deux d’un nombre

38

(notes, section 5.3)

Nencodeur à priorité

8:3/8

erreur

~log2(N)/3

/8

V

A

D

décaleur - gauche

compte

8

Page 39: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Modules combinatoires utilesEncodeur à priorité en VHDL

39

(notes, section 5.3)

library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;

entity encodeurP isgeneric (

n : positive := 3 -- largeur du code de sortie);port(

D : in std_logic_vector(2 ** n - 1 downto 0); -- le bus d'entréeA : out std_logic_vector(n - 1 downto 0); -- le code de sortieV : out std_logic -- '1' si au moins un signal d'entrée est actif

);end encodeurP;

architecture comportementale of encodeurP isbegin

process(D)begin

-- des valeurs par défaut sont essentielles-- au cas où aucun signal d'entrée n'est actifV <= '0';A <= (others => '-');for k in 2 ** n - 1 downto 0 loop -- priorité aux valeurs élevées

if D(k) = '1' thenA <= std_logic_vector(to_unsigned(k, n));V <= '1';exit; -- termine la boucle

end if;end loop;

end process;

end comportementale;

La priorité est donnée aux lignes avec un numéro élevé.

Au début du processus, on donne une valeur par défaut aux signaux de sortie V et A, au cas où aucune des entrées n’est active.

La valeur par défaut donnée au signal A est un « peu-importe » (don’t-care), représenté pour le type std_logic par un tiret ‘-‘.

Discussion: le processus de synthèse de ce code.

Page 40: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Plan pour aujourd’hui

• Processeurs: introduction (sections 5.1, 5.2)• Modules combinatoires: section 5.3

– muxltiplexeurs, décodeurs et encodeurs• Unités fonctionnelles: section 5.5

– unités arithmétiques, unités logiques, comparateurs, compteurs• Exemples de conception d’un chemin des données: CORDIC

40

+ Parenthèses sur VHDL, des mises en

contexte, des précisions sur les notes de

cours et des exemples!

Page 41: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Unités fonctionnellesUnité arithmétique

• Une unité arithmétique effectue des opérations arithmétiques entre des opérandes sous le contrôle d’un code d’opération.

• Les unités arithmétiques sont au cœur de tous les microprocesseurs.• Les synthétiseurs de VHDL sur le marché reconnaissent les opérations

arithmétiques d’addition, soustraction et multiplication et infèrent correctement des structures matérielles pour les implémenter. Les opérateurs correspondants sont ‘+’, ‘-’ et ‘*’.

• Les opérations de division, reste et modulo sont supportées uniquement lorsque le deuxième opérande est une constante égale à une puissance de deux.

• Ce support permet au concepteur d’élever de façon notable le niveau d’abstraction de modélisation de circuits arithmétiques en évitant d’avoir à penser aux menus détails de leur implémentation.

• Il est utile de bien comprendre les complexités relatives de ces opérations de façon à pouvoir faire des choix de conception éclairés.

41

(notes, section 5.5)

Page 42: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Unités fonctionnellesUnité arithmétique

42

(notes, section 5.5)

library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity unitearithmetique is

generic (W : positive := 8 -- largeur des opérandes

);port(

A, B : in signed(W - 1 downto 0); -- les opérandeschoix : in std_logic_vector(2 downto 0); -- le sélecteur d'opérationF : out signed(W - 1 downto 0) -- le résultat

);end unitearithmetique;architecture arch of unitearithmetique isbegin

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;

Débordements possibles sauf pour la multiplication.

Page 43: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Unités fonctionnellesUnité arithmétique: quels types utiliser?

• real: ça dépend– pour des valeurs constantes: ok– pour des registres et valeurs intermédiaires: non! trop précis et pas synthétisable

• integer, natural, positive: acceptables– Bien supportés par les synthétiseurs pour les opérations arithmétiques.– Bonne abstraction par rapport à un vecteur de bits.– Important de spécifier la gamme de valeurs possibles de façon à contraindre les

ressources matérielles utilisées pour les représenter.• signed, unsigned: acceptables

– Définis dans le package normalisé numeric_std, comme des tableaux de std_logic.– Bien supportés par les outils de synthèse.– Le package numeric_std redéfinit les opérateurs de VHDL pour ces deux types.

• std_logic_vector: non, trop bas niveau– Défini dans le package std_logic_1164 comme un tableau de std_logic.– Des packages populaires incluent des définitions pour les opérations arithmétiques,

mais ils ne sont pas normalisés et leur utilisation n’est pas recommandée.

43

(notes, section 5.5)

Page 44: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Unités fonctionnellesUnité logique

• Les unités logiques effectuent une opération logique sur des opérandes sous le contrôle d’un signal externe.

• Elles sont au cœur de tout microprocesseur.• Par exemple, on peut vouloir effectuer une des opérations ET, OU, OUX, ou

NON-ET entre deux vecteurs de façon dynamique.

44

(notes, section 5.5)

Pour les types, on peut utiliser std_logic_vector, signed ou unsigned.

Le package std_logic_1164 redéfinit les opérateurs 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 même pour les types unsigned et signed.

Page 45: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Unités fonctionnellesUnité logique

45

(notes, section 5.5)

library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity unitelogique is

generic (W : positive := 8 -- largeur des opérandes

);port(

A, B : in std_logic_vector(W - 1 downto 0); -- les opérandeschoix : in std_logic_vector(2 downto 0); -- le sélecteur d'opérationF : out std_logic_vector(W - 1 downto 0) -- le résultat

);end unitelogique;architecture arch of unitelogique isbegin

process(A, B, choix)begin

case to_integer(unsigned(choix)) iswhen 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;

Page 46: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Unités fonctionnellesComparateurs

• Un comparateur permet de comparer les grandeurs relatives de deux valeurs et d’identifier leur égalité éventuelle.

• Ce type de circuit est essentiel dans un microprocesseur pour pouvoir effectuer des branchements conditionnels.

• Les opérateurs de VHDL pour la comparaison sont =, /=, <, <=, >, et >=. Dans chaque cas le résultat de la comparaison est de type boolean.

• Comme pour les opérations arithmétiques, le type des opérandes est critique et peut déterminer la valeur de la comparaison.

46

(notes, section 5.5)

Page 47: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Unités fonctionnellesComparateur: code VHDL

47

(notes, section 5.5)

library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;

entity comparateur isgeneric (

W : positive := 8 -- largeur des opérandes);port(

A, B : in signed(W - 1 downto 0);eq, neq, gt, lt, ge, le : out std_logic

);end comparateur;

architecture arch of comparateur isbegineq <= '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;

Page 48: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Unités fonctionnellesCompteurs

• Un compteur compte le nombre d’occurrences d’un événement.• Un compteur est habituellement composé d’un registre couplé à un circuit

combinatoire qui calcule la prochaine valeur du compte en fonction de sa valeur présente.

• 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 différents.– Compteur modulo-n. Ce compteur est réinitialisé à zéro dès qu’une valeur spécifiée

est atteinte. Cas particulier: compteur BCD: 0000, 0001, … 1000, 1001, 0000, …;– Compteur à anneau. 0001, 0010, 0100, 1000, 0001, 0010, etc. Peut entrer dans une

séquence d’états interdits si une erreur se produit.– Compteur Johnson. 0000, 0001, 0011, 0111, 1111, 1110, 1100, 1000, 0000, 0001, …– Compteur à séquence arbitraire. L’utilisateur détermine la séquence, comme par

exemple 0, 3, 1, 4, 2, 6, 0, 3, 1, etc.

48

(notes, section 5.5)

Page 49: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Unités fonctionnellesCompteur: code VHDL

49

(notes, section 5.5)

library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.numeric_std.all;

entity compteurSynchrone isgeneric (

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 isbegin

process (CLK, reset)variable Qinterne : unsigned(W - 1 downto 0);begin

if reset='0' thenQinterne := (others => '0');

elsif CLK='1' and CLK'event thencase 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;

Page 50: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Unités fonctionnellesCompteurs

• En plus de la séquence suivie, les compteurs peuvent être caractérisés par :– La valeur de réinitialisation (souvent 0).– La direction du compte (le haut, le bas ou les deux).– Le chargement parallèle d’une valeur de compte.– Une entrée ou une sortie sérielle.

50

(notes, section 5.5)

Page 51: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Plan pour aujourd’hui

• Processeurs: introduction (sections 5.1, 5.2)• Modules combinatoires: section 5.3

– muxltiplexeurs, décodeurs et encodeurs• Unités fonctionnelles: section 5.5

– unités arithmétiques, unités logiques, comparateurs, compteurs• Exemples de conception d’un chemin des données: CORDIC

51

+ Parenthèses sur VHDL, des mises en

contexte, des précisions sur les notes de

cours et des exemples!

Page 52: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Exemple de design:Calculer le sinus et le cosinus avec CORDIC

• L’algorithme CORDIC permet de calculer les fonctions sinus trigonométriques et hyperboliques avec une suite d’opérations arithmétiques très simples: addition, soustraction et décalage.

• CORDIC: COordinate Rotation DIgital Computer, proposé par Volder en 1959.• Utilisé dans les calculatrices de poche, Intel 80x87, 80486 et Motorola 68881.• L’algorithme CORDIC a été généralisé pour calculer des fonctions exponentielles,

la division, la multiplication et la racine carrée.• Approprié quand on n’a pas accès à un multiplicateur ou quand le nombre de

portes logiques disponibles est très limité.

52

Page 53: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

• Une rotation dans le plan peut s’effectuer à l’aide de l’équation suivante:

CORDIC: principes de base

53

)tan(cos

)tan(cos

1tan

tan1cos

cossin

sincos

1

1

1

1

iiiii

iiiii

i

i

i

ii

i

i

ii

ii

i

i

xyy

yxx

y

x

y

x

y

x

Page 54: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

• On peut décomposer une rotation en plusieurs sous-rotations.– L’angle global de rotation est égal à la somme des angles des sous-rotations.– Les angles des sous-rotations peuvent être positifs ou négatifs.

CORDIC: principes de base

54

1

0

0

0

0

0

2

2

1

1

cos

1tan

tan1

1tan

tan1

1tan

tan1

n

i

n

n

n

n

n

n

K

y

xK

y

x

0

0

0

0

1

1

2

2

0123

3

1tan

tan1

1tan

tan1

1tan

tan1

coscoscos

y

x

y

x

Page 55: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

• La clé de la réalisation matérielle simple de l’algorithme CORDIC est qu’on choisit tan(i) = 2-i.

• Dans l’implémentation des équations, la multiplication par tan(i) peut donc être effectuée par un simple décalage de bits.

• Comme on choisit les i, on peut calculer d’avance les cos i ainsi que K, le produit des cos i.

CORDICcomment ça marche

55

1

0

0

0

0

0

2

2

1

1

cos

1tan

tan1

1tan

tan1

1tan

tan1

n

i

n

n

n

n

n

n

K

y

xK

y

x

i tan(i) i (degrés)

0 1.000 45.0000

1 0.500 26.5651

2 0.250 14.0362

3 0.125 7.1250

Page 56: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

• Pour obtenir le sinus et le cosinus d’un angle, on prend le vecteur (1, 0) comme point de départ et on le fait tourner par l’angle désiré.

• Les coordonnées (x, y) obtenues sont le cosinus et le sinus de l’angle, respectivement.

• Dans l’algorithme CORDIC, on prend le vecteur (K, 0) comme point de départ.• Il reste à trouver la somme des angles i qui est égale à l’angle désiré z.

CORDICcomment ça marche

56

1

0

1,1,n

iii ddz

01tan

tan1

1tan

tan1

1tan

tan1

sin

cos

00

00

22

22

11

11

K

d

d

d

d

d

d

z

z

nn

nn

nn

nn

Page 57: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

CORDICcomment ça marche

• En pratique, on procède à l’envers: on part de l’angle z et on fait des rotations par les angles i (positives ou négatives) jusqu’à ce qu’on arrive à 0.

• On calcule zi+1 = zi - di i

• Le signe de la rotation di est égal au signe de l’angle courant zi.• Exemple des trois premières rotations pour l’angle z = 30 degrés.

57

y

x

x ,y

x–45

+26.6

–1430

(0) (0)

(10)

x ,y(1) (1)

x ,y(2) (2)

x ,y(3) (3)

B. Parhami, Computer Arithmetic, Oxford University Press, 2000.

Page 58: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

CORDICcomment ça marche

• On obtient finalement trois équations à implémenter.• Les opérations requises sont l’addition/soustraction et le décalage.• Un tableau doit contenir les i, mais on note que pour i petit, tan i = i = 2-i par

choix.• Il faut déterminer le nombre d’itérations à faire, on obtient environ un bit de

précision par itération.

58

iiii

iiiii

iiiii

dzz

xdyy

ydxx

1

1

1

)tan(

)tan(

Page 59: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Analyse du problème:CORDIC

• Les ports du circuit de transmission sont:– reset, clk– theta_rad (entrée): l’angle z exprimé en radians, limité entre -/4 et /4.– go(entrée): indique que l’angle dont on veut obtenir le sinus et le cosinus est placé

sur le port theta_rad et que les calculs peuvent débuter– pret (sortie): indique que les calculs sont terminés– costheta et sintheta (sorties): les résultats

• Toutes les valeurs sont fractionnaires.• Besoin de cinq éléments à mémoire:

– trois registres pour x, y et z– un registre d’états:

• en train de faire les calculs: pret <= ‘0’ et on n’accepte pas de nouvel angle• en attente: pret <= ‘1’ et on accepte un nouvel angle

– un compteur interne pour déterminer si on a fait toutes les itérations

59

Page 60: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

CORDICDiagramme du chemin des données

60

)sgn(

)tan(

)tan(

1

1

1

ii

iiii

iiiii

iiiii

zd

dzz

xdyy

ydxx

Page 61: INF3500 : Conception et implémentation de systèmes numériques  Pierre Langlois Cours #5 Conception

INF3500 : Conception et implémentation de systèmes numériques

Notions à retenir et maîtriser Importance relative

1. Expliquer les parties d’un processeur et de son chemin des données à l’aide d’un schéma. 15

2. Donner le schéma d’un circuit implémentant une micro-opération donnée. 253. Multiplexeur, décodeur et encodeur à priorité. Donner un diagramme, expliquer la fonction, donner le code VHDL, expliquer le processus de synthèse, et utiliser dans un problème.À partir d’un code VHDL, identifier le module combinatoire correspondant.

35

4. Unités arithmétiques , unités logiques, comparateurs et compteurs.Expliquer le fonctionnement, donner le code VHDL, expliquer l’implémentation sur FPGA.Dans un problème, choisir le bon type pour représenter les données.

25

Total 100

Résumé: conception de chemins des données

61