0% ont trouvé ce document utile (0 vote)
352 vues14 pages

TP FPGA/ Codesign: République Tunisienne Ministère de L'enseignement Supérieur Et de La Recherche Scientifique

Transféré par

eyabouraoui0
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
352 vues14 pages

TP FPGA/ Codesign: République Tunisienne Ministère de L'enseignement Supérieur Et de La Recherche Scientifique

Transféré par

eyabouraoui0
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

République Tunisienne

Ministère de l'Enseignement Supérieur et de la Recherche


Scientifique
*****
Université de Sousse
*****
Ecole Supérieure des Sciences et
de la Technologie de Hammam Sousse (ESSTHS)
*****
Département d’Electronique et Informatique
Semestre 1

TP FPGA\ Codesign

Filière : Licence Electronique, Électrotechnique et Automatique : Systèmes


Embarqués (LSE3)

Niveau : 3ére année

Année universitaire : 2024/2025

1 1
Avant-propos

Ce fascicule de travaux pratiques s’adresse aux étudiants de la troisième année de


l’école Supérieur des Sciences et de la technologie de Hammam Sousse en
systèmes embarqués. L’objectif de ces travaux pratiques est de compléter l’acquis
théorique des étudiants, de les familiariser à manipuler et enfin de pouvoir
interpréter les résultats obtenus.
Organisation pratique du travail

 Conseils Généraux pour Les TP

 Les séances de TP sont d’une durée de trois heures par quinzaine.


 Le travail s’effectue par groupe de deux ou trois étudiants, librement choisis
au début de l’année.
 Le temps de travail au laboratoire doit obligatoirement être précédé d’un
temps de préparation de la manipulation.
 Une absence en TP même justifiée ne dispense pas d’avoir zéro.

 Quelques Conseils de Sécurité et de Propreté

 La mise sous tension d’un montage avant le contrôle de l’enseignant est


interdite.
 L’arrangement de tous les appareils est nécessaire avant de quitter la salle.

 Compte-rendu

Le compte rendu doit présenter clairement et de manière concise ce que l’étudiant a


fait. Ce compte rendu est remis à l’enseignant à la fin de chaque séance.
 On fera bien attention à présenter clairement et proprement ce qui est fait.
 But et court résumé du TP
 Schémas et formules utilises (bien faire attention aux unités)
 Encadrer les résultats

Je reste toujours à la disposition des étudiants.


Merci de me contacter par e-mail :
[email protected]

Bon travail ! Et bonne réussite !


Carte d'entraînement de Nexys A7-100T
Le Nexys A7-100T (anciennement Nexys DDR4) est une carte de développement FPGA
conçue pour le marché de l'éducation, dotée de l'architecture Xilinx Artix-7. Cette carte est
compatible avec lelogiciel Vivado Design Suite hautes performances ainsi que le jeu d'outils
ISE®, qui inclut ChipScope™ et EDK.

Caractéristiques du FPGA Xilinx Artix-7 (XC7A100T-1CSG324C)


• 101 440 cellules logiques en couches de 15 850 (chaque couche contient 4 LUT à 6 entrées et
8bascules)

• RAM Fast Block 4 860 kb

• 6 carreaux de gestion d'horloge, chacun avec une boucle à verrouillage de phase (PLL)

• 240 couches DSP

• Convertisseur analogique-numérique intégré (XADC)

Caractéristiques de la carte
• SDRAM DDR2 128 Mio MT47H64M16HR-25
• Mémoire Flash série quad-SPI 16 Mio S25FL128S
• Accéléromètre 3 axes bus SPI ADXL362
• Sonde de température bus I²C ADT7420
• Microphone MEMS ADMP421 avec sortie PDM
• Programmable par JTAG, Quad-SPI ou USB
• LED de programmation terminée de FPGA
• 2 afficheurs à LED 4 digits 7 segments
• 16 LED utilisateur
• 2 LED RGB utilisateur
• 5 boutons-poussoirs utilisateur
• 16 interrupteurs à glissière d'utilisateur
• Passerelle USB-UART via prise femelle micro-USB
• Embase hôte USB-A HID pour souris, claviers et clés USB
• Sortie d'affichage VGA 12 bits sur connecteur DE15
• Prise femelle RJ45 pour connexion Ethernet 10/100
• Fiche jack femelle 3,5 mm pour une sortie audio mono
• Slot pour carte MicroSD
• 4 connecteurs Pmod™ standard 2 x 6 broches
• Connecteur Pmod™ XADC analogique 2 x 6 broches
• Alimenté par USB, fiche jack femelle cylindrique ou batterie externe
Implementation d’une UART
L’objectif de ce TP est de réaliser une liaison série sur un FPGA. Egalement appelée UART
(Universal Asynchronous Receiver/Transmitter), cette liaison série est capable d’envoyer une
donnée parallèle bit par bit sur un bus. Elle est composée de deux modules principaux : le
module émission TX et le module réception RX.

I. Réalisation du module TX

Dans cet exemple, nous allons concevoir le module, UART_TX, pour transférer des données
via la communication série.

Figure 1

1. Diviseur d’horloge :

D’après fig1, on a besoin de deux fréquences différentes ,190Hz pour le module


debounce et 25MHz pour le module Uart_tx, alors on doit créer le module clkdiv.
Comme dans fig 2, les sorties q(i) d'un compteur sont des ondes carrées où la sortie
q(0) a une fréquence moitié de la fréquence d'horloge, la sortie q(1) a une fréquence
moitié de q(0) , etc.
Figure 2

Ainsi, un compteur peut être utilisé pour diviser la fréquence f d'un horloge, où la
fréquence de la sortie q(i) est fi = f/ 2i+1.
Les fréquences et périodes des sorties d'un compteur 24 bits piloté par un 100 MHz
sont indiquées dans le tableau 1.

Notez dans le tableau 1 que la sortie q(0)


a une fréquence de 50 MHz, la sortie
q(18) a une fréquence de 190,73 Hz.
On a besoin de programmer en VHDL a
un compteur 24 bits qui a 2 sorties : une
horloge de 25 MHz (clk25) et une
horloge de 190 Hz (clk190).
Vous pouvez modifier ce composant
clkdiv pour produire n'importe quelle
fréquence de sortie indiquée dans le
tableau 1.
Nous utiliserons un tel composant
diviseur d'horloge dans plusieurs de nos
conceptions de haut niveau.

Tableau 1

Baud rates standards de l’UART


2. Debounce:

Afin de stabiliser un signal et eliminer sa partie transitoire, on doit créer un module debounce.

Figure 3
3. Uart_TX :

Dans cet exemple, nous allons concevoir le module, UART_TX, pour transférer des
données via la communication série.

Figure 4
Le module TX permet de transmettre une donnée sur 8 bits sur la liaison série suivant un
protocole imposé. Une trame série est composée d’un bit de start, un bit de stop, un bit de
parité et des bits de données. Le bit de parité permet d’effectuer un contrôle sur la donnée
reçue. Dans notre cas, nous ne l’utiliserons pas.

• Le composant uart_tx possède des entrées clr et clk utilisées pour réinitialiser
etsynchroniser la communication.
• Lorsque Ready <=1 , l'octet de données est transmis sur la sortie TxD en commençant
par le bit le moins significatif.(LSB)
• Une fois la transmission terminée, la broche de transmission des données prêtes, tdre,
passe au niveau haut.
• La transmission commence par la transition de la ligne TxD de haut en bas pendant un
bit_time.Le bit_time dépend du débit en bauds(baud rate).Les données sont
transférées à un débit spécifique appelé baud rate exprimé en bits par seconde. Notre
baud_rate égale à 9 600. À 9 600 bauds (bits par seconde), Chaque bit prend donc 104
µs pour être transmit.
• Chaque bit reste sur la ligne TxD pendant un bit_time.
• Une fois le bit de poids fort transféré, TxD passe au niveau haut pendant un temps bit.
• Ce bit de fin est appelé bit de stop.

Le diagramme d'état pour la transmission des données série est illustré à la Fig5 suivante.

Figure 5
Analyse de la machine d’état du module TX
1- La machine d’états demeure dans l'état mark jusqu'à ce que le signal ready passe au
niveau haut.Cet état réinitialise un signal de comptage du nombre de bits transmis,
bit_count, à zéro et active la sortie tdre à l'état haut, indiquant que le composant ne
transmet actuellement pas de données.
2- Lorsque l'entrée ready passe au niveau haut, la machine à états passe à l'état start
pour transmettre le start_bit. Puisque le start_bit est un niveau logique bas, TxD est
mis à zéro et doit être maintenu bas pendant un temps bit. Un compteur baud_count
est utilisé pour compter les cycles d'horloge jusqu'à ce que bit_time soit atteint.
baud_count est réinitialisé à zéro à start et tdre est ramené à un niveau bas,
indiquantqu'une transmission est en cours.
3- Sur le front montant de l’horloge, l’état suivant est delay. Le baud_count est
incrémenté dans l'état delay et la machine à états reste dans cet état tant que le
baud_count est inférieur au bit_time (bit_time est un nombre constant de cycles
d'horloge requis pour que 0,104 millisecondes s'écoulent).
En utilisant une horloge de 25 MHz pour piloter uart_tx, le bit_time est calculé
comme suit.
25 x106 x 0,104 x10-3= 2600 (OxA28 en hexadécimal)
4- Une fois que le Baud_count a compté jusqu'au bit_time, l'exécution continue vers
l'état shift pour transférer un bit de données. L'octet à transférer est stocké dans un
buffer, txbuff(7:0). Dans ce cas, le premier bit de données ou bit de poids faible du
buffer, txbuff(0), est affecté à TxD à l'état shift. De plus, tdre reste à l’état bas,
txbuff est décalé d'un bit vers la droite. bit_count est incrémenté pour compter le
nombre de bits transmis et baud_count est réinitialisé à zéro. En décalant txbuff d'un
bit vers la droite, txbuff(0) contient toujours le bit suivant à transférer jusqu'à ce que
les huit bitsaient été transférés.
5- Au prochain front montant de l’horloge, la machine à états repasse en mode delay.
Encore une fois, baud_count est incrémenté sur chaque front d'horloge montant
restant en delay jusqu'à ce qu'un bit_time se soit écoulé (lorsque baud_count devient
égal à bit_time.) L'exécution de l’état delay continue, produisant le bit suivant et
décalant le buffer de transfert, txbuff. Une fois que TxD a été défini sur le bit de
données suivant dans l'état delay, la sortie reste la même tandis que la machine à états
reste dans l'état delay pendant un bit_time. Cette transition entre shift et delay
continue d'incrémenter bit_count à chaque décalage jusqu'à ce que huit bits aient été
transmis.
6- Une fois les huit bits de données transférés, la machine à états passe à l'état stop pour
transférer le stop_bit. Pour transférer le stop_bit, TxD est mis à l'état haut.
L'exécution continue dans l'état stop en incrémentant Baud_count pendant un
bit_time. Une fois que Baud_count atteint le bit_time, la machine à états passe à
nouveau à mark, tdre haut indiquant que le transfert est terminé.
4. Testing Uart_TX :

Nous pouvons tester le composant uart_tx en ajoutant un contrôleur séparé pour régler le
niveau prêt en appuyant sur un bouton après avoir attendu la fin d'une transmission en cours.
Le composant uart_tx utilise les huit commutateurs pour obtenir l'octet à transmettre.

Figure 6

1. Le diagramme d'état pour test_tx_ctrl est illustré sur la figure 6 et commence par
attendre que btn(0) soit enfoncé dans l'état wtgo où le signal prêt est affirmé bas
pouruart_tx.
2. Une fois que btn(0) est enfoncé, le diagramme d'état passe à wttdre et reste dans
wttdre jusqu'à ce que le signal tdre passe à l'état haut.
3. Une fois que uart_tx a terminé les transferts qui pourraient être en cours,
test_tx_ctrl passe à l'état de chargement où prêt est affirmé haut pour commencer à
transmettre l'ensemble de données sur les commutateurs.
4. Enfin, test_tx_ctrl attend que le bouton revienne au repos dans
wtngo. Ce processus est répété pour transmettre l'octet suivant.
5. Afficheur 7 segments

6. UART_TX TOP:

Aprés avoir implémenté le design et télechargé le fichier bitstream sur la carte Nexys₂, vous
pouvez définir n’importe quel cide ASCII à l’aide des commutateus, puis appuyer sur le
btn(0). Cela enverra le code ASCII sur le port série.
II. Réalisation du module RX
La réception du données est similaire à la transmission de données. La figure 8 montre le
module du réception.

Figure 8

• 8 bits de données asynchrone sont entrés dans RxD. Les bits sont décalés dans le
registre à décalage de 8 bits, rx_data(7:0), le bit le moins significatif en premier.
• Lorsque rx_data(7:0) est plein, the received-data ready flag, rdrf, est défini sur 1
poursignifier que rx_data(7:0) contient un octet complet.
• La sortie rdrf est définie sur 0 en définissant rdrf_clr sur high.
• L’indicateur d’erreur de trame,FE (framing error flag), est mis à 1 si le bitd’arrt n’est
pas 1. C’est une indication que les données sur rx_data(7:0) peuvent ne pas etre
exactes.
La figure 9 montre le diagramme d’état du module récepteur. Sa machine d’état a les meme
états que celle du transmission. Les transitions entre les états sont également les memes. Il
existe cepandant une différence subtile et importante.

Figure 9
Au lieu de rester à l’état start pendant un bit_time , on passe à l’état delay aprés un
half_bit_time.
La figure 10 montre la différence de synchronisation entre la transmission et la réception en
série de 8 bits de données.

Figure 10

Analyse de la machine d’état du module RX


• le diagramme d’état de la figure 10 commence à l’état mark. Cet état réinitialise un
signal pour compter le nombre de bits transmis, bit_count, à 0 et affirme que la sortie
rdrf est 0, indiquant que les données dans rx_data(7:0) ne sont pas complètes.
• Lorsque RxD devient bas, ce qui signifie un bit de start, le diagrammed’état passe à
l’état Start.
• Il reste à l’état start pendant un one-half of a bit_time, puis passe à l’état
delay.Baud_count, est incrémenté à l’état delay et le diagramme reste à cet état
tantque baud_count est inférieur au bit_time.
• Aprés un bit_time, le diagramme passe à l’état shift où un bit de données est décalé
dans le registre de décalage, rx_data(7:0). De plus, rdr reste 0, bit_count est
incrémenté pour compter le nombre de bits transmis et baud_count est réinitialisé à
zéro. L’exécution continue vers delay pendant un bit_time pour passer une autre fois
à l’état shift. Cela continue jusqu’à ce que les bits de données soient déplacés vers
rx_data(7:0)
• enfin la machine d’état passe à l’état stop dans lequel rdrf devient à l’état haut et FE
prend 1 seulement si stop_bit n’a pas pris 1.
• l’exécution se termine dans l’état marqué jusqu’à ce que RxD redevienne 0.
Testing Uart_RX :
La figure 11 présente la machine d’état de test_rx_ctrl pour tester le composant uart_rx.

Figure 11
Le diagramme d’état commence à l’état wtrdrf et attend que l’indicateur de réception de
données, rdrf, passe au niveau haut, indiquant que 8 bits ont été décalés dans le registre
rx_data(7:0)
Le diagramme passe à l’état load, où rdrf_clr prend 1 afin de réinitialiser rdrf et de signaler
àuart_rx de continuer à recevoir des données.

La figure montre une conception de haut niveau pour faire écho aux caractéres ASCII reçus
surle port série à partir d’un terminal sur PC.
Le module Uart_rx attend un start_bit et reçoit des données jusqu’à ce qu’un octet ait été
reçu, affirmant que rdrf égale à 1.
Comme décrit sur la figure 12, test_rx_ctrl passe à l’état load ou rdrf_clr prend 1 pour
effacer rdrf puis revient à l’état wrtdrf pour attendre un autre octet .En connectant rdrf_clr à
l’entrée go du test_tx_ctrl, le module uart_rx reçoit un signal pourcommencer à transmettre
l’octet de données reçu sur le port TxD. De cette manière, un octet est reçu par le récepteur et
renvoyé en transmettent immédiatement l’octet.

Figure 12

Vous aimerez peut-être aussi