GNU General Public License v3.0 licensed. Source available on github.com/zifeo/EPFL.
Spring 2014: Systèmes Logiques
[TOC]
- définitions
- un système est une collection organisée d'objets qui interagissent pour former un tout
- objets = composants du système
- des interconnexions (liens) entre les objets sont nécessaires pour les interactions
- structure = (composants, interconnexions), comment le système est fait
- comportement = (entrées, sorties), ce que le système fait (comment il répond aux entrées)
- analyse : déterminer le comportement d'un système à partir d’une description de sa structure
- synthèse : déterminer la structure qui produit un comportement donné
- plusieurs structures sont possibles pour un même comportement
- un ordinateur est une machine électronique composée de plusieurs parties interconnectées par des fils
- les fils ont un voltage haut (1) ou bas (0)
- 4 grandes parties dans un ordinateur (dispositifs d'entrées et de sorties, processeur, mémoire)
- un bus est un ensemble de fils électriques interconnectant les différents composants
- l'information est codé en bit, 8 bits forme un byte
- analogique : les valeurs ne sont pas séparées par des sauts: entre deux valeurs A et B il existe un nombre infini d'autres valeurs
- digitale (numérique) : une valeur est représentée par une chaîne finie de symboles appelés digits, pas possible de représentée toutes les valeurs par rapport à l'analogique, pas pertubré par un bruit externe
- information = bits + contexte
- représentation du nombre
$X$ sur un base$\beta$ est donné par l'équation$X=\sum_{i=0}^{N-1}\beta^ix_i$ -
$x_0$ est le chiffre de poids faile,${x_N}_1$ celui de poids fort - les mots ont généralement une longueur de 32 ou 64 bits
- les adresses de la mémoire ont une unique adresse par mot et dépend de leur premier byte
- les bytes d'un mot peut être ordonnés de différentes façons
- big endian : byte de poids fort est mis à l'adresse inférieur
- little endian : l'inverse
- système combinatoire
- la valeur de la sortie dépend uniquement des entrées
- table de vérité
- pour
$n$ entrée, la table compte$2^n$ entrées
- système séquentiel
- dépend des variations dans le temps
- mémoire
- fonctions logiques de base
- not (triangle)
- and (barre droit et arrondi de l'autre côté)
- or (fer de lance arrondi)
- xor (même chose mais avec une barre coupant les fils entrant)
- algèbre de Boole pour
$+$ et$\cdot$ - commutativité
$a\cdot b=b\cdot a$ - idempotence
$a\cdot a=a$ - distributivité
$a\cdot(b+c)=(a\cdot b)+(a\cdot c)$ - associativité (parenthèses)
- consensus
$(a\cdot \bar x)+(b\cdot x)+(a\cdot b)=(a\cdot \bar x)+(b\cdot x)$ - de Morgan
$\bar{a\cdot b}=\bar a + \bar b$
- commutativité
- fonctions complètes
- nand
$a\Uparrow b=\bar{a\cdot b}=\bar a + \bar b$ - nor
$a\Downarrow b=\bar{a+ b}=\bar a \cdot \bar b$
- nand
- forme algébrique
- minterme de
$n$ variables est un monôme possédant les$n$ variables sous forme vraie ou inversée par état d'entrée - la forme canonique algérbrique est la somme des mintermes égal à
$1$ - forme canonique décimale est le numéro des entrées de la table pour lesquelles le minterme est égal à
$1$
- minterme de
- méthodologie
- cachier des charges
- table de vérité
- équation logique
- logigramme
- table de Karnaugh
- impliquants d'une fonction : produit des variables de la fonction, en un nombre égal à une puissance de 2
- impliquants premiers : non compris dans un impliquant plus grand
- impliquants premiers essentiels : impliquant non inclus dans un autre premier et qui contient au moins un minterme
- circuits
- portes de circuits
- semiconducteurs
- silicium pur est isolant
- silicium avec du bore devient récepteur d'électron (P)
- silicium avec du phosphore devient donneur d'électron (N)
- diode = P et N
- transistor est comme une double diode à l'exception qu'il a besoin de courant pour en faire une porte
- portes
- NMOS : porte fermée (courant passe) quand courant appliqué (NPN)
- PMOS : inverse (symbole avec un 0 inverteur) (PNP)
- limitations
- limite du nombres de connexion entré/sortie
- retard de propagation
- interdit de connecter deux sorties ensemble
- interdit de faire de la rétroaction (feedback)
- porte tri-state : état tri-state lorsqu'il n'y a aucune valeur de tension
- circuit intégré : les composants sont fabriqués séparement et connectés ensuite
- circuit imprimé
- décodeur
$n\to m$ ($n$ entrées et$m<2^n$ sorties) : au maximum un seul bit de sortie est$1$ à un moment donné - démultiplexeur
$n\to m$ est un décodeur où chaque sortie réalise un minterme des$n$ variables d'entrée - multiplexeur
$n\to 1$ est un dispositif combinatoire avec$m$ entrée de contrôle ($m=\log_2(n)$) : la valeur de la sortie est égale à l'entrée choisie par le contrôle - encodeur : inverse du décodeur avec
$m\lceil\log_2(n)\rceil$ - comparateur de deux entrées à
$n$ bits : produit une sortie si les$n$ bits sont égaux entre eux - hasards (glitch) : problème de timing
- glitch à 0 : si deux entrées se suivent et une seule change ou si deux entrées produisent une sortie 1
- glitch à 1 : si deux entrées se suivent et une seule change ou si deux entrées produisent une sortie 0
- on peut éviter les glitch en utilisant une réalisation avec tous les impliquants premiers
-
langage formel pour la spécification des systèmes digitaux, autant comportemental que structurel
-
description à plusieurs niveaux
-
simulation activée par événements
-
modularité
-
extensibilité
-
général et très typé (comme le Ada)
-
entité (comme une boite noire, on ignore l’intérieur et on connait l’interface publique)
-
architecture (implémentation de la boite)
-
structure basique d’un programme VHDL library ieee; use ieee.std_logic_1164.all;
entity toto is port( interface : déclaration des entrées sorties ); end toto;
architecture test of toto is déclaration de l’architecture (par exemple signaux) begin **déclaration du corps de l’architecture (processus) end test;
-
les entrées/sorties sont les ports de l’entité
-
chaque composant interne du système est un ensemble de processus
-
les processus s’exécutent en parallèle
-
les processus de l’architecture sont connectés entre eux grâce aux signaux
-
VHDL : pas de casse, format libre, tout phrase se termine par « ; », double trait pour un commentaire de ligne library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;
entity exemple is port( a,b : in std_logic_vector(3 downto 0); op, clk, reset : in std_logic; c : out std_logic_vector(3 downto 0); ); end exemple;
architecture test of exemple is signal moinsb, opb, aopb : std_logic_vector(3 downto 0); begin moinsb <= not b + « 0001 »; — processus implicite opb <= b when op=‹ 0 › else moinsb; nomProcesus : process (reset, clk) — liste de sensibilité d’un processus explicite begin — le nom est optionnel if reset=‹ 1 › then c <= « 0000 » elseif rising_edge(clk) then c <= aopb; endif; endif; end process; end test;
-
constant
constant pi : réal := 3.1416;
-
variable
variable stop : CodeDEtat := STO;
(ne pas utiliser de variable) -
signaux
-
types
- scalaire (integer, real, enumerated, physical)
- composé (array, record)
- pointeur (acces)
- I/O (file)
- définir des types
type CodeDEtat is (init, ST1, ST2, exit);
outype word is array (0 to 31) of bit;
-
on doit déclarer les deux libraires pour utiliser les deux std_logic
- std_logic a plusieurs valeurs
- U uninitialied
- X forcing unknown
- 0 forcing 0
- 1 forcing 1
- Z/W/L/H/- etc
- std_logic a plusieurs valeurs
-
opérateur
- logique (and or nand nor xor xnor)
- comparaison (= /= < <= > >=)
- décalage (sll srl sla sra rol ror)
- concaténation (&)
- opération (+ - * / mod rem)
- divers (not abs **)
-
évitez les initialisation (
:=
) lors d’une synthèse
- introduction de l'horloge (séquentiel)
- flanc montant de l'horloge
- durée de l'horloge
- latch : dispositif de mémoire combinatoire
- D : entrée
- LD : contrôle, si 1 load, sinon hold
- Q : sortie
- bascule bistable D (flip-flop)
- CK : la sortie de la bascule peut changer seulement pendant la montée du signal CK
- entrées asyncrhones PR (preset, sortie à 1) et CLR (clear, sortie à 0)
- registre
- ensemble de bascule partageant le même signal d'horloge
- bit de contrôle L
- registre à décalage
- permet de décaler vers la droite ou la gauche selon les bits de contrôle
-
ordre des processus n’est pas important
-
implicite (concurrent) vs explicite (bloc de code impératif en boucle infinie)
-
la liste de sensibilité redémarre la boucle à chaque changement
-
ne pas oublié lors d’un graphe de signaux : le temps de delay de changement de valeur
-
structure if condition then phrases { elsif condition then phrases } [ else phrases ] end if;
case opcode is when X"00" => add; when X"01" => subtract; when others => illegal_opcode; end case;
loop faire; end loop;
while toto < tata loop toto := toto + 1; end loop;
for item in 1 to last_item loop table(item) := 0; end loop;
next [ label ] [ when condition ]; exit [ label ] [ when condition ];
-
conception d’un programme
- architecture comportementale (algorithme)
- architecture structurelle (assemblage de sous-bloc)
- architecture dataflow (équation logique)
- déclaration d’entité + corps de l’architecture => entité de conception
-
port (in/out/inout)
-
l’assemblage de sous-bloc
C1 : entity work.XNOR2(toto_arch) port map (0=> s3, I1 => A(3));
- représentation signe-magnitude
- bit de poids fort porte le signe : 0 si positif
- le reste les bits de nombre
- complément à 2 : inverse du nombre + 1 (on change tous les bits à gauche du bit blocher, le 1 le plus à droite)
- permet de traiter l'addition de nombre négatif
- attention aux overflows lors du même signe
- extension de signe
- on répète le bit de signe le nombre de fois qu'on veut
- en binaire, on ne peut représenter que les nombres fractionnaires de la forme
$X/2^k$ - codage binaire des nombres réels
- bit de signe
- mantisse
- exposant
- calcul arrondi (attention à la perte de précision)
- on normalise la mantisse (notation scientifique)
$\text{signe }1.\text{mantisse}\cdot2^{\text{exposant}}$ - 0 est représenté avec des 0 partout
- par extension les nombres avec un exposant égal à 0 ne sont pas normalisé (pas de 1, mais un 0)
$0\le x < 1$ - l'expost est biaisé (on lui ajoute toujours une constante
$2^{k-1}-1$ ou$k$ est le nombre de bits du champ de l'exposant - les valeurs extrêmes de l'exposant sont spécifiques (0..0 non normalisé et 1..1 pour infini positif négatif et NaN not a number)
- standard IEEE 754
- simple
- nombre de bits : 32
- mantisse sur 23 bits
- exposant sur 8 bits (biais de 127)
- double
- nombre de bits : 64
- mantisse sur 52 bits
- exposant sur 11 bits (biais de 1023)
- valeurs particulières
- deux valeurs pour 0, les deux signes avec exposant et mantisse à 0
- infini positif/negatif, signe, exposant = 1..1 et mantisse = 0..0
- NaN, signe indifférent, expostant = 1..1 et mantisse différent de 0..0
- simple
- passage d'une base à l'autre
- 2 à 10 :
$0101=0\cdot2^3+1\cdot2^2+0\cdot2^1+1\cdot2^0$ - 16 à 10 :
$A8CE=10\cdot16^3+8\cdot16^2+12\cdot16^1+14\cdot16^0$ - 10 à 2 : division par 2, 1 s'il y a reste, 0 sinon, lecture dans le sens inverse
- 10 à 16 : pareil même par 16
- 2 à 16 : groupement par 4
- 2 à 10 :
- passage à virgule
- 10 à 2 : on multiplie à chaque fois, si ça dépasse 1, sinon 0
- système séquentiel
- l'état futur est le résultat de l'état présent et des variables d'entrées
- au maximum
$2^n$ états ou$n$ est le nombre de variable - la mémoire est nécessaire pour stocker l'état
- machine de Mealy
- l'état futur dépend de l'état présent et des variables d'entrée
- changement des sorties n'est pas synchrone
- machine de Moore
- les variables de sortie dépendent uniquement de l'état présent
- changements de sorties synchrone
- demande généralement plus d'états qu'une machine de Mealy
- analyse des machines séquentielles
- déterminer les fonctions d'état futur et sortie et prévoir le comportement de la machine
- équations du système (sorties, bascules)
- table des états
- chaque ligne représente un etat présent
- chaque colonne représente une combinaison des entrées
- a chaque case on introduit l'état futur et la sortie correspondante
- graphe des états
- chaque état est représenté par le sommet d'un graphe orienté
- les changements d'état sont représentés par des arcs
- sur les arcs, on indique les valeurs des entrées qui produisent le changement et les valeurs de sorties
- chronogramme
- les états changent au flanc montant de l'horloge
- les sorties peuvent changer à tout moment
- élément de mémoire
process (en, d) begin if en='1' then q <= d; end if; end process
genere un latch (plus lent et mauvais)- attention à spécifier toutes les branches d'une condition (else)
- toutes les branches d'un cases doivent être définie
- il est préférable de dresser une liste des valeurs par défaut au début du cases
process (clk) begin if rising_edge(clk) then q <= d; end if; end process;
génère une bascule- reset
- asynchrone process (clk, reset) begin if reset='1' then q <= '0'; elsif rising_edge(clk) then q <= d; end if; end process;
- synchrone process (clk) begin if rising_edge(clk) then if reset='1' then q <= '0'; else q <= d; end if; end if; end process;
- synthèse d'une machine séquentiel
- processus qui gère les variables d'entrées et les changements d'états qui en découlent
- processus de reset et d'état (
state <= nextstate
)
- package (pour une réutilisation des fonctions)
- bibliothèque std et work incluses par défaut
- le package doit être compilé avant l'utilisation de ses fonctions (et ajouté à la bibliothèque de travail)
- déclaration des composants package toto is ici end toto;
- cahier des charges
- représentation formelle
- graphe des états (facultatif)
- table d'tats
- réduction de la table d'états
- codage de la table d'états
- calcul des fonctions d'excitation des bascules et des fonctions de sortie
- logigramme
- 3 exemples
- bits organisés en forme de matrice
- chaque ligne de la mémoire est appelée mot identifié par une adresse
- nombre de ligne est une puissance de 2
- opération sur le mot complet (read/write)
- mémoire RAM (random-access memory) : volatile
- statique (SRAM) : information conservé tant qu'il y a de la tension (latch)
- dynamique (DRAM) : rafraîchissement des données pour les conservés (8-16ms, condensateur, adresse = séquence de bit)
- RAS : row address strobe
- CAS : column address strobe
- burst refresh : par lignes consécutives à chaque période (impossible d'écrire ou de lire)
- distributed refresh : chaque ligne à son intervalle
- mémoire ROM (read-only memory) : non volatile
- mask : contenu initialisé non modifiable (par le fabriquant)
- PROM (programmable ROM) : modifiable une fois à l'aide d'équipement spécialisé (fusible)
- EPROM (erasable PROM) : modifiable
- UV / électrique / flash (électrique mais plus rapide)
- FIFO (first in first out) : non addressable (curseur qui bouge)
- LIFO : non addressable (curseur qui bouge)
- ASIC : application-specific integrated circuits (demande particulière)
- full custom / gate array (matrice) / standard cell (bibliothèque de gate) / structured (pré-fabriqué, plus grand, demande plus de puissance)
- ASSP : application-specific standard products (demande générale)
- PLD : programmable logic devices (assemblage de AND et OR, fusible)
- somme d'impliquants = 1 matrice AND puis 1 matrice OR
- PROM : matrice AND fixe, OR programmable
- PAL : matrice AND programmable, OR fixe (plus courant)
- PLA : matrice AND et OR programmable
- SPLD : simple PLD
- CPLD : complex PLD (matrice d'interconnexion entre des SPLD)
- caractérisé par nombre entrées/sorties/termes par sortie, vitesse, retard, consommation et technologie
- FPGA : field programmable gate array (modification chez soi)
- fonction LUT : stocke la table de vérité
- configuration par stream
- processeur : machine réalisant un traitement d'information
- besoin d'un algo et des ressources pour l'executer (éléments de stockage)
- décomposer en deux parties : unité de contrôle (chargée du séquencement de l'algorithme, machine séquentielle chargée de la génération des bits de contrôles des ressources à chaque coup d'horloge) et unité de traitement (ensemble d'éléments de stockage et de traitement
- exemples
- les données traitées sont stockées dans la mémoire
- le CPU (central processing unit) réalise les opérations de traitement
- le CPU possède son stockage plus rapide, mais plus petit : les registres
- le transfert des données entre processeur et mémoire se fait par le bus
- l'architecture de von Neumann a permis de stocker les instructions dans la mémoire principale en utilisant aucune connexion spécifique (les mémoires d'instruction et de données ne font qu'une)
- deux complexités de machine : processeurs CISC (complex instruction set computer) : pentium et processeurs RISC (reduced instruction set computer) : powerPC
- 3 types d'instruction :
- transfert de données
- opérations arithmétiques/logiques
- contrôle
- le format d'instruction varie (LOAD, STORE, JUMP, DIV, STOP etc.)
- processeur superscalaires peuvent chercher plusieurs instructions à la fois
- le parallélisme utilise plusieurs unité de traitement