(notes, section 1.3) Implémentation des systèmes numériques Quatre considérations d’implémentation Taille du système Précision des calculs Aujourd’hui.

Slides:



Advertisements
Présentations similaires
LIRMM 1 Journée Deuxièmes années Département Microélectronique LIRMM.
Advertisements

PRINCIPE SIMPLIFIE DE LA COMPRESSION MP3
GEF499 Systèmes en temps réel
Performances 1 Évolution : Performance. Performances 2 Évolution : Mémoire.
Exercice Notre programme s'exécute en 10 secondes sur A, qui dispose d'une horloge à 100Mhz. Nous tentons d'aider un concepteur à construire une machine.
ETALONNAGE D’UN CAPTEUR
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
07/24/09 1.
Merci et bon visionnage.
Exercices sur la conception de processeurs
Cours #9 Conception et réalisation de processeurs à usage général
VIRAGES EN PALIER, MONTEE ET DESCENTE SYMETRIE DU VOL
Cours #6 Conception d’unités de contrôle
LES PRINCIPES D’ENTRAINEMENT
Cours #12: Exercices de révision
2-1 CIRCUITS ÉLECTRIQUES SIMPLES
L’Indicateur du Développement Humain (IDH) du PNUD
Cours #8 Flot de conception d’un circuit numérique
Cours #4 Éléments à mémoire et circuits séquentiels synchrones de base
Sections sélectionnées du Chapitre 11
Les fichiers indexés (Les B-arbres)
Algorithme de Bellman-Ford
Système à temps partagé
Gei 431 Architecture des ordinateurs II – Frédéric Mailhot Systèmes Pipeline – opérations multicycles Nous avons vu jusquà maintenant comment faire un.
Gestion de Fichiers Tri Interne Efficace et Tri Externe.
Recherche Opérationnelle
2. Le Monopole Hypothèse de base du modèle:
LE CHOIX DU CONSOMMATEUR ET LA DEMANDE
Cours #7 Vérification d’un modèle VHDL
3. Théorie de la production (offre) (suite)
Détection du meilleur format de compression pour une matrice creuse dans un environnement parallèle hétérogène Olfa HAMDI-LARBI.
CHAPITRE 3 LE THÉORÈME DE GAUSS.
La théorie de la communication de C. Shannon
Atelier de formation : MAT optimisation II (les graphes).
Modélisation VHDL d’un chemin des données
Représentation binaire de nombres entiers et opérations arithmétiques de base Sujets de ce thème
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Représentation et opérations.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Options d’implémentation.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Synthèse d’un circuit.
Modélisation VHDL du chemin des données d’un processeur à usage général Sujets de ce thème
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois La technique du pipeline.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Analyse de machines.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Implémentation d’un.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Augmenter le débit d’un.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Description d’un circuit.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Bonnes pratiques de.
Processeurs et chemins des données
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Entrées et sorties par.
Le temps de propagation des signaux dans un circuit
Université de Sherbrooke
Tests de boîte noire.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Vérification de circuits.
Chemin critique et fréquence maximale d’horloge
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Le problème du déphasage.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Arithmétique entière.
Les systèmes mono-puce
Concepts intermédiaires de VHDL
Présentation du marché obligataire
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Performance de circuits.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Modélisation VHDL de.
Synthèse et implémentation d’un circuit combinatoire
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Simulation d’un modèle.
Rappel - analyse et synthèse de fonctions combinatoires
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Banc d’essai pour un.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Analyse détaillée du.
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Performance de circuits.
VHDL pour circuits séquentiels
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Flot de conception de.
Les bascules et registres
La technique du pipeline
Transcription de la présentation:

Cours #11 Performance de circuits numériques Partie 2: optimiser la performance

(notes, section 1.3) Implémentation des systèmes numériques Quatre considérations d’implémentation Taille du système Précision des calculs Aujourd’hui Taux de traitement Puissance consommée

Plan pour aujourd’hui Optimisation pour la surface ou le débit (8.6) latence et débit comment maximiser le débit architectures à pipeline minimiser la latence minimiser la surface Exemple: conception d’un filtre FIR, comparaison de trois designs Conception pour FPGA: (8.8) Documentation etc. (8.9 et 8.10)

La « vitesse » d’horloge (notes, section 8.6.1) La « vitesse » d’horloge Mieux vaut parler de fréquence ou de période d’horloge, de latence de calcul et de débit d’information!

(notes, section 8.6.1) Latence et débit La latence de calcul est le temps nécessaire pour produire un résultat. Le débit d’information est le nombre de résultats produits par unité de temps. cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s Exemple d’une cafétéria avec 5 stations. Les délais de chaque station sont indiqués. Suppositions: un seul client dans la ligne à la fois chaque client passe par chaque station un client ne peut pas prendre son cabaret tant que le client précédent n’a pas fini à la caisse « Horloge » avec une période de 75 secondes. Latence de 1 cycle = 75 secondes pour servir un client. Débit = 3600 s/h ÷ 75 s/client = 48 clients par heure.

Latence et débit Latence: Débit: (notes, section 8.6.1) Latence et débit Latence: La latence est le temps entre le moment où une donnée est disponible et le moment où le résultat qui dépend de cette donnée est disponible à son tour. Courte latence = meilleure performance. La latence est souvent exprimée en nombre de cycles d’horloges. Une fréquence d’horloge plus élevée correspond à une latence plus courte. Débit: Le débit est le nombre de résultats par unité de temps ou par cycle d’horloge. Grand débit = meilleure performance. Si le débit est inférieur à un résultat par cycle, on donne plutôt le nombre de coups d’horloges nécessaires pour produire un résultat. Quand on calcule le débit, on suppose qu’une quantité suffisante de données est disponible à l’entrée du système pour le garder actif. Une fréquence d’horloge plus élevée correspond à un débit plus grand. Le parallélisme augmente le débit.

(notes, section 8.6.2) Augmenter le débit en augmentant la fréquence d’horloge (1) Réduire le délai sur le chemin critique cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s Cafétéria originale: période d’horloge 75 s, latence 1 cycle, débit 48 clients par heure cabarets 5 s boissons 10 s plat principal 25 s bar à salade 15 s caisse 12 s Cafétéria modifiée: période d’horloge 67 s, latence 1 cycle, débit 53.7 clients par heure

Avec pipeline ajusté: trois clients sont en ligne à la fois. (notes, section 8.6.2) Augmenter le débit en augmentant la fréquence d’horloge (2) Insérer des registres de pipeline cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s Original: période d’horloge 75 s, latence 1 cycle, débit 48 clients par heure Attente 25 s Attente 20 s Attente 15 s Attente 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s Avec pipeline naïf: cinq clients sont en ligne à la fois, un seul client par station. Période d’horloge 30 s, latence 5 cycles = 150 s, débit 120 clients par heure Attente 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s Avec pipeline ajusté: trois clients sont en ligne à la fois. Période d’horloge 30 s, latence 3 cycles = 90 s, débit 120 clients par heure

(Cas du pipeline ajusté) (notes, section 8.6.2) Questions En supposant une très longue file d’attente qui ouvre à 12h00: À quelle heure mangera le premier client, avec et sans pipeline? À quelle heure mangera le 2e client, avec et sans pipeline? À quelle heure mangera le 3e client, avec et sans pipeline? À quelle heure mangera le 4e client, avec et sans pipeline? heure cabaret et boisson plat salade et caisse manger 12:00:00 12:00:30 12:01:00 12:01:30 12:02:00 12:02:30 12:03:00 (Cas du pipeline ajusté)

Parenthèse: Quelques observations sur le pipeline (notes, section 8.6.2) Parenthèse: Quelques observations sur le pipeline Le pipeline augmente le débit significativement: de 48 à 120 clients par heure. Pour le premier client, le pipeline n’est pas intéressant, il perd 75 secondes dans le cas du pipeline naïf et 15 secondes dans le cas du pipeline ajusté. Pour le 3e client, le pipeline est très intéressant: il pourra manger après 150 s (cinq coups d’horloge) au lieu de 225 s pour le cas sans pipeline. Le pipeline n’est intéressant que s’il y a suffisamment de clients pour le remplir. Pour plusieurs applications impliquant un flux de données, une latence supplémentaire est sans importance. Dans le cas d’un lecteur audio, le fait d’avoir quelques cycles de retard est sans effet. En supposant un taux de données de 44.1 KHz, une latence de 10 cycles d’horloge est inférieure à 250 μs. Ce retard est imperceptible pour un être humain qui vient de lancer la lecture d’un fichier de musique. Pour certaines applications, une latence supplémentaire est à éviter. Communications bidirectionnelles. Transactions financières en bourse.

Augmenter le débit en parallélisant les calculs (notes, section 8.6.2) Augmenter le débit en parallélisant les calculs Instancier plusieurs unités de traitement permet de traiter plusieurs données en parallèle et augmenter le débit. Exemple: pour un processeur vidéo, on peut décomposer une image en régions indépendantes et associer le traitement de chaque région à un processeur différent. cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s Période d’horloge 75 s, latence 1 cycle, 2 clients simultanés, débit 2 clients/cycle = 96 clients/heure

Augmenter le débit avec pipeline et parallélisation des calculs (notes, section 8.6.2) Augmenter le débit avec pipeline et parallélisation des calculs Attente 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s Période d’horloge 30 s, latence 3 cycles, 2 clients simultanés, débit 2 clients/cycle = 240 clients/heure

(notes, section 8.6.2) Augmenter le débit avec pipeline et parallélisation des calculs et réduction du délai Attente 12 s Attente 2 s cabarets 5 s boissons 10 s plat principal 25 s bar à salade 15 s caisse 12 s cabarets 5 s boissons 10 s plat principal 25 s bar à salade 15 s caisse 12 s Période d’horloge 27 s, latence 3 cycles, 2 clients simultanés, débit 2 clients/cycle = 266.7 clients/heure

Augmenter le débit en parallélisant les calculs (cas FPGA extrême …) (notes, section 8.6.2) Augmenter le débit en parallélisant les calculs (cas FPGA extrême …) Attente 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s cabarets 5 s boissons 10 s plat principal 30 s bar à salade 15 s caisse 15 s Période d’horloge 30 s, latence 3 cycles, 20 clients simultanés, débit 20 clients/cycle = 2400 clients par heure

Architecture à pipeline pour circuit numérique (notes, section 8.6.3) Architecture à pipeline pour circuit numérique L’utilisation d’architectures à pipeline est une puissante technique pour augmenter la fréquence d’horloge d’un système et son débit. Rappel - la période minimale de l’horloge est donnée par : Pour diminuer Tmin, il faut réduire la somme des termes. td, tsu (délai de propagation et de préparation des bascules): Ces valeurs sont en général fixes. tcomb (délai de propagation de la logique combinatoire): Une architecture à pipeline s’attaque aux délais de la logique combinatoire en décomposant le chemin critique. tprop (délai de propagation des interconnexions): Il faut réduire la longueur des interconnexions en disposant judicieusement les composantes du sur le chemin critique.

Architecture à pipeline pour circuit numérique (notes, section 8.6.3) Architecture à pipeline pour circuit numérique Supposons (td, tsu, tprop) = (2 ns, 1 ns, 0 ns) Tmin = 2 + 8 + 0 + 1 = 11 ns Tmin1 = 2 + 4 + 0 + 1 = 7 ns Tmin2 = 2 + 4 + 0 + 1 = 7 ns Tmin = 7 ns ** On ne peut pas réduire Tmin de 50%, le pipeline vient avec une pénalité, on ne peut pas diviser ni td ni tsu.

Le pipeline en pratique (notes, section 8.6.3) Le pipeline en pratique Le désavantage principal d’une architecture avec pipeline est son coût élevé en matériel. Quand on introduit un étage de pipeline il faut synchroniser tous les signaux de cet étage, même s’ils ne sont pas dans le chemin critique (exemple, dans la diapositive précédente, de la bascule C à la porte NON-OU). Cependant, pour les FPGAs, la présence d’une très grande quantité de bascules prédéfinies à l’intérieur des blocs de logique programmable rend possible et efficace l’utilisation d’architectures à pipeline. On ne peut enlever le délai td ni le temps de préparation tsu aux étages de pipeline. Il faut bien balancer les nouveaux chemins. La fréquence maximale d’opération du circuit est limitée par le chemin le plus lent du circuit.

Le pipeline: stratégie (notes, section 8.6.3) Le pipeline: stratégie Pour ajouter un étage de pipeline, on peut suivre la stratégie suivante: Représenter le circuit avec les signaux qui vont de gauche à droite. Si une boucle de rétroaction est présente, la décomposer en répétant le registre cible à la droite du registre source. Identifier le chemin critique et placer un registre de façon à le couper en formant deux moitiés avec les délais les plus semblables possible. Former une courbe verticale qui traverse le circuit et qui passe à travers du registre de pipeline ajouté. Ajouter un registre de pipeline à chaque intersection de la courbe et d’un signal horizontal.

Exercice de pipeline Pipeliner le circuit. (notes, section 8.6.3) Exercice de pipeline Pipeliner le circuit. Donner le code VHDL avant et après le pipeline.

(notes, section 8.6.3) Exercice de pipeline

(notes, section 8.6.3) Exercice de pipeline

(notes, section 8.6.3) Exercice de pipeline

Parenthèse: optimiser le pipeline (pas dans les notes) Parenthèse: optimiser le pipeline C: coût du circuit pipeliné G: coût du circuit sans pipeline k: nombre d’étages de pipeline L: coût en registres par étage de pipeline Tp: délai du circuit avec pipeline T: délai du circuit sans pipeline P: performance du circuit avec pipeline = 1/Tp S: délai d’un registre de pipeline C/P: rapport cout/performance kopt: nombre d’étages de pipeline pour optimiser le rapport coût/performance Quelle est la valeur de L pour un FPGA? Quel est le kopt correspondant?

Minimiser la latence (1) (notes, section 8.6.4) Minimiser la latence (1) Certains processeurs ne traitent pas un flux important de données, mais traitent plutôt des données ponctuelles à intervalles irréguliers. Dans un tel cas, il est plus important de réduire la latence que le débit. Stratégies: Réduire le délai sur le chemin critique. Réorganiser l’ordre dans lequel les calculs sont faits. Paralléliser les calculs sur plusieurs unités. Éviter le pipeline.

Minimiser la latence (2) (notes, section 8.6.4) Minimiser la latence (2) La façon de répartir les calculs peut avoir une incidence importante sur la latence. Par exemple, considérons le problème de l’addition de quatre nombres. Il y a deux façons d’organiser les calculs, chacun avec sa façon de modéliser le circuit en VHDL. Dans la version de gauche, l’addition est faite en série. Dans celle de droite, on parallélise le premier calcul. La latence est réduite de 33%. Somme <= A + B + C + D; Somme <= (A + B) + (C + D);

Minimiser la surface (1) (notes, section 8.6.5) Minimiser la surface (1) Pour minimiser la surface utilisée, on peut utiliser le partage des ressources. L’exemple montre deux interprétations à un modèle VHDL. La différence entre les deux est basée sur la sélection d’une somme ou d’un opérande. Le chemin critique est le même pour les deux, mais la version de droite n’utilise qu’un seul additionneur. process (D1, D2, D3, S) begin if S = '1' then D5 <= D1 + D2; else D5 <= D1 + D3; end if; end process;

Minimiser la surface (2) (notes, section 8.6.5) Minimiser la surface (2) Une autre approche consiste à utiliser des stratégies contraires à celles utilisées pour maximiser le débit en éliminant le parallélisme dans les calculs. Au lieu d’instancier plusieurs composantes identiques pour effectuer des calculs, on en n’utilise qu’une seule et on en contrôle l’accès à l’aide d’une unité de contrôle qui implémente une machine à états.

Parenthèse: favoriser la surface ou le délai lors de la synthèse (pas dans les notes) Parenthèse: favoriser la surface ou le délai lors de la synthèse

Niveaux de compromis de design et leur impact (notes, section 8.6.6) Niveaux de compromis de design et leur impact En règle générale, plus une décision de design est prise à un haut niveau d’abstraction et plus son impact sera grand sur la performance et la surface d’un système. Une bonne décision prise à un bas niveau d’abstraction ne peut pas en général compenser pour une mauvaise décision prise à un haut niveau d’abstraction. Haut niveau d’abstraction choix de l’algorithme choix de l’implémentation de l’algorithme (p. ex. parallèle ou sérielle) choix de la précision des calculs Bas niveau d’abstraction choix des circuits

Plan pour aujourd’hui Optimisation pour la surface ou le débit (8.6) latence et débit comment maximiser le débit architectures à pipeline minimiser la latence minimiser la surface Exemple: conception d’un filtre FIR, comparaison de trois designs Conception pour FPGA: (8.8) Documentation etc. (8.9 et 8.10)

Exemple de conception: réduction du bruit dans un signal audio à l’aide d’un filtre

Exemple: filtre numérique Structure d’un filtre numérique à réponse impulsionnelle finie.

Design #1: forme directe de base entity fir is generic ( Win : positive := 8; Wout : positive := 20 ); port ( reset_n, clk : in std_logic; x : in signed(Win - 1 downto 0); y : out signed(Wout - 1 downto 0) end fir; L’entrée est exprimée sur 8 bits, la sortie sur 20. Au fil des calculs, plus de bits sont nécessaires pour représenter les résultats intermédiaires. Par exemple deux nombres de 8 bits multipliés ensemble donnent un résultat exprimé sur 16 bits. Les coefficients h(i) sont des constantes. Exercice: donner le code VHDL: de la ligne de délai; des produits et de leur accumulation.

Design #1: forme directe de base définition de constantes et de types library IEEE; use ieee.numeric_std.all; package firpack is constant Win : integer := 8; constant Wout : integer := 20; type coefficients is array(natural range <>) of integer range -(2 ** (Win - 1)) to 2 ** (Win - 1); constant h : coefficients := (-12, 8, 17, 4, -20, -11, 47, 107, 107, 47, -11, -20, 4, 17, 8, -12); type ligneDelais is array(0 to h'length - 1) of signed(Win - 1 downto 0); type produits is array(0 to h'length - 1) of signed(2 * Win - 1 downto 0); end firpack; Il existe des algorithmes pour obtenir la valeur des coefficients en fonction de la réponse en fréquence désirée pour le filtre. Les coefficients montrés ici ont été obtenus à l’aide de MATLAB.

Design #1: forme directe de base codage de la ligne de délais process(clk) begin if rising_edge(CLK) then if (reset_n = '0') then xDelai <= (others => (others => '0')); else for k in xDelai'length - 1 downto 1 loop xDelai(k) <= xDelai(k - 1); end loop; xDelai(0) <= x; end if; end process; La ligne de délai est composée de 16 registres en série pour entreposer des versions retardées de x(n), x(n-1), x(n-2), …, x(n- 15).

Design #1: forme directe de base codage des produits et de leur accumulation -- génération et addition des produits, et sortie finale -- y <= h(0) * xDelai(0) + h(1) * xDelai(1) + ... + h(15) * xDelai(15); process(clk) variable somme : integer := 0; begin if rising_edge(CLK) then if reset_n = '0' then y <= (others => '0'); else somme := 0; for k in 0 to xDelai'length - 1 loop somme := somme + to_integer(h(k) * xDelai(k)); end loop; y <= to_signed(somme, y'length); end if; end process; Les produits sont calculés et additionnés tous ensemble. Une boucle simplifie l’écriture mais n’implique pas de séquence de calcul: tout est concurrent. Latence de 1 registre, 1 cycle. (On ne compte pas le premier registre dans lequel on place la donnée en entrée)

Design #1: forme directe de base résultats de synthèse Ressources utilisées: Number of Slices: 190 out of 13696 1% Number of Slice Flip Flops: 148 out of 27392 0% Number of 4 input LUTs: 270 out of 27392 0% Number of MULT18X18s: 12 out of 136 8% Période minimale d’horloge et chemin critique Minimum period: 25.436ns (Maximum Frequency: 39.314MHz) Source: xDelai_0_0 (FF) Destination: y_19 (FF) Data Path Delay: 25.436ns (Levels of Logic = 40) Latence: 1 cycle

Filtre numérique Exercice: Proposer une architecture pour maximiser le débit.

Design #2: forme directe avec les produits pipelinés et un arbre binaire d’additions pipeliné type addniv1 is array(0 to h'length / 2 - 1) of signed(2 * Win - 1 + 1 downto 0); type addniv2 is array(0 to h'length / 4 - 1) of signed(2 * Win - 1 + 2 downto 0); type addniv3 is array(0 to h'length / 8 - 1) of signed(2 * Win - 1 + 3 downto 0); niveau 0 niveau 1 niveau 2 niveau 3 niveau 4: addition finale Latence de 5 registres, 5 cycles. Chaque produit est placé dans un registre. Exercice: donner le code VHDL de l’arbre binaire d’additions. Les produits sont accumulés deux à la fois, ce qui correspond aux modules d’addition sur les FPGA. Chaque somme est placée dans un registre. Dans cette version, le chemin critique est le plus court possible, mais il n’est pas clair à partir du schéma où celui-ci se trouve.

Design #2: forme directe avec les produits pipelinés et un arbre binaire d’additions pipeliné -- ligne de délais process(clk) begin if rising_edge(CLK) then if (reset_n = '0') then xDelai <= (others => (others => '0')); else for k in xDelai'length - 1 downto 1 loop xDelai(k) <= xDelai(k - 1); end loop; xDelai(0) <= x; end if; end process; -- registres des produits process (clk) lesproduits <= (others => (others => '0')); for k in 0 to lesproduits'length - 1 loop lesproduits(k) <= h(k) * xDelai(k); La même ligne de délai que pour le design #1.

Design #2: forme directe avec les produits pipelinés et un arbre binaire d’additions pipeliné -- addition des produits avec un arbre binaire pipeliné et sortie finale process(clk) variable somme : integer := 0; begin if rising_edge(clk) then if reset_n = '0' then lesaddniv1 <= (others => (others => '0')); lesaddniv2 <= (others => (others => '0')); lesaddniv3 <= (others => (others => '0')); else for k in 0 to h'length / 2 - 1 loop lesaddniv1(k) <= resize(lesproduits(2 * k), lesaddniv1(k)'length) + resize(lesproduits(2 * k + 1), lesaddniv1(k)'length); end loop; for k in 0 to h'length / 4 - 1 loop lesaddniv2(k) <= resize(lesaddniv1(2 * k), lesaddniv2(k)'length) + resize(lesaddniv1(2 * k + 1), lesaddniv2(k)'length); for k in 0 to h'length / 8 - 1 loop lesaddniv3(k) <= resize(lesaddniv2(2 * k), lesaddniv3(k)'length) + resize(lesaddniv2(2 * k + 1), lesaddniv3(k)'length); end if; somme := to_integer(lesaddniv3(0) + lesaddniv3(1)); y <= to_signed(somme, y'length); end process; Trois boucles donnent une écriture concise. La fonction resize est utilisée pour que les sommes progressent en largeur d’un bit à la fois.

Design #2: forme directe avec les produits pipelinés et un arbre binaire d’additions pipeliné Résultats de la synthèse: ressources utilisées: Number of Slices: 204 out of 13696 1% Number of Slice Flip Flops: 360 out of 27392 1% Number of 4 input LUTs: 242 out of 27392 0% Number of MULT18X18s: 12 out of 136 8% période minimale d’horloge et chemin critique Minimum period: 3.166ns (Maximum Frequency: 315.856MHz) Source: Mmult_lesproduits_8_mult0000 (MULT) Destination: lesaddniv1_4_16 (FF) Data Path Delay: 3.166ns (Levels of Logic = 18) latence: 5 cycles

Sommaire circuit de base vs circuit pipeliné design détails LUT FF Mul Tmin (ns) Débit (cycles/ résultat) (ns/résultat) Latence (cycles) 1 base 270 148 12 24.4 2 pipeliné 242 360 3.17 5 15.9

Filtre numérique Exercice: Proposer une architecture pour minimiser la surface. Conseil: utiliser un seul multiplicateur et un seul additionneur.

Design #3: forme compacte avec machine à états chemin des données -- ligne de délais process(clk) begin if rising_edge(CLK) then if (reset_n = '0') then xDelai <= (others => (others => '0')); elsif (etat = attente) and (go = '1') then for k in xDelai'length - 1 downto 1 loop xDelai(k) <= xDelai(k - 1); end loop; xDelai(0) <= x; end if; end process; Un seul multiplicateur. Même ligne de délais que les deux autres designs. Un pointeur permet d’accéder chaque donnée x et chaque coefficient, un à la fois. Une unité de contrôle doit régler la séquence des calculs ainsi que l’échange des données x(n) et y(n) avec le monde extérieur.

Design #3: forme compacte avec machine à états type type_etat is (attente, accumulation); signal etat : type_etat; -- ... -- chemin des données intégré à l’unité de contrôle controle : process (CLK) variable pointeur : integer range 0 to 15; variable somme : integer; begin if rising_edge(CLK) then if reset_n = '0' then etat <= attente; y <= (others => '0'); else case etat is when attente => pointeur := 0; somme := 0; if go = '1' then etat <= accumulation; end if; when accumulation => somme := somme + to_integer(h(pointeur) * xDelai(pointeur)); if pointeur = 15 then y <= to_signed(somme, y'length); pointeur := pointeur + 1; when others => end case; end process; pret <= '1' when etat = attente else '0';

Design #3: forme compacte avec machine à états Résultats de la synthèse: ressources utilisées: Number of Slices: 127 out of 13696 0% Number of Slice Flip Flops: 173 out of 27392 0% Number of 4 input LUTs: 124 out of 27392 0% Number of MULT18X18s: 1 out of 136 0% période minimale d’horloge et chemin critique Minimum period: 7.420ns (Maximum Frequency: 134.768MHz) Source: pointeur_0 (FF) Destination: y_19 (FF) Data Path Delay: 7.420ns (Levels of Logic = 11) latence: 17 cycles

Sommaire Design #1 Design #2 Design #3

Sommaire 1 base 270 148 12 24.4 6.59 39 2 pipeliné 242 360 3.17 5 15.9 design détails LUT FF Mul Tmin (ns) Débit (cycles/ résultat) (ns/résultat) Latence (cycles) C/P v. 1 v.2 1 base 270 148 12 24.4 6.59 39 2 pipeliné 242 360 3.17 5 15.9 0.77 5.7 3 compact 124 173 7.42 17 126 126.1 15.6 50 Métrique Coût/Performance: On peut prendre Coût = nombre de LUTs (un petit nombre est bon!) et Performance = 1/Débit (un grand nombre est bon!) On obtient C/P = {6.59K, 0.77K, 15.6K} pour les designs 1, 2, 3. Le design #2 est donc le meilleur selon cette métrique. Avec C = #LUT + #FF + 100 × #Mul, on obtient C/P = {39K, 5.7K, 50K}, ce qui mène à la même conclusion. La morale: pour les FPGAs, il est très avantageux de pipeliner un design au maximum, à moins d’avoir à rencontrer des contraintes très strictes d’utilisation des ressources.

Niveaux de compromis de design et leur impact (notes, section 8.6.6) Niveaux de compromis de design et leur impact Pour le problème de l’implémentation d’un filtre, on peut considérer les décisions à prendre aux quatre niveaux vus précédemment: choix de l’algorithme Haut niveau d’abstraction Quel type de filtre? choix de l’implémentation de l’algorithme (p. ex. parallèle ou sérielle) Forme pipelinée ou compacte? Combien de bits de précision pour les entrées et pour les résultats intermédiaires? choix de la précision des calculs choix des circuits Bas niveau d’abstraction Quels types d’additionneurs et de multiplicateurs?

Plan pour aujourd’hui Optimisation pour la surface ou le débit (8.6) latence et débit comment maximiser le débit architectures à pipeline minimiser la latence minimiser la surface Exemple: conception d’un filtre FIR, comparaison de trois designs Conception pour FPGA: (8.8) Documentation etc. (8.9 et 8.10)

Sept principes de conception FPGA (notes, section 8.8) Sept principes de conception FPGA Nous présentons sept principes de conception qui sont applicables principalement aux implémentations sur FPGA. Adopter un style de conception synchrone; Utiliser des bascules (flip-flop) plutôt que des loquets (latch); Définir un signal d’initialisation globale; Utiliser les réseaux de distribution de signaux d’horloge; Exploiter toutes les ressources disponibles sur le FPGA; Effectuer une disposition manuelle des blocs sur le chemin critique; et, Favoriser l’arithmétique en virgule fixe plutôt que flottante.

Principe de conception FPGA #1: conception synchrone (notes, section 8.8.1) Principe de conception FPGA #1: conception synchrone On obtient en général de biens meilleurs résultats avec un FPGA en adoptant un style de conception synchrone. Les structures asynchrones sont mal adaptées aux FPGAs. Il faut aussi éviter de se fier aux délais d’une composante ou du routage d’un signal, surtout si on utilise un synthétiseur et des outils d’implémentation automatiques. Par exemple, on pourrait être tenté de retarder un signal en le faisant passer par deux inverseurs en cascade. Cependant, un synthétiseur aura tôt fait d’éliminer cette structure inutile du point de vue fonctionnel. Les signaux d’initialisation des bascules devraient aussi être synchrones.

Principe de conception FPGA #2: bascules vs loquets (notes, section 8.8.2) Principe de conception FPGA #2: bascules vs loquets Dans un ASIC sur mesure ou un ASIC à cellules normalisées, les loquets offrent plusieurs avantages. Tout d’abord, ils requièrent la moitié des transistors d’une bascule. En utilisant des techniques spéciales, on parvient à obtenir des circuits fiables et plus rapides qu’avec des bascules. Cependant, pour un FPGA le coût est identique entre une bascule et un loquet. Il est donc grandement avantageux de toujours utiliser des bascules. Xilinx inc., Virtex-5 FPGA User Guide (ug190 v. 5.4), March 2012

Principe de conception FPGA #3: initialisation globale (notes, section 8.8.3) Principe de conception FPGA #3: initialisation globale Il est avantageux d’utiliser un signal unique pour initialiser toutes les bascules parce que la plupart des FPGAs comportent un chemin spécial pour accomplir cette tâche.

(notes, section 8.8.4) Principe de conception FPGA #4: génération et distribution de l’horloge Le routage inadéquat d’un signal d’horloge peut résulter en un déphasage d’horloge et une réduction des performances du circuit. Un signal d’horloge généré sur le FPGA devrait être passé à un tampon d’horloge (Xilinx: Global Clock Buffer, un Virtex-5 en contient 32). Pour les outils de Xilinx, il faut insérer le symbole « BUFG » à la sortie du générateur d’horloge.

(notes, section 8.8.5) Principe de conception FPGA #5: exploitation de toutes les ressources (1) Les ressources en place dans un FPGA sont ‘gratuites’. Une fois une puce choisie pour un système, il ne coûte ‘rien’ d’utiliser toutes les ressources qu’elle contient. Ce raisonnement n’est pas vrai nécessairement pour les autres technologies, comme pour les ASICs à cellules normalisées. On néglige ici la consommation de puissance. Dans ce cas, il est très avantageux d’utiliser les registres présents dans les blocs logiques en adoptant une architecture à pipeline. Cette approche peut réduire significativement les délais de propagation sur le chemin critique et accélérer ainsi le débit de données que le système peut supporter. Le seul inconvénient est l’augmentation de la latence. Beaucoup d’applications sont insensibles à une latence de plusieurs dizaines de cycles d’horloge de 100 MHz ou plus, ce qui rend les architectures à pipeline très intéressantes.

(notes, section 8.8.5) Principe de conception FPGA #5: exploitation de toutes les ressources (2) Un corolaire de ce principe est qu’il est avantageux de placer deux registres supplémentaires dans le chemin de chaque entrée et sortie du système. Le premier registre est placé dans le bloc d’entrées-sorties du FPGA, diminuant au minimum le délai pour la saisie du signal. Le deuxième registre donne beaucoup de flexibilité au placeur et au routeur pour déterminer l’emplacement optimal du module qui doit traiter ce signal.

(notes, section 8.8.5) Principe de conception FPGA #5: exploitation de toutes les ressources (3) Les délais de propagation peuvent être grandement réduits en limitant la charge à la sortie d’un module. On peut atteindre ce but en employant un arbre de distribution. Le principe consiste à faire mener une charge réduite composée d’un groupe de bascules. Chacune de ces bascules peut ensuite mener les modules qui doivent recevoir le signal. Dans la description du circuit, il s’agit d’utiliser des noms différents pour des signaux identiques, ce qui devrait empêcher l’outil de synthèse de les combiner.

Principe de conception FPGA #6: disposition manuelle (notes, section 8.8.6) Principe de conception FPGA #6: disposition manuelle Il peut être très avantageux de faire la gestion manuelle de la disposition (floorplanning) pour les parties critiques d’un circuit. Les manufacturiers de FPGA offre des outils qui permettent de déterminer la position absolue ou relative de certains registres sur la puce. On laisse ensuite les outils automatisés faire la disposition du reste du circuit. En plaçant manuellement les blocs les plus lents, on facilite la tâche du placeur automatique et on accélère cette étape. L’avantage principal, cependant, est qu’on peut en arriver à une solution réellement optimale (i.e. qui ne peut être améliorée). L’inconvénient est que ce travail peut être ardu et pénible, et il devrait donc être réservé uniquement aux parties critiques d’un système.

(notes, section 8.8.7) Principe de conception FPGA #7: arithmétique en virgule flottante ou fixe En pratique, on requiert rarement la très grande précision (8 chiffres significatifs et plus) offerte par les calculatrices et les microprocesseurs à usage général. À part pour les applications financières et certaines applications scientifiques, de trois à cinq chiffres significatifs suffisent amplement. Ceci est spécialement vrai pour les systèmes qui traitent des données provenant de phénomènes naturels comme les sons ou les signaux électromagnétiques. La voix dans un système téléphonique est échantillonnée avec 8 bits. Les sons enregistrés sur un CD audio le sont avec 16 bits. Les pixels sont encodés sur 8 bits. Il y a au moins un ordre de grandeur de différence en complexité et en performance entre un circuit arithmétique qui fonctionne en virgule fixe par rapport à un circuit semblable qui fonctionne en virgule flottante. Il est utile lors de la modélisation du circuit de tenir compte de ce fait et de mesurer les conséquences d’utiliser un système à virgule fixe. 10 bits donnent une précision de 3 chiffres significatifs. 20 bits donnent une précision de 6 chiffres significatifs.

Sept principes de conception FPGA (notes, section 8.8) Sept principes de conception FPGA Nous présentons sept principes de conception qui sont applicables principalement aux implémentations sur FPGA. Adopter un style de conception synchrone; Utiliser des bascules (flip-flop) plutôt que des loquets (latch); Définir un signal d’initialisation globale; Utiliser les réseaux de distribution de signaux d’horloge; Exploiter toutes les ressources disponibles sur le FPGA; Effectuer une disposition manuelle des blocs sur le chemin critique; et, Favoriser l’arithmétique en virgule fixe plutôt que flottante.

Plan pour aujourd’hui Optimisation pour la surface ou le débit (8.6) latence et débit comment maximiser le débit architectures à pipeline minimiser la latence minimiser la surface Exemple: conception d’un filtre FIR, comparaison de trois designs Conception pour FPGA: (8.8) Documentation etc. (8.9 et 8.10)

Documentation de systèmes numériques (1) (notes, section 8.9) Documentation de systèmes numériques (1) La documentation adéquate d’un système numérique est essentielle à toutes les étapes de son cycle de vie. Dans la phase de conception et de réalisation, la documentation formalise le processus en assurant que les procédures nécessaires sont suivies. Elle permet de suivre l’évolution du design dans le temps par des balises définies systématiquement. Pour le travail en équipe, la documentation est absolument essentielle. Dans la phase de maintenance, la documentation permet de comprendre le fonctionnement du circuit pour le réparer et le mettre à jour. Ceci est vrai autant pour une personne qui doit modifier un système conçu par d’autres que pour le cas où l’on doit modifier son propre systèmes plusieurs mois plus tard.

Documentation de systèmes numériques (2) (notes, section 8.9) Documentation de systèmes numériques (2) Tous les principes de documentation du logiciel s’appliquent à la documentation d’un système numérique. Cependant, elle comporte des éléments différents. On peut noter entre autres les éléments suivants. Les diagrammes de bloc identifient les modules principaux du système ainsi que les interfaces entre les modules. Dans un diagramme de bloc, on devrait éviter d’identifier des composantes particulières. Le but de ce diagramme est de donner une vue d’ensemble du système sans nécessairement spécifier son implémentation. Il peut être utile de spécifier les noms des signaux d’interface de haut niveau. Une description fonctionnelle du système sous forme de texte narratif permet d’expliquer comment celui-ci doit se comporter dans différentes situations. C’est aussi dans ce genre de document qu’on peut expliquer les particularités du système, la philosophie du design, et les raisons qui ont poussé les concepteurs à choisir certaines options plutôt que d’autres.

Documentation de systèmes numériques (3) (notes, section 8.9) Documentation de systèmes numériques (3) … suite … Une description des fonctions logiques du système peut être formée d’une combinaison de schémas logiques, de code HDL et de diagrammes d’états. Pour le travail en équipe, le code HDL doit suivre des directives et conventions acceptées par le groupe. Ces conventions devraient inclure des paramètres aussi diversifiés qu’un format normalisé pour les en-têtes de fichiers, la façon de choisir des identificateurs et la façon d’écrire une structure de sélection. Des conventions doivent aussi être en place pour les schémas logiques et les diagrammes d’états. Il faut éviter que les schémas logiques ressemblent à des spaghettis en limitant le nombre de modules sur un seul schéma en les hiérarchisant. On augmente grandement la lisibilité d’un diagramme en réduisant la longueur des interconnexions et en réduisant le nombre d’angles dans les interconnexions. Des diagrammes de synchronisation décrivent les caractéristiques dynamiques du système. On spécifie habituellement trois paramètres : une valeur maximale, une valeur minimale, et une valeur typique. La valeur typique est celle qu’on peut s’attendre d’observer dans la plupart des cas. Les valeurs minimale et maximale doivent être utilisées pour concevoir un système robuste en toute situation.

Documentation de systèmes numériques (4) (notes, section 8.9) Documentation de systèmes numériques (4) … suite … Les schémas électriques énumèrent les composantes matérielles du système et identifient les connexions de patte à patte. À partir du schéma, on doit pouvoir dresser la liste des matériaux nécessaires pour construire le circuit (bill of materials – BOM). En fait, il devrait être possible de construire le circuit sans en comprendre le fonctionnement.

Et pour finir, quelques principes généraux de conception (1) (notes, section 8.10) Et pour finir, quelques principes généraux de conception (1) De bons outils de conception et d’analyse ne garantissent pas le succès mais facilitent la tâche. Les circuits numériques sont bâtis avec des composantes analogiques et ont donc des caractéristiques analogiques dont il faut tenir compte. Documenter, documenter, documenter. Pour les autres, et pour vous. Utiliser des pratiques normalisées de codage et de documentation sauve beaucoup de temps. La conception de machines à états est un art similaire à celui de la programmation. Toujours rechercher la manière la plus efficace d’atteindre le but. Le système qui doit être conçu devra éventuellement être fabriqué et testé. On gagne beaucoup à tenir compte de la testabilité du système pendant sa conception.

Et pour finir, quelques principes généraux de conception (2) (notes, section 8.10) Et pour finir, quelques principes généraux de conception (2) La logique programmable est d’une grande utilité à cause de la flexibilité qu’elle offre au concepteur. Éviter les systèmes asynchrones. Porter une attention particulière à la synchronisation entre deux systèmes asynchrones l’un par rapport à l’autre. Le débogage d’un système est un art qui repose sur la maîtrise des trois principes suivants : la compréhension de la spécification; le contrôle des entrées du module à déboguer; et, l’observation des signaux internes, de l’état et des sorties du module à déboguer.

Résumé: performance – délai et espace Notions à retenir et maîtriser Importance relative 1. Expliquer les concepts de débit d’information et de latence de calcul, et comment ils sont reliés au délai du chemin critique, à la fréquence d’horloge et au parallélisme. 20 2. Pipeliner un circuit numérique pour en augmenter le débit. Synchroniser correctement le pipeline. Tenir compte du principe d’équilibre entre les chemins. Donner la nouvelle latence de calcul, le nouveau débit et les coûts. Expliquer les particularités, avantages et inconvénients du pipeline sur FPGA. 40 3. Nommer et expliquer quatre stratégies pour minimiser la latence de calcul. 15 4. Nommer et expliquer deux stratégies pour minimiser la surface utilisée. 5. Énumérer et expliquer les principes suivants pour guider l’utilisation de FPGA: conception synchrone, utiliser des bascules plutôt que des loquets, initialisation globale, distribution d’horloge, utilisation des ressources ‘gratuites’, disposition manuelle et calculs en virgule fixe 10 Total 100