Cahier des charges
DébutantLisez la spécification technique et concevez le VHDL complet. La simulation GHDL valide votre code.
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.