Code pour la génération d'ondes carrées en VHDL ?
bibliothèque ieee ;
utilisez ieee.std_logic_1164.all ;
utilisez ieee.numeric_std.all ;
l'entité square_wave_generator est
port (
clk :dans std_logic ;
réinitialiser :dans std_logic ;
fréquence :dans std_logic_vector(7 jusqu'à 0); -- Fréquence d'entrée en Hz (0-255)
signal_de sortie :sortie std_logic
);
entité finale square_wave_generator ;
l'architecture comportementale de square_wave_generator est
compteur de signal :non signé (7 jusqu'à 0);
signal half_period :non signé (7 jusqu'à 0);
commencer
- Calculer la demi-période en fonction de l'entrée de fréquence
half_period <=10000000 / (2 * non signé (fréquence)); -- 10000000 =fréquence d'horloge de 10 MHz
processus (cliquez, réinitialisez)
commencer
si réinitialiser ='1' alors
compteur <=(autres => '0');
signal_de sortie <='0' ;
elsifising_edge(clk) alors
si compteur =demi_période - 1 alors
compteur <=(autres => '0');
signal_sortie <=pas signal_sortie ;
autre
compteur <=compteur + 1 ;
terminer si ;
terminer si ;
terminer le processus ;
comportemental de l'architecture finale ;
```
Explication :
1. Déclaration d'entité :
- Définit l'entité `square_wave_generator` avec des ports pour l'horloge, la réinitialisation, l'entrée de fréquence (8 bits) et le signal de sortie.
2. Architecture :
- Utilise l'architecture « comportementale » pour décrire la logique.
3. Signaux :
- `counter` :Un compteur non signé de 8 bits pour générer la forme d'onde.
- `half_period` :Un signal non signé de 8 bits représentant la demi-période de l'onde carrée (calculée en fonction de la fréquence d'entrée).
4. Calcul de la demi-période :
- La ligne `half_period <=10000000 / (2 * unsigned(fréquence));` calcule la demi-période en fonction de la fréquence d'entrée et d'une fréquence d'horloge de 10 MHz. Ajustez la valeur « 1 0000000 » si votre fréquence d'horloge est différente.
5. Processus :
- Le processus est sensible aux signaux d'horloge et de réinitialisation.
- Il effectue les tâches suivantes :
- Réinitialiser la logique : Si « reset » est haut, le compteur est réinitialisé à zéro et la sortie est réglée sur bas.
- Logique de front montant : Sur le front montant de l'horloge, le processus vérifie si le compteur a atteint la valeur « demi-période - 1 ». Si tel est le cas, il bascule le « output_signal » et réinitialise le compteur. Sinon, cela incrémente le compteur.
Comment ça marche :
- Le compteur compte de 0 à `half_period - 1`.
- Lorsque le compteur atteint « demi-période - 1 », le signal de sortie est basculé et le compteur est réinitialisé.
- Cela crée une onde carrée avec une période de deux fois la « demi-période » calculée.
Utilisation :
- Connectez les signaux « clk » et « reset » à votre horloge et réinitialisez les entrées.
- Fournissez la fréquence souhaitée (0-255 Hz) via l'entrée « fréquence ».
- Le `output_signal` produira l'onde carrée générée.
Remarque : Ce code suppose une fréquence d'horloge de 10 MHz. Modifiez le calcul `half_period` si votre fréquence d'horloge est différente.