La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 © Copyright 2005, Philippe Arlotto Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Cours microprocesseurs IUT.

Présentations similaires


Présentation au sujet: "1 © Copyright 2005, Philippe Arlotto Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Cours microprocesseurs IUT."— Transcription de la présentation:

1 1 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Cours microprocesseurs IUT GEII S2 Première partie : La mémoire

2 2 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Licence P aternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique 2.0 France Vous êtes libres : * de reproduire, distribuer et communiquer cette création au public * de modifier cette création, selon les conditions suivantes : Paternité. Vous devez citer le nom de l'auteur original. Pas d'Utilisation Commerciale. Vous n'avez pas le droit d'utiliser cette création à des fins commerciales. Partage des Conditions Initiales à l'Identique. Si vous modifiez, transformez ou adaptez cette création, vous n'avez le droit de distribuer la création qui en résulte que sous un contrat identiqueà celui-ci. * A chaque réutilisation ou distribution, vous devez faire apparaître clairement aux autres les conditions contractuelles de mise à disposition de cette création. * Chacune de ces conditions peut être levée si vous obtenez l'autorisation du titulaire des droits. Ce qui précède n'affecte en rien vos droits en tant qu'utilisateur (exceptions au droit d'auteur : copies réservées à l'usage privé du copiste, courtes citations, parodie...) voir le contrat complet sous : http://fr.creativecommons.org/contrats.htm

3 3 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Cours microprocesseurs Les différents types de mémoires Architecture des microprocesseurs Un système minimum Microcontrôleurs Le PIC 18F4520 Architecture / Périphériques Les instructions 18F Du C vers le code machine Principes de programmation Périphériques Outils de développement

4 4 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 La mémoire Une mémoire est un circuit à semi-conducteur permettant d’enregistrer, de conserver et de restituer des informations Elle est utilisée pour stocker les instructions d'un programme ainsi que les données associées (variables, constantes). Une mémoire peut être représentée comme une armoire de rangement constituée de différents tiroirs. Chaque tiroir représente alors une case mémoire qui peut contenir un seul élément : des données. Chaque tiroir possède un numéro appelé adresse. Chaque donnée devient alors accessible grâce à son adresse.

5 5 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 La mémoire 01111001 01001111 00001011 11001011 01001001 10011001 00001000 01111111 Données Adresses 1111111111111100 0000000000000011 0000000000000010 0000000000000001 0000000000000000 1111111111111111 1111111111111110 1111111111111101

6 6 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 La mémoire 01111001 01001111 00001011 11001011 01001001 10011001 00001000 01111111 Données (ici 8bits) Adresses (16bits) 0xFFFC 0x0003 0x0002 0x0001 0x0000 0xFFFF 0xFFFE 0xFFFD

7 7 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Notation hexadécimale Quatre chiffres binaires = 1 chiffre hexa Pour écrire en hexadécimal un nombre binaire dont le nombre de chiffres n'est pas multiple de 4, on rajoute 1, 2 ou 3 zéros à gauche. Exemple : 10 0000 1001 1010 = 0010 0000 1001 1010 = 0x209A Des nombres codés sur 14 bits ont donc des valeurs comprises entre 0x0000 (tous les bits à 0) et 0x3FFF (tous les bits à 1).

8 8 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Capacité d'une mémoire Le nombre de bits d'adresse fixe le nombre de cases possibles. n bits d'adresses permettent de référencer 2 n cases. Le nombre de bits d'une case est la taille des données. C'est souvent 8 bits (un octet). Capacité d'une mémoire Avec n bits d'adresses : en bits :2 n x (nombre de bits d'une donnée) en octets : capacité en bits / 8 Si la taille des données est 8 bits, la capacité en octets est 2 n

9 9 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Capacité d'une mémoire En informatique : 1 kilo = 2 10 = 1024 1 Mega = 2 10 k = 2 20 = 1024.1024 = 1048576 1 Giga = 2 10 M = 2 20 k = 2 30 1 Tera = 2 10 G = 2 20 M = 2 30 k = 2 40 Comme 1024 est proche de 1000, dans les publicités ont trouve parfois l'approximation 1ko = 1000o, 1Mo = 1 million d'octets, etc... Remarque : en anglais octet = byte (kb,Mb,...)

10 10 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Capacité d'une mémoire Depuis 1998 des préfixes normalisés ont été introduits mais leur usage reste assez peu répandu : kibi pour « kilo binaire », mébi pour « méga binaire », gibi pour « giga binaire », tébi pour « téra binaire »,.... On devrait donc écrire : 1 kibioctet (Kio) = 2 10 octets = 1 024 octets 1 mébioctet (Mio) = 2 20 octets = 1 024 Kio = 1 048 576 octets 1 gibioctet (Gio) = 2 30 octets = 1 024 Mio = 1 073 741 824 octets 1 tébioctet (Tio) = 2 40 octets = 1 024 Gio = 1 099 511 627 776 octets Et utiliser la signification traditionnelle pour k,M,G : 1ko = 1000o, 1Mo = 10 6 o, etc...

11 11 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Ordres de grandeur Une page de texte brut (1octet par caractère) ≈1ko Une page de traitement de texte : ≈100 ko Une image : webcam : 640x480 pixels codés sur 32bits = 1200ko appareil photo : 4Mpixels en JPEG qualité moyenne ≈ 1Mo Du son : 1 minute de mp3 : 1Mo 1 minute de format brut : 48Khz, 16 bits stéréo = 11Mo On estime que le cerveau humain stockerait l'équivalent de 200Mo...... ( http://www.merkle.com/humanMemory.html )

12 12 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Ordre de grandeur Programmes d'applications à microcontrôleur : Pas ou peu de graphisme ni de réseau : 1ko à 10-30ko (clé de voiture, télécommande TV, souris,... ) Graphique, réseau, traitement du signal : 100ko à 1-16Mo (petit routeur, modem, téléphone, appareil photo,... ) PC : fichier exécutable ≈ 10 à 100ko + ressource (image,video,...)

13 13 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Little Endian / Big Endian Pour stocker une donnée comportant plusieurs octets dans une mémoire dont la taille des données sont des octets, il y a deux manière de procéder : Little Endian : le poids faible dans l'adresse de plus faible valeur (the little end comes first) Big Endian : le poids faible dans l'adresse de valeur la plus forte (the big end comes first)

14 14 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Little Endian / Big Endian 0xAA 0xBB 0x1235 0x1234 La valeur 0xAABB est stockée à partir de l'adresse 0x1234 : Little Endian : Big Endian : Little Endian : Intel, Microchip,.... Big Endian : Freescale (Motorola),... 0xBB 0xAA 0x1235 0x1234

15 15 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Little Endian / Big Endian 0x00 0x01 0x00221234 La valeur entière 109243=0x0001AABB est stockée à partir de l'adresse 0x00221234 : Little Endian : Big Endian : 0xAA 0xBB 0x00221235 0x00221236 0x00221237 0xBB 0xAA 0x00221234 0x01 0x00 0x00221235 0x00221236 0x00221237 int i = 109243 ;

16 16 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Opérateur ET bit à bit Opérateurs ET bit à bit : & (à ne pas confondre avec le ET logique déjà vu : &&) char a = 0x92, b = 0xF1, c ; c = a & b ; 10010010 11 11 0001 100100 00......... a b c

17 17 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Opérateur OU bit à bit Opérateurs OU bit à bit : | (à ne pas confondre avec le OU logique déjà vu : ||) char a = 0xA2, b = 0x71, c ; c = a | b ; 10100010 01 11 0001 111100 11......... a b c

18 18 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Opérateur OU Exclusif bit à bit Opérateurs OU Exclusif bit à bit : ^ char a = 0x82, b = 0xF1, c ; c = a ^ b ; 10000010 11 11 0001 011100 11......... a b c

19 19 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Opérateur d'inversion bit à bit Opérateurs d'inversion bit à bit : ~ char a = 0x82 ; b= ~a ; Tous les bits de a sont inversés. b vaut donc ici 0x7D 10000010 01111101 a b......... Attention à ne pas confondre avec la négation logique ! !(x) est vrai (et vaut 1) quand x est faux et inversement. Comme toute valeur non nulle est vraie, ici avec b=!a; On aurait b qui vaudrait 0x01.

20 20 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Opérateur de décalage à gauche Décalage à gauche : << Tous les bits sont décalés vers la gauche, les bits qui "entrent" sont des zéros, les bits qui "sortent" sont perdus. char a=0x8A, b ; b = a << 3 ; // décalage de trois positions vers la gauche 10001010 01010000 a b 000..... perdus Mathématiquement, un décalage à gauche de n revient à multiplier par 2 n. Si des bits non nuls sont perdus c'est que le résultat ne tient pas dans le format.

21 21 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Opérateur de décalage à droite Décalage à droite : >> Tous les bits sont décalés vers la droite, les bits qui "sortent" sont perdus. Lorsque la valeur est non signée, les bits qui "rentrent" sont égaux à zéro. unsigned char a=0x96, b ; b = a >> 2 ; // décalage de deux positions vers la droite. 10010110 00100101 a b 00......... perdus a est non signé Le décalage à droite de n positions correspond à une division par 2 n. Les bits perdus correspondent à 0.5,0.25,0.125 etc...

22 22 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Opérateur de décalage à droite En C, si on décale à droite une valeur signée, le résultat dépend du compilateur utilisé ! Les bits qui rentrent sont soit des zéros (décalage logique), soit la valeur du bit de signe (décalage arithmétique). Il vaut donc mieux éviter d'utiliser l'opérateur >> sur des valeurs signées pour conserver la portabilité. Ex : signed char a = -4 ; 11111100 a 01111110 a>>1 arithmétique 11111110 a>>1 logique Dépend du Compilateur !

23 23 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Masque d'un bit Les masques de bits sont utilisés pour isoler un bit (ou un sous-ensemble de bit). Ce sont des quantités comportant tous les bits à zéros sauf celui (ou ceux) que l'on veut isoler. Les masques permettent de tester ou de modifier des bits sans influencer les autres. masque du bit 3 : 0000 1000 masque des bits 1 à 4 : 0001 1110 valeur : 0101 1101 masque : 0000 1000 Test d'un bit : La quantité valeur&masque est non nulle ssi le bit correspondant au masque vaut 1

24 24 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Tester un bit On fait un ET avec son masque : Ex : Si le bit 4 de x vaut 1.... mask = 0x10; // 0001 0000 if ( x & mask ) { // le bit 4 de x vaut 1 } else { // le bit 4 de x vaut 0 }

25 25 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Tester un bit En C, le masque du bit n° i peut s'écrire simplement 1<<i Donc pour tester le bit i on peut écrire : if ( x & (1<<i) ) { }

26 26 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Mettre un bit à 1 (sans modifier les autres) On fait un OU avec le masque du bit int x ; x = x | 0x10 ; // met le bit 4 de x à 1 10101001 00010000 x masque x | masque 10111001 Rappel de logique a+1=1 a+0=a

27 27 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Mettre un bit à 0 (sans modifier les autres) On fait un ET avec l'inverse du masque du bit int x ; x = x & (~0x10) ; // met le bit 4 de x à 0 10111101 11101111 x ~masque x & ~masque 10101101 Rappel de logique a.1=a a.0=0

28 28 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Inverser un bit (sans modifier les autres) On fait un Ou exclusif avec le masque du bit int x ; x = x ^ 0x10 ; // inverse le bit 4 de x 10111001 00010000 x masque x | masque 10101001 Rappel de logique a ⊕ 1=a a ⊕ 0=a

29 29 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Opérateurs "condensés" En C un expression de la forme x = x op y ; peut s'écrire x op= y ; Pour op ∈ { +, -, *, /, %, &,|, ^, > } Ainsi : x = x + 3 ; x += 3 ; y = y – b ; y -= b ; t = z z <<= a ; t = t & 0x04; t &= 0x04 ; etc....

30 30 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Macros de modifications de bits Il est souvent pratique de définir les macros suivantes pour manipuler les bits : // Mise à un d'un bit d'un octet #define BIT_SET( octet, nbit ) ( octet |= (1<<(nbit)) ) // Mise à zéro d'un bit dans un octet #define BIT_CLEAR( octet, nbit ) ( octet &= ~(1<<(nbit)) ) // Test d'un bit dans un octet // (renvoie 1 si le bit est à 1 et 0 sinon) #define BIT_TEST( octet, nbit ) ( octet&(1<<(nbit))? 1:0 )

31 31 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Macros de modifications de bits Utilisation : Mettre le bit 4 de c à 1 : BIT_SET(c,4); Mettre le bit 3 de c à 0 : BIT_CLEAR(c,3); Tester le bit 7 de c : if ( BIT_TEST(c,7)==0 ) { // b7 de c vaut 0 } ou if ( BIT_TEST(c,7) ) { // b7 de c vaut 1 }

32 32 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Conversion big endian little endian Pour une valeur 32 bits ça revient à faire : v = ((v>>24)&0x000000ff) | // move byte 3 to byte 0 ((v >8)&0x0000ff00) | // move byte 2 to byte 1 ((v<<24)&0xff000000) ; // move byte 0 to byte 3 En pratique on utilise les fonctions : htons() host to network short htonl() host to network long ntohs() network to host short ntohl() network to host long

33 33 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Différents types de mémoire RAM "famille RAM" (random access memory) Mémoire volatile : alimentation nécessaire pour la rétention des données stockées. Accès rapide en lecture et en écriture : ( <10 ns ) ROM "famille ROM" (read only memory) Mémoire non volatile (permanente) : rétention des données après la coupure de l'alimentation Accès : rapide en lecture ( < 10 ns ) impossible ou lent en écriture ( ~ ms )

34 34 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Mémoire RAM RAM dynamique Grande capacité à faible coût (par rapport au statique) Gestion complexe car les données doivent être rafraîchies en permanence (stockage dans un "condensateur" qui se décharge) C'est la mémoire RAM principale des ordinateurs de bureau

35 35 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Mémoire RAM RAM statique Coût plus élevé que les RAM dynamique à capacité égale Accès facile et très rapide Utilisation : pour des petites tailles (jusqu'à quelques Mo) lorsque la gestion et l'accès doivent être simple et rapide. Mémoire cache des ordinateurs de bureau Mémoire cache des contrôleurs de disques durs Mémoire RAM des micro-contrôleurs. Registres internes des circuits électroniques (µP,UART,...)

36 36 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Mémoire famille "ROM" Masked ROM Programmée en usine à partir d'un masque. Non reprogrammable Utilisée uniquement dans les circuits intégrés et pour les application à très fort volume. OTP (One Time Programmable) Programmée par l'utilisateur une seule fois. Utilisée pour le stockage d'un programme dans des applications à fort volume. Faible coût.

37 37 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Mémoire famille ROM EEPROM (Electricaly Erasable Programmable Memory) Mémoire effaçable électriquement et donc reprogrammable. Lente en écriture (qq ms). Lecture assez rapide Utilisée pour stocker des données qui ne changent pas très souvent : programmes, constantes de calibration, codes d'accès,... (100000 à 1M d'écritures seulement) FLASH (flash rom) Mémoire effaçable électriquement et donc reprogrammable. Grande densité d'intégration à faible coût. Utilisation : mémoire programme micro-contrôleur (NOR), stockage de données : clé usb, appareil photo, carte SD, (NAND)... Autre caractéristiques voisines de l'EEPROM

38 38 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Mémoires Flash Flash NOR Les temps d'effacement et d'écriture sont longs mais elle possède une interface d'adressage permettant un accès aléatoire et rapide à n'importe quelle position. (XIP : excute in place) Utilisée pour le stockage des programmes (microcontroleur, téléphone, box, etc...) : (XIP : excute in place) stockage très fiable. Flash NAND Plus rapide et produite à moindre cout que les NOR. Mais présente un taux d'erreur non négligeable. Un algorithme de correction d'erreur est nécessaire. Peu adaptée au boot direct. Utilisée pour le stockage de masse : Clé usb, carte SD, disque SSD.

39 39 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Et les MRAM ? La technologie MRAM (Magnetic RAM) permet de réaliser des mémoires qui cumulent certains avantages des Flash, des RAM dynamiques et des RAM statiques : Accès rapide en lecture et écriture (≈25ns) Non volatile Grande densité d'intégration Faible consommation Accès simple comme les RAM statiques Ex : Freescale MR2A16A 256k mots de 16bits (4Mb) Ces circuits devraient bientôt remplacer les DRAM de nos ordinateurs de bureau. Ils pourraient ainsi démarrer très rapidement.

40 40 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Code correcteur En ajoutant des bits supplémentaires (redondance) on peut détecter, voire corriger des erreurs de lecture (ou de transmission). Le mécanisme le plus simple est la parité qui permet de détecteur une (seule) erreur. En parité paire : On ajoute un bit dit de parité calculé de manière à ce que la parité totale soit paire. (en parité impaire, on veut que la parité totale soit impaire) A la réception, on recalcule la parité et on peut détecter une erreur de transmission. (S'il y a plus d'une erreur le procédé est inopérant).

41 41 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Parité 10111101 Exemple en parité paire : On veut transmettre les 7 bits : 0111101 On rajoute un bit de parité : Si à la réception on reçoit : 0110101 On recalcule la parité totale et on la trouve impaire. On détecte donc une erreur de transmission. Par contre on ne peut pas la corriger car on ne pas déterminer la position du bit erroné. 1

42 42 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Code correcteur (Hamming) Il existe des codes qui permettent non seulement de détecter des erreurs mais aussi de les corriger. Le plus simple est le code de Hamming 7,4 qui permet de détecter et de corriger une seule erreur. Pour 4 bits à transmettre on rajoute 3 bits de parité (7,4) d1,d2,d3 et d4 sont les quatre bits à transmettre p1,p2 et p3 sont les parités rajoutées. p1 = parité de d1,d2,d4 p2 = parité de d1,d3,d4 p3 = parité de d2,d3,d4

43 43 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Code correcteur (Hamming) Une erreur sur les parités n'affecte qu'un seul cercle. Une erreur sur une donnée affecte deux cercles sur trois. En recalculant les parités on retrouve la position de l'erreur. Images wikipedia.fr

44 44 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Code correcteur (Hamming) 1101 Soit d1,d2,d3,d4 = On calcule p1=1,p2=0,p3=0 Et on transmet : 1101001 Dans l'ordre p1,p2,d1,p3,d2,d3,d4

45 45 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Code correcteur (Hamming) 1101011 On reçoit p1,p2,d1,p3,d2,d3,d4: On recalcule les parités p1' = P(1,1,1) = 1 = p1 donc ok (0) p2' = P(1,1,1) = 1 # p2 donc erreur (1) p3' = P(1,1,1) = 1 # p3 donc erreur (1) e3e2e1 = 110 = 6 donc l'erreur est sur le 6ème bit transmit. Il faut donc corriger d3 ! et le message correct est : 1101001 Et les données utiles sont donc : 1101

46 46 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Code correcteur Reed Solomon On découpe les données utiles en blocs de taille fixe et on obtient un autre blocs de taille fixe (plus gros) qui est effectivement transmis. Par exemple, soit trois octets à transmettre : On calcule la somme Et la somme pondérée : Et on transmet : A la réception on recalcule s' et sp'. Si il y a une différence, c'est qu'il y a une erreur. La valeur de l'erreur est donnée par la différence s' – s La position de l'erreur est donnée par (sp'-sp)/(s' – s)

47 47 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Code correcteur Reed Solomon Par exemple soit n1=23, n2 = 4 et n3 = 18 On calcule : s = 23+4+18 = 45 sp = 23 + 2x4 + 3x18 = 85 Et on transmet : 23,4,18,45,85 A la réception si on reçoit : 23,56,18,45,85 On calcule s' = 97 donc l'erreur est e = s' – s = 97 – 45 = 52 On calcule sp' = 23+2x56+3x18= 189 donc ep=189 – 85 = 104 ep/e = 104/52 = 2 donc l'erreur est sur le deuxième octet. 56 – 52 = 4 donc le deuxième octet vaut 4. On a donc retrouvé n1=23, n2 = 4 et n3 = 18. NB : s et sp peuvent aussi être mal reçus : S'il y a une erreur sur s mais pas sur sp : n1,n2,n3 sont corrects S'il y a une erreur sur sp mais pas sur s : n1,n2,n3 sont corrects

48 48 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Code correcteur (entrelacement) Il existe bien sûr des codes plus compliqués qui permettent de corriger plus d'une erreur. Cependant en pratique les erreurs arrivent souvent en "paquets" : parasite, affaiblissement,.... Dans ce cas on étale (srambling) les bits d'un même groupe sur une grande durée et il y a alors de grande chance qu'un problème de transmission n'affecte qu'un seul bit d'un groupe. Le code correcteur permet alors de retrouver le message original. 01101011010010100101100101 11 1 00011011100011000111..... Un affaiblissement durant 3 x temps d'un bit n'affecte qu'un seul bit de chaque groupe

49 49 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Le codage Reed-Solomon utilisé par LRO Cette image a été transmise en 2009 par laser à sonde lunaire LRO. La correction Reed-Solomon permet de reconstituer le signal reçu malgré les erreurs de transmission.

50 50 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Un circuit mémoire (ram statique) CY62256 A0-A14 : entrées adresses I/O0-I/O7 : entrées/sorties données (parfois notées D0-D7) /CE : chip enable (parfois noté /CS chip select) /WE : write enable (parfois R/W) 0 : écriture I/00-I/O7 sont des entrées 1 : lecture I/O0-I/O7 sont des sorties /OE : activation des sorties D0-D7

51 51 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Ecriture CY62256 /CE=0 /OE=1 /WE=0 1) on applique l'adresse 2) /CE=0 /OE=1 /WE=0 3) on applique les données sur les broches I0-I7 qui sont alors des entrèes. données adresses

52 52 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Lecture CY62256 /CE=0 /OE=0 /WE=1 1) on applique l'adresse 2) /CE=0 et /OE=0 (/WE=1) 3) les données sont présentes sur les broches O0-O7 qui sont alors des sorties. données adresses

53 53 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Capacité d'un circuit mémoire On peut la déterminer à partir du nombre n de broches d'adresse : 2 n cases et du nombre de broches de données : taille des cases Exemple : CY 62256 A0-A14 donc 15 bits d'adresses = 2 15 cases I/O0-I/O7 donc 8 bits : un octet par case Capacité 2 15 o = 2 10.2 5 o = 32ko 32k x 8bits = 256k bits (d'où CY62256)

54 54 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Notion de bus Un bus est un ensemble des lignes binaires. Bus d'adresses : ensemble des lignes d'adresses (unidirectionnel) Bus de données : ensemble des lignes de données (généralement bidirectionnel) Bus de contrôle : lignes /WE, horloges, etc... Plusieurs circuits peuvent être câblés en parallèle sur un bus. La logique trois états (0,1, Haute impédance) est utilisée pour éviter les conflits.

55 55 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Décodage d'adresses RAM1RAM2Flash Décodeur d'adresses Bus d'adresses Bus de données /CE Le décodeur d'adresse est un circuit combinatoire qui positionne les signaux /CE en fonction de la valeur présente sur le bus d'adresses

56 56 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Décodage d'adresses Exemple de partage : Avec un bus d'adresses sur 16 bits on dispose de 2 16 adresses = 64K adresses 0x0000 à 0xFFFF C'est l'espace adressable. Que l'on peut partager par exemple en : 0x0000 à 0x1FFF RAM1 0x2000 à 0x3FFF inutilisé 0x4000 à 0x7FFF RAM2 0x8000 à 0xFFFF Flash Dans ce cas l'équation pour /CEFlash est simplement /A15 Exercice : Ecrire les équations de /CSRAM1 et /CSRAM2

57 57 © Copyright 2005, Philippe Arlotto http://arlotto.univ-tln.fr Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Décodage d'adresses Capacité de l'espace d'adresses alloué à une zone : Nombre de cases = Adresse Haute – Adresse Basse + 1 Exemple : Taille Flash = 0xFFFF – 0x8000 +1 = 0x7FFF + 1 = 0x8000 cases 0x8000 = 8. 16 3 + 0. 16 2 + 0. 16 1 + 0. 16 0 8. 16 3 = 8. (2 4 ) 3 = 2 3. 2 12 = 2 15 = 2 5. 2 10 = 32ko Exercice : calculer les tailles des zones RAM1, libre et RAM2.


Télécharger ppt "1 © Copyright 2005, Philippe Arlotto Creative Commons Attribution-ShareAlike 2.0 license 24/09/2016 Cours microprocesseurs IUT."

Présentations similaires


Annonces Google