Recettes d'entrées-sorties Basys 3¶
Le XDC maître officiel est l'autorité pour les emplacements et standards électriques. Décommentez seulement les lignes utilisées puis renommez chaque argument get_ports selon votre entité supérieure.
Interrupteurs et LED¶
Les interrupteurs sont asynchrones par rapport à l'horloge 100 MHz. Une liaison combinatoire directe est acceptable pour un premier essai :
Si un interrupteur pilote une machine à états ou un compteur, synchronisez-le d'abord.
Boutons poussoirs¶
Deux problèmes distincts :
- Asynchronisme : la transition peut survenir près de n'importe quel front.
- Rebond : une pression produit plusieurs transitions pendant quelques millisecondes.
Chaîne recommandée :
N'utilisez jamais un bouton brut comme horloge.
Impulsion d'un cycle¶
process(clk_i)
begin
if rising_edge(clk_i) then
previous_q <= clean_button_i;
pulse_o <= clean_button_i and not previous_q;
end if;
end process;
Afficheur sept segments¶
Les quatre chiffres partagent les lignes de segments. Le contrôleur doit multiplexeur :
- Sélectionner un chiffre.
- Présenter son motif et le point décimal.
- Attendre un court intervalle.
- Passer au chiffre suivant.
La persistance rétinienne fait apparaître les quatre chiffres allumés.
Les segments et commandes de chiffres sont actifs à l'état bas. Confirmez toujours l'ordre des bits et la polarité dans le manuel.
Décodeur hexadécimal¶
with hex_i select
segments_o <=
"1000000" when x"0",
"1111001" when x"1",
"0100100" when x"2",
"0110000" when x"3",
"0011001" when x"4",
"0010010" when x"5",
"0000010" when x"6",
"1111000" when x"7",
"0000000" when x"8",
"0010000" when x"9",
"0001000" when x"A",
"0000011" when x"B",
"1000110" when x"C",
"0100001" when x"D",
"0000110" when x"E",
"0001110" when x"F",
"1111111" when others;
Cette table suppose l'ordre abcdefg et des sorties actives à zéro. Inversez volontairement si votre vecteur vaut gfedcba.
Fréquence de balayage¶
Pour rafraîchir l'affichage complet à 1 kHz :
- chaque chiffre revient toutes les 1 ms ;
- la sélection change à 4 kHz ;
- à 100 MHz, l'intervalle vaut 25 000 cycles.
Générez une validation à 4 kHz, pas une horloge logique de 4 kHz.
LED RGB¶
Chaque couleur se commande indépendamment. Une PWM règle la luminosité :
Vérifiez la polarité électrique de la carte.
UART¶
Pour un émetteur :
- Ligne au repos à 1.
- Bit de départ à 0.
- Données, bit de poids faible d'abord.
- Parité éventuelle.
- Un ou plusieurs bits d'arrêt à 1.
À 115 200 bauds avec 100 MHz :
Un diviseur entier de 868 produit une petite erreur. Un accumulateur de phase améliore la précision. La réception est asynchrone : synchronisez l'entrée et échantillonnez près du centre du bit, souvent par suréchantillonnage.
VGA¶
Un contrôleur VGA nécessite :
- une horloge ou validation pixel adaptée ;
- des compteurs horizontal et vertical ;
- des impulsions de synchronisation ;
- la détection de la zone active ;
- les composantes rouge, verte et bleue.
C'est un bon projet intermédiaire car compteurs, horloge et moniteur doivent respecter les mêmes paramètres.
Pmod¶
Avant de connecter un module :
- vérifier tension et standard électrique ;
- identifier le sens des broches ;
- relier les masses ;
- respecter le courant maximum ;
- synchroniser les entrées numériques asynchrones ;
- contraindre les interfaces externes synchrones.
Principe d'interface¶
Placez les préoccupations physiques dans une fine couche supérieure :
Le cœur n'a pas besoin de connaître le rebond d'un bouton ou la polarité d'une anode.