Table des matières:
- Étape 1: Matériaux
- Étape 2: Schéma fonctionnel des modules de circuit
- Étape 3: Coder
- Étape 4: Démo et exemple de code
Vidéo: Ordinateur 10 bits - VHDL : 4 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:08
Réalisé par: Tyler Starr et Ezzeedden Gazali
introduction
Ce projet a été réalisé dans le cadre du projet final du CPE 133 à Cal Poly SLO. C'est un excellent projet pour quelqu'un qui cherche à comprendre comment les ordinateurs fonctionnent à leur plus bas niveau et comment ils accomplissent leurs tâches. Le projet est calqué sur l'ordinateur SAP 8 bits décrit dans le livre d'Albert Malvino Digital Computer Electronics. Cependant, nous avons augmenté l'ordinateur à 10 bits pour permettre la mise en œuvre de plus de codes d'opération (codes d'opération). L'utilisateur peut programmer l'ordinateur pour effectuer un ensemble d'opérations en entrant certaines instructions.
Architecture du système et du circuit:
L'ordinateur est écrit en VHDL et sera contenu sur la carte Basys 3 de Digilent. Les entrées seront mappées sur les commutateurs au bas de la carte. Deux commutateurs tactiles seront utilisés pour les fonctions Reset et Write. La sortie sera affichée sur l'affichage à 7 segments de la carte.
L'ordinateur sera décomposé en circuits plus petits (modules) qui gèrent différentes opérations. Chaque module sera expliqué en détail dans les étapes suivantes.
Étape 1: Matériaux
Tout ce qui est nécessaire pour ce projet est la carte FPGA Basys3 de Digilent et un câble micro USB pour connecter la carte à votre ordinateur.
Étape 2: Schéma fonctionnel des modules de circuit
Les schémas fonctionnels ci-dessus montrent les différents modules de circuits qui composent l'ordinateur 10 bits. Vous trouverez ci-dessous des descriptions pour chacune des pièces/modules individuels illustrés dans les schémas ci-dessus.
Compteur de programme
Description des entrées: l'entrée est une entrée 5 bits pour charger un nombre dans le compteur de programme. Cp à l'état haut, le compteur compte sur les fronts d'horloge descendants. Clr remet le compteur à 0. Ep lorsqu'il est haut, le compteur affiche le compte courant. Sp lorsqu'il est élevé, le compteur définit le compte sur le nombre en entrée
-
Description des sorties:
la sortie est une copie du compte à utiliser sur les LEDS 0-15. Count affiche le nombre actuel.
- Place globale dans le système: Ce compteur garde une trace de l'emplacement mémoire dans lequel se trouve le programme. Tous les programmes commencent à l'adresse mémoire 00000 (0) et vont jusqu'à 11111 (31), à moins qu'un arrêt ne soit utilisé. Dans les instructions de saut, le compteur de programme continue de compter à partir de l'adresse à laquelle le programme saute.
MUX d'entrée
- Description des entrées: L'adresse prend l'entrée des commutateurs 11 à 15. MAR prend l'entrée du registre 10 bits utilisé comme MAR. Le programme contrôle quelle entrée acheminer vers la sortie.
- Description des sorties: la sortie achemine l'entrée sélectionnée vers la RAM.
- Place globale dans le système: ce MUX détermine s'il faut acheminer l'adresse des commutateurs ou du bus vers la RAM. En mode programme, l'adresse des commutateurs est routée et en mode exécution, l'adresse du bus est routée.
ramMUX
- Description des entrées: userInput est l'entrée que l'utilisateur entre pendant le mode programme. aRegInput est la donnée contenue dans le registre A, elle est utilisée lors d'une opération de déplacement. control est la sélection pour ce MUX.
- Description des sorties: la sortie est l'entrée de données 10 bits dans la RAM.
- Place globale dans le système: ce MUX sort les données d'entrée 10 bits qui sont utilisées dans le module RAM. Lorsque le bit de contrôle est haut, le MUX sort les données que l'utilisateur a saisies en mode programme. Lorsque le bit de contrôle est bas, le MUX sort les données sur le bus de contrôle.
ramModule
- Description des entrées: inputData correspond aux données stockées dans la RAM. inputAddress est l'emplacement où les données sont stockées. programme indique si l'ordinateur est en mode programme ou exécution. readWrite indique si une opération de lecture ou d'écriture est en cours. notCE est le bit de contrôle du module RAM. move indique qu'une opération de déplacement est en cours.
- Description des sorties: outputDataToBus est la donnée qui va de la RAM au bus. outputData et output Address sont les données et l'adresse qui vont au registre d'instruction.
- Place globale dans le système: La RAM permet le stockage du programme et des données en mémoire avant l'exécution d'un programme. Une fois le programme en cours d'exécution, la RAM reçoit une adresse du MAR et envoie les données à cette adresse au bus.
adresseROM
- Description des entrées: opCode est l'entrée contenant l'adresse de l'opcode qui est exécuté par l'ordinateur
- Description des sorties: opCodeStart est l'adresse mémoire qui indique le premier emplacement de micro-instruction de l'opCode correspondant.
- Place globale dans le système: ce module prend la micro-instruction verrouillée et sort l'emplacement de mémoire qui correspond au début de cette séquence de micro-instructions.
ringCounter
- Description des entrées: reset remet le compteur à 100000 (le premier "état T"). Clk incrémente le compteur de un sur un front d'horloge descendant. NOP indique que l'état/le cycle actuel est un cycle "sans opération".
- Description des sorties: count est la sortie du compteur.
- Place globale dans le système: le compteur en anneau contrôle le compteur préréglable et délimite les six micro-étapes de chaque cycle d'instruction (T1-T6).
précompteur
- Description des entrées: opCodeStart est l'emplacement mémoire des micro-instructions pour l'opCode en cours d'exécution. T1 remet le compteur à 0 lorsqu'il est haut. Lorsque T3 est haut, opCodeStart est chargé et le compte continue à partir de cet emplacement pour les 3 cycles restants (T4-T6). Clr met le compteur à 0. Clk incrémente le compteur de un sur un front descendant.
- Description des sorties: controlWordLocation sort l'emplacement mémoire du mot de contrôle à exécuter.
- Place globale dans le système: chaque op-code a 3 micro-instructions. Le compteur incrémente de 1 à partir de 0 pour les 3 premiers cycles (cycle d'extraction). Le compteur est alors déclenché par le compteur de sonnerie pour charger l'adresse sur opCodeStart et incrémente de 1 pour les 3 cycles restants. De cette façon, le préCompteur contrôle la séquence de micro-instructions à exécuter.
ROM de contrôle
- Description des entrées: controlWordLocation est l'adresse du controlWord que la controlROM va sortir. NOP indique que l'emplacement est un emplacement « sans opération ».
- Description des sorties: controlWord est le mot de contrôle qui active/désactive les différents modules informatiques pour effectuer une opération souhaitée.
- Place globale dans le système: ce module décode l'emplacement de la mémoire à partir du précompteur et génère le mot de contrôle pour l'opération souhaitée.
ALU
- Description des entrées: A et B sont les entrées des registres A et B sur lesquelles l'ALU effectue les opérations arithmétiques et logiques. Lorsque la soustraction est active, cela indique que B est soustrait de A.
- Description des sorties: le résultat est le résultat de l'addition de A et B, ou de la soustraction de B de A. Les sorties supérieur à, inférieur et égal à indiquent si (AB, ou A=B) et sont utilisées dans le module de saut conditionnel. erreur indique un débordement ou un débordement lorsqu'il est actif.
- Place globale dans le système: L'ALU contient la logique des opérations arithmétiques et logiques effectuées par l'ordinateur. Ce module peut additionner et soustraire deux nombres binaires de 10 bits. L'ALU peut également déterminer si A>B, A
conditionnelJmp
- Description des entrées: inputCount est utilisé pour verrouiller le compte actuel. inputAddress est utilisé pour verrouiller l'adresse à laquelle sauterait. loadFromRegister lorsque faible verrouille inputAddress. loadCount lorsque faible verrouille inputCount. lorsque outputEnable est bas, la sortie est définie sur l'adresse pour accéder à.gT, iT et eQ déterminent quelle condition est vérifiée. GreaterThan, lessThan et equalTo sont les entrées de l'ALU indiquant le résultat de la comparaison entre A et B. Sur le front d'horloge montant de Clk, inputCount et inputAddress sont lus dans des registres.
- Description des sorties: outputJmp est l'adresse que le compteur de programme va lire.
- Place globale dans le système: ce module gère les sauts conditionnels et non conditionnels pour l'ordinateur. Sur la base des entrées gT, iT et eQ, le module détermine quelle condition vérifier et si cette condition est vraie ou fausse. Si la condition est vraie, il affichera l'adresse de l'instruction à laquelle sauter, sinon, il affichera le compte de l'instruction suivante.
binVersBCD
- Description des entrées: numéroter le nombre de 10 bits à convertir en décimal codé binaire.
- Description des sorties: centaines le chiffre à la place des centaines du nombre binaire. des dizaines le chiffre à la place des dizaines du nombre binaire. les uns le chiffre à la place des uns du nombre binaire.
- Place globale dans le système: ce module convertit le nombre de 10 bits du registre de sortie en BCD afin que notre pilote d'affichage à quatre chiffres affiche le nombre en décimal sur l'affichage à 7 segments.
quatreDigitDriver
- Description des entrées: le nombre est l'entrée binaire de 16 bits qui est dirigée vers le décodeur. inClk est l'horloge interne des cartes Basys et est utilisé pour un diviseur d'horloge. RST réinitialise l'horloge utilisée pour piloter les chiffres.
- Description des sorties: l'anode détermine quel chiffre sera illuminé. digit est le numéro d'entrée dans le décodeur.
- Place globale dans le système: ce module pilote le décodeur pour afficher le numéro BCD à l'écran.
décodeur
- Description des entrées: inputNumber est le chiffre qui vient du pilote et qui sera décodé.
- Description des sorties: cathodes détermine quelles cathodes seront allumées pour afficher le chiffre souhaité.
- Place globale dans le système: Ce module décode le chiffre qui doit être affiché sur l'affichage à 7 segments.
quatreChiffresAffichage
- Description des entrées: nombre est le nombre à afficher sur l'afficheur 7 segments. erreur indique quand l'affichage doit lire "Err". Clk est le signal d'horloge sur lequel l'affichage fonctionne. Ce signal doit être d'environ 60 Hz pour que l'écran puisse afficher les 4 chiffres simultanément.
- Description des sorties: l'anode détermine quel emplacement de chiffre est activé. cathode détermine quelles cathodes sont activées pour afficher le chiffre souhaité.
- Place globale dans le système: ce module affiche un nombre sur l'affichage à 7 segments. Reportez-vous au manuel d'instructions de la carte Basys 3 pour plus d'informations sur les cathodes et les anodes activées pour utiliser l'écran. Lorsque le bit d'erreur est haut, l'écran affiche "Err".
sortieMUX
- Description des entrées: progModeInput détermine quelles LED sont allumées pendant le mode de programmation. runModeInput détermine quelles LED sont allumées pendant le mode d'exécution. modeSelect est le bit de sélection ou de contrôle du MUX.
- Description des sorties: ledOutput indique quelles LED seront allumées.
- Place globale dans le système: Selon le mode dans lequel se trouve l'ordinateur (programme ou rhum), le MUX allumera différentes LED. En mode programme (modeSelect est '0'), le MUX allume des LED pour ressembler à l'emplacement de mémoire dans lequel se trouve l'ordinateur et ce qu'il contient. En mode exécution (modeSelect est '1'), le MUX est utilisé pour le débogage mais peut être configuré pour afficher autre chose.
horlogeDiviseur
- Description des entrées: stop lit les cinq bits MSB du bus pour détecter une commande d'arrêt ('11111') et arrête l'horloge. inputClk est le signal d'horloge interne de la carte Basys 3.
- Description des sorties: ouputClk est la nouvelle horloge qui a été ralentie.
- Place globale dans le système: cette horloge est utilisée pour ralentir l'ordinateur afin de permettre à l'utilisateur de déterminer ce qui se passe. L'horloge peut fonctionner beaucoup plus rapidement, cependant, elle est actuellement réglée sur 2 Hz.
TriStateBuffer
- Description des entrées: Din est l'entrée 5 bits entrant dans le tampon. Ep est le bit de contrôle.
- Description des sorties: Dout est la sortie 5 bits du tampon
- Place globale dans le système: lorsque le bit de contrôle Ep est actif, le tampon sort l'entrée. Lorsque le bit de contrôle n'est pas actif, le tampon ne sort rien.
dixBitDRegister
- Description des entrées: Dbus est l'entrée à laquelle le registre est destiné. Clk permet au registre de lire les données sur un front d'horloge montant. ARST met le registre à 0 de manière asynchrone. Lorsque outputEnable est bas, le contenu du registre est la sortie. Lorsque readIn est bas, le registre verrouille Dbus sur le front d'horloge montant.
- Description des sorties: Qbus est la sortie du registre
- Place globale dans le système: le registre est utilisé plusieurs fois dans l'ordinateur et est utilisé pour stocker des informations lors de l'exécution d'opérations.
cinqBitDRegister
- Description des entrées: Dbus est l'entrée à laquelle le registre est destiné. Clk permet au registre de lire les données sur un front d'horloge montant. ARST met le registre à 0 de manière asynchrone. Lorsque outputEnable est bas, le contenu du registre est la sortie. Lorsque readIn est bas, le registre verrouille Dbus sur le front d'horloge montant.
- Description des sorties: Qbus est la sortie du registre.
- Place globale dans le système: le registre est utilisé plusieurs fois dans l'ordinateur et est utilisé pour stocker des informations lors de l'exécution d'opérations.
Étape 3: Coder
Ci-dessous se trouve un dossier contenant les fichiers de contraintes et sources pour l'ordinateur 10 bits.
Étape 4: Démo et exemple de code
La vidéo ci-dessus montre comment programmer l'ordinateur 10 bits sur la carte FPGA Basys 3. Un pdf contenant les op-codes et un exemple de programme est également joint ci-dessous.
Conseillé:
Tutoriel sur l'accéléromètre numérique Arduino Nano - MMA8452Q 3 axes 12 bits/8 bits : 4 étapes
Tutoriel sur l'accéléromètre numérique à 3 axes 12 bits/8 bits Arduino Nano - MMA8452Q : Le MMA8452Q est un accéléromètre intelligent, à faible consommation, à trois axes, capacitif et micro-usiné avec une résolution de 12 bits. Des options flexibles programmables par l'utilisateur sont fournies à l'aide de fonctions intégrées dans l'accéléromètre, configurables à deux interruptions
Tutoriel Python de l'accéléromètre numérique à 3 axes 12 bits/8 bits Raspberry Pi MMA8452Q : 4 étapes
Tutoriel Python pour l'accéléromètre numérique à 3 axes 12 bits/8 bits Raspberry Pi MMA8452Q : Le MMA8452Q est un accéléromètre intelligent, à faible consommation, à trois axes, capacitif et micro-usiné avec une résolution de 12 bits. Des options flexibles programmables par l'utilisateur sont fournies à l'aide de fonctions intégrées dans l'accéléromètre, configurables à deux interruptions
Tutoriel Java de l'accéléromètre numérique à 3 axes 12 bits/8 bits Raspberry Pi MMA8452Q : 4 étapes
Tutoriel Java de l'accéléromètre numérique à 3 axes 12 bits/8 bits Raspberry Pi MMA8452Q : Le MMA8452Q est un accéléromètre intelligent, à faible consommation, à trois axes, capacitif et micro-usiné avec une résolution de 12 bits. Des options flexibles programmables par l'utilisateur sont fournies à l'aide de fonctions intégrées dans l'accéléromètre, configurables à deux interruptions
Comment mettre à niveau un processeur d'ordinateur portable (et d'autres trucs sympas !) pour transformer un ordinateur portable SLOW/DEAD en un ordinateur portable RAPIDE ! : 4 étapes
Comment mettre à niveau un processeur PORTABLE (et d'autres trucs sympas !) pour transformer un ordinateur portable SLOW/DEAD en un ordinateur portable RAPIDE ! très obsolète. . . L'écran LCD a été brisé et le disque dur principal s'est grippé, de sorte que l'ordinateur portable était essentiellement mort
Support d'ordinateur portable bon marché / Convertisseur d'ordinateur portable en ordinateur de bureau : 3 étapes
Support d'ordinateur portable bon marché / Convertisseur d'ordinateur portable en ordinateur de bureau : je me retrouve à utiliser mon ordinateur portable pendant de longues périodes. Cela devient inconfortable au bout d'un moment. Le clavier et l'écran doivent idéalement être séparés pour réduire la fatigue du cou lors d'une utilisation prolongée. Si vous êtes un utilisateur d'ordinateur portable à temps plein, je vous suggère de construire s