>> Électroniques Technologie >  >> téléviseurs >> Convertisseurs de télévision

Code pour la génération d'ondes carrées en VHDL ?

```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.

Convertisseurs de télévision