COMPTE-RENDU : Conception circuits numériques.
Commentaire de texte : COMPTE-RENDU : Conception circuits numériques.. Recherche parmi 300 000+ dissertationsPar joliaus • 10 Mai 2023 • Commentaire de texte • 1 389 Mots (6 Pages) • 246 Vues
COMPTE-RENDU : Conception circuits numériques.
SOMMAIRE :
- Objectifs
- Conception de l’ordinateur
- Ajout d’une interface série : Communication UART
- Gestion d’interruptions
- Module Sonar
- Module Joystick
- Objectifs :
L’objectif de ce travail était d’apprendre les bases en langage de description matériel c’est-à-dire le VDHL. De plus, pour apprendre cela, nous avons conçu un ordinateur qui avec plusieurs de ses périphériques en utilisant le processeur RISC « Virgule ». Puis ajouter des modules à cet ordinateur pour qu’il communique en SPI, I²C et UART.
- Conception de l’ordinateur :
La structure de l’ordinateur que l’on avait à concevoir est la suivante :
[pic 1]Il contient trois entités, le processeur RISC Virgule, la mémoire interne et un Input Synchronizer.
Premièrement, ce système avait pour but d’allumer les LEDS qui correspondent à l’interrupteur correspondant sur une carte Basys3.
Pour se faire nous avons écrit le code suivant :
[pic 2] |
Dans ce morceau de code on initialise l’entité Computer et ses différents ports d’entrée et de sortie. Donc le signal d’horloge, le bouton au centre, les switches et les LEDS.
[pic 3] |
[pic 4] |
Et dans celui-ci nous donnons l’architecture Structural de l’ordinateur en définissant les différents signaux qui le compose. Les signaux avec le préfix core sont les signaux provenant du processeur, ceux avec le préfix mem proviennent de la mémoire et IO de l’input Synchronizer.
Le code suivant permet d’instancier les trois entités nécessaires pour faire le schéma vu précédemment. Les ports sont attribués à des signaux pour réaliser comme sur le schéma.
On ajoute ensuite deux multiplexeurs pour que le schéma soit comme cela :
[pic 5]
Les deux multiplexeurs permettent de mettre le signal valid de la mémoire ou de l’IO à core_valid quand l’adresse de core est à l’adresse d’une des deux entités. Le code suivant permet de décrire cela :
[pic 6] |
Le multiplexeur suivant permet d’aiguiller les données :
[pic 7]
Et le code VHDL est le suivant :
[pic 8] |
Mais il faut aussi que les LEDS qui étaient allumées restent allumées, l’utilisation de registres est alors obligatoire et le schéma suivant était à mettre en VHDL :
[pic 9]
[pic 10] |
[pic 11]
Ensuite, il a fallu faire un système d’acquittement des données avec le schéma ci-dessus.
[pic 12] |
En somme, l’architecture de l’ordinateur ressemble à cela : [pic 13]
Ensuite, nous l’avons simulé et téléversé sur la carte Basys3.
- Ajout d’une interface série : Communication UART :
Pour ajouter une interface série et plus précisément une communication en UART (Universal Asynchronous Receiver Transmitter) nous devons ajouter deux entités, une entité UART et une autre entité VInterruptController. Pour se faire le schéma devient celui-ci :
[pic 14]
Les entités sont les suivantes :
[pic 15] [pic 16] |
A la suite de cela, nous avons simulé et téléversé sur la carte le code VHDL et un code C qui l’accompagnait pour pouvoir communiquer en UART entre la carte et l’ordinateur. Le code C est le suivant :
[pic 17] |
[pic 18] |
[pic 19] |
Il permet de vérifier si la réception et la transmission s’effectuent bien.
- Gestion d’interruption :
Pendant cette partie nous avons ajouté un périphérique qui interrompt périodiquement le système.
Pour se faire nous avons fait une entité Timer en VHDL qui est la suivante :
[pic 20] |
Et on attribue à un vecteur qui note les évènements de chaque entité :
[pic 21] |
Puis pour le programme en C précèdent a dû être changé pour en tenir compte :
[pic 22] |
Cette fonction est appelée à chaque nouvelle interruption.
Et dans un fichier Tick.c, nous ajoutons les caractéristiques du timer :
[pic 23] |
La fonction main est alors changée et devient :
[pic 24] |
Elle permet d’écrire le mot « Bye ! » toutes les secondes via la communication UART entre l’ordinateur et la carte Basys3.
- Module Sonar :
A partir de ce moment nous ajoutons le module sonar à la carte Basys3 qui communiquent en UART. Il faut alors ajouter une instance sonar_uart en VHDL pour pouvoir faire la communication entre la carte et le sonar et la carte et l’ordinateur en même temps.
...