Chargement…
Chargement…
Partez d'une spécification technique et concevez le VHDL complet, validé par simulation GHDL.
Exercices
109
Faits
0
Total
109
Esclave SPI (CPOL=0, CPHA=0)
Implémentez un esclave SPI générique en mode 0 (CPOL=0, CPHA=0) qui reçoit une trame de 32 bits.
Maître SPI 8 bits
Implémentez un maître SPI (mode 0 : CPOL=0, CPHA=0) capable d'émettre et de recevoir un octet sur un bus SPI.
Maître SPI mode 0
Implémentez un maître SPI en mode 0 (CPOL=0, CPHA=0) capable de transférer 8 bits en série.
Compteur BCD
Implémentez un compteur BCD synchrone qui compte de 0 à 9 puis reboucle à 0, avec reset asynchrone actif bas et entrée d'activation.
Diviseur d'horloge
Implémentez un diviseur d'horloge générique qui divise la fréquence d'entrée par 2×G_HAL-, avec reset asynchrone.
Bascule D avec enable
Implémentez une bascule D avec enable et reset asynchrone actif haut. La bascule mémorise i_d sur le front montant uniquement si i_en est actif.
Registre à décalage 4 bits
Implémentez un registre à décalage série 4 bits (SISO) avec reset asynchrone. Les bits se décalent vers la droite à chaque front montant.
Détecteur de séquence «101»
Implémentez une machine à états Mealy qui détecte la séquence binaire «101» sur une entrée série, avec gestion du chevauchement.
ALU simple 4 opérations
Implémentez une ALU combinatoire réalisant 4 opérations sur deux opérandes 8 bits : addition, soustraction, ET logique et OU logique, avec drapeau de retenue.
Latch transparent (piège FPGA)
Implémentez un latch transparent pour comprendre ce piège classique du FPGA. Quand enable est haut, la sortie suit l'entrée ; quand enable est bas, la sortie conserve sa valeur.
Registre à décalage chargeable
Implémentez un registre à décalage chargeable 8 bits combinant chargement parallèle et décalage à gauche, avec priorité au chargement.
Étireur d'impulsion
Implémentez un étireur d'impulsion qui prolonge un signal d'un cycle en une sortie active pendant G_CYCLES cycles d'horloge.
Timer Watchdog
Implémentez un timer watchdog de sécurité : un compteur décrémente en continu et déclenche un timeout si aucun signal i_kick n'est reçu à temps.
Contrôleur de séquence LED
Implémentez un contrôleur FSM à 3 états (OFF, BLINK, ON) qui pilote une LED avec clignotement. Chaque appui sur le bouton avance la séquence.
Générateur PWM
Implémentez un générateur PWM avec un compteur séquentiel et une sortie combinatoire contrôlée par le rapport cyclique.
LFSR 8 bits
Implémentez un registre à décalage à rétroaction linéaire (LFSR) 8 bits avec chargement de graine et sortie combinatoire de feedback.
Filtre moyenneur glissant (4 echantillons)
Implémentez un filtre moyenneur glissant sur 4 echantillons avec un registre a décalage séquentiel et un calcul combinatoire de la moyenne.
Registre parallele générique avec enable
Implémentez un registre parallele N bits avec enable et détection combinatoire de mise a jour.
Synchroniseur CDC 2-FF avec détection de fronts
Implémentez un synchroniseur CDC a deux bascules avec détection combinatoire de fronts montants et descendants.
CRC-16/CCITT (polynome 0x1021)
Implémentez un calculateur CRC-16 synchrone, bit par bit, avec le polynome CCITT et une sortie combinatoire du registre CRC.
Maitre I2C - Démarrage & adressage
Implémentez les deux premieres phases d'un maitre I2C : condition START et envoi de l'adresse 7 bits + bit R/W via une FSM a 5 états.
Décodeur 7 segments
Implémentez un décodeur 7 segments qui convertit un chiffre BCD (0-9) en 7 signaux pour allumer les bons segments d'un afficheur, avec enable.
Top Level - Instanciation
Implémentez un top level qui instancie un compteur BCD et un décodeur 7 segments, en câblant correctement les signaux internes et les ports externes.
Additionneur 1 bit complet
Concevez un additionneur 1 bit complet (full adder) avec retenue entrante et sortante. Ce bloc est la brique de base de toute unite arithmetique.
Multiplexeur 4 vers 1
Concevez un multiplexeur 4 vers 1 purement combinatoire. Le selecteur de 2 bits choisit laquelle des 4 entrées est transmise en sortie.
Décodeur binaire 2 vers 4
Concevez un décodeur binaire 2 vers 4 avec signal d'activation (enable). La sortie est un code one-hot correspondant a la valeur du selecteur lorsque le décodeur est actif.
Vérificateur de parité 8 bits
Concevez un vérificateur de parité sur 8 bits. La sortie indique si le nombre de bits a 1 dans l'entrée est impair (parité = 1) ou pair (parité = 0).
Comparateur 4 bits
Concevez un comparateur combinatoire 4 bits qui compare deux nombres non signes et indique si le premier est superieur, egal ou inferieur au second.
Multiplieur binaire 4 bits
Concevez un multiplieur combinatoire 4 bits qui calcule le produit de deux nombres non signes sur 8 bits de sortie.
Convertisseur BCD vers binaire
Concevez un convertisseur combinatoire qui transforme un nombre BCD (Binary-Coded Decimal) sur 8 bits en sa valeur binaire sur 7 bits.
Porte AND
Concevez une porte logique AND a deux entrées. C'est la brique de base de toute logique combinatoire.
Porte OR
Concevez une porte logique OR a deux entrées. La sortie est active des qu'au moins une entrée est a '1'.
Porte NOT (Inverseur)
Concevez un inverseur logique. La sortie est le complément de l'entrée.
Porte NAND
Concevez une porte logique NAND a deux entrées. C'est la porte universelle : toute fonction logique peut etre construite avec des portes NAND.
Porte NOR
Concevez une porte logique NOR a deux entrées. Comme la NAND, c'est une porte universelle.
Porte XOR
Concevez une porte logique XOR (OU exclusif) a deux entrées. Utilisee dans les additionneurs, la détection de parité et le chiffrement.
Porte XNOR
Concevez une porte logique XNOR (equivalence) a deux entrées. La sortie est active lorsque les deux entrées sont identiques.
Multiplexeur 2 vers 1
Concevez un multiplexeur 2 vers 1 purement combinatoire. Le selecteur choisit laquelle des 2 entrées est transmise en sortie.
Multiplexeur 8 vers 1
Concevez un multiplexeur 8 vers 1 purement combinatoire. Le selecteur de 3 bits choisit laquelle des 8 entrées est transmise en sortie.
Demultiplexeur 1 vers 2
Concevez un demultiplexeur 1 vers 2. L'entrée est acheminee vers l'une des deux sorties selon le selecteur.
Demultiplexeur 1 vers 4
Concevez un demultiplexeur 1 vers 4. L'entrée est acheminee vers l'une des quatre sorties selon le selecteur de 2 bits.
Décodeur binaire 3 vers 8
Concevez un décodeur binaire 3 vers 8 avec signal d'activation. La sortie est un code one-hot correspondant a la valeur du selecteur.
Convertisseur binaire vers Gray
Concevez un convertisseur 4 bits de code binaire vers code Gray. Le code Gray est utilise dans les communications car un seul bit change entre deux valeurs consecutives.
Convertisseur Gray vers binaire
Concevez un convertisseur 4 bits de code Gray vers code binaire. Opération inverse du convertisseur binaire vers Gray.
Demi-additionneur
Concevez un demi-additionneur (half adder) qui additionne deux bits sans retenue entrante.
Soustracteur 4 bits
Concevez un soustracteur combinatoire 4 bits qui calcule la difference de deux nombres non signes avec indication d'emprunt.
Bascule JK
Implémentez une bascule JK avec reset asynchrone actif haut. La bascule JK est la plus polyvalente : elle peut maintenir, mettre a '1', mettre a '0' ou basculer sa sortie.
Bascule T
Implémentez une bascule T (Toggle) avec reset asynchrone actif haut. Quand T='1', la sortie bascule a chaque front montant.
Bascule SR synchrone
Implémentez une bascule SR synchrone avec reset asynchrone actif haut. S met la sortie a '1', R la remet a '0'.
Registre 4 bits
Implémentez un registre 4 bits avec enable et reset asynchrone actif haut.
Registre a décalage gauche 4 bits
Implémentez un registre a décalage a gauche 4 bits avec entrée série et reset asynchrone.
Registre SIPO 4 bits
Implémentez un registre a décalage série vers parallele (SIPO) 4 bits avec reset asynchrone. Les bits entrent en série et sont disponibles en parallele.
Compteur 4 bits croissant
Implémentez un compteur synchrone 4 bits croissant avec enable et reset asynchrone.
Compteur 4 bits decroissant
Implémentez un compteur synchrone 4 bits decroissant avec enable et reset asynchrone. Le reset initialise a la valeur maximale (15).
Compteur en anneau 4 bits
Implémentez un compteur en anneau (ring counter) 4 bits avec reset asynchrone. Un seul bit a '1' circule dans le registre.
Encodeur BCD vers Excess-3
Concevez un encodeur combinatoire qui transforme un chiffre BCD valide en code Excess-3.
Encodeur Hamming (7,4)
Encodez 4 bits de données avec trois bits de parité paire pour former un mot Hamming (7,4).
Contrôleur FIFO synchrone
Implémentez un contrôleur FIFO synchrone gérant les pointeurs de lecture/écriture, les flags full/empty et le niveau de remplissage.
Maître AXI4 - canaux de lecture
Implémentez un maître AXI4 simple gérant les deux canaux de lecture : Read Address (AR) et Read Data (R).
Esclave AXI-Lite - carte de registres
Implémentez un esclave AXI-Lite avec trois registres 32 bits accessibles en lecture/écriture, gérés par deux machines à états indépendantes.
FSM - Feu piéton
Implémentez une machine a états a 3 process pour un feu piéton avec timer integre et gestion des durees par état.
Contrôleur LEDs - Machine a états Moore
Implémentez une machine a états Moore a 3 process qui fait defiler 4 LEDs en séquence sur commande.
Additionneur N bits - Ripple Carry
Implémentez un additionneur N bits a propagation de retenue (ripple carry) en utilisant uniquement des operateurs logiques, sans bibliotheque arithmetique.
Compteur bidirectionnel avec chargement parallele
Implémentez un compteur bidirectionnel générique avec chargement parallele, enable et reset asynchrone.
Anti-rebond configurable
Implémentez un circuit anti-rebond (debouncer) avec un temps de stabilisation configurable via des génériques.
Encodeur de priorité 8 vers 3
Implémentez un encodeur de priorité combinatoire 8 vers 3 qui encode la position du bit actif de plus haute priorité.
Compteur Johnson 4 bits
Implémentez un compteur Johnson 4 bits avec reset synchrone. Le compteur parcourt une séquence de 8 états avant de revenir a son état initial.
Barrel Shifter 8 bits
Implémentez un barrel shifter 8 bits effectuant un décalage logique a gauche en 3 etages combinatoires (shift-by-4, shift-by-2, shift-by-1).
Registre W1C (Write-1-to-Clear)
Implémentez un registre W1C : les bits se positionnent via i_set_en et s'effacent en écrivant 1 via i_clr_en.
Générateur de tick 1µs
Générez une impulsion périodique de 1µs à partir d'une horloge système de période connue.
Compteur N bits avec sortie de débordement
Implémentez un compteur générique N bits synchrone avec enable, reset asynchrone et indication de débordement.
Comparateur 8 bits
Implémentez un comparateur combinatoire 8 bits qui compare deux nombres non signes et indique la relation entre eux.
Additionneur-soustracteur 4 bits
Implémentez un bloc combinatoire 4 bits selectionnable en addition ou soustraction via un signal de contrôle.
Comparateur cascadable N bits
Implémentez un comparateur générique cascadable avec entrées de cascade pour connecter plusieurs etages.
Registre 8 bits avec chargement
Implémentez un registre 8 bits avec chargement parallele et reset asynchrone.
Registre a décalage bidirectionnel 4 bits
Implémentez un registre a décalage 4 bits pouvant décaler a gauche, a droite, charger en parallele ou conserver sa valeur.
ROM 8x4
Implémentez une mémoire morte (ROM) de 8 mots de 4 bits, purement combinatoire.
ROM 16x4 avec tableau constant
Implémentez une ROM 16 mots de 4 bits en utilisant un tableau constant VHDL.
RAM synchrone 8x4
Implémentez une mémoire RAM de 8 mots de 4 bits avec écriture synchrone et lecture asynchrone.
RAM synchrone 16x4
Implémentez une mémoire RAM de 16 mots de 4 bits avec écriture synchrone et lecture asynchrone.
Pile LIFO 8 niveaux, 8 bits
Implémentez une pile LIFO (Last In, First Out) de 8 niveaux sur 8 bits avec push, pop, et indicateurs empty/full.
RAM double port 8x8
Implémentez une RAM double port de 8 mots de 8 bits : un port d'écriture et un port de lecture indépendants.
Banc de registres 4x8
Implémentez un banc de 4 registres de 8 bits avec 1 port d'écriture et 2 ports de lecture.
Additionneur CLA 4 bits
Implémentez un additionneur 4 bits a anticipation de retenue (Carry Lookahead Adder).
Additionneur CLA 8 bits (2 blocs cascades)
Implémentez un additionneur CLA 8 bits en cascadant deux blocs CLA 4 bits.
Barrel Shifter 4 bits
Implémentez un barrel shifter 4 bits a 2 étages pouvant décaler logiquement a gauche de 0 a 3 positions.
Additionneur flottant simplifié 8 bits
Implémentez un additionneur pour un format flottant simplifié : 1 bit signe, 3 bits exposant (biais 3), 4 bits mantisse (implicite 1.xxxx).
Multiplieur flottant simplifié 8 bits
Implémentez un multiplieur pour le meme format flottant simplifié : 1 bit signe, 3 bits exposant (biais 3), 4 bits mantisse (1 implicite).
Générateur de parité 7 bits
Implémentez un générateur de parité paire : genere un bit de parité pour 7 bits de données, et vérifié un mot de 8 bits (7 data + 1 parité).
Compteur de population 8 bits (popcount)
Implémentez un compteur de population : compte le nombre de bits a '1' dans un vecteur de 8 bits.
Multiplexeur a priorité 4 canaux
Implémentez un multiplexeur à priorité : 4 canaux de données 4 bits avec bits de requête. Le canal de plus haute priorité active est sélectionné.
Synchroniseur Handshake CDC
Implémentez un synchroniseur a poignée de main (4 phases) pour transférer un bus de données entre deux domaines d'horloge indépendants.
Filtre FIR passe-bas 5 taps
Implémentez un filtre FIR passe-bas 5 taps en forme directe avec ligne à retard et coefficients fixes.
Multiplicateur 5x5 pipeliné 4 étages
Transformez un multiplicateur combinatoire 5x5 en architecture pipelinée à 4 étages.
Correcteur Hamming (7,4)
Décodez un mot Hamming (7,4), calculez le syndrome et corrigez une erreur simple.
Registre PISO 4 bits
Implémentez un registre Parallel-In Serial-Out avec chargement parallèle et décalage contrôlé.
Compteur synchrone modulo 6
Concevez un compteur synchrone qui parcourt les états 0 à 5 avec enable et impulsion de fin de cycle.
SPI Master Complet (Mode configurable)
Implémentez un contrôleur SPI maître générique supportant les 4 modes SPI, avec diviseur d'horloge, multi-esclaves et tailles de trames configurables.
Émetteur UART 8N1
Implémentez un émetteur UART 8N1 complet avec générateur de baud rate et FSM a 4 états pilotant le transfert série.
FIFO Synchrone Configurable
Implémentez une FIFO synchrone avec largeur et profondeur configurables, pointeurs circulaires et drapeaux full/empty.
RAM Simple Port 256x8
Implémentez une RAM synchrone simple port de 256 mots de 8 bits avec lecture synchrone et écriture synchrone.
RAM Double Port 128x16
Implémentez une RAM synchrone double port de 128 mots de 16 bits. Le port A écrit, le port B lit.
Générateur d'interruptions
Implémentez un générateur d'interruptions : chaque vecteur d'IT est maintenu actif pendant g_MIN_WIDTH_PULSE cycles puis reporté dans le statut.
Maître AXI4-Lite
Implémentez un maître AXI4-Lite générique capable d'effectuer des accès en lecture et écriture sur un bus AXI4-Lite.
Esclave AXI4-Lite
Implémentez un esclave AXI4-Lite générique avec interface registre simplifiée.
Maître AXI4 - canaux d'écriture
Implémentez un maître AXI4 simple gérant les trois canaux d'écriture : Write Address (AW), Write Data (W) et Write Response (B).
Processeur mu0 (16 bits)
Implementez un mini-processeur 16 bits de type accumulateur : UAL, registres PC/IR/ACC/R, sequenceur FSM et assemblage top-level. 14 instructions couvertes.
Cœur SHA-256 (1 bloc)
Implémentez un cœur SHA-256 matériel sur un bloc de 512 bits : fonctions logiques, registre à décalage message, compression et FSM top-level.
Contrôleur SAR ADC 4 bits
Implémentez une FSMD de conversion par approximations successives pour piloter un DAC interne et lire un comparateur.