Codice per generazione di onde quadrate in VHDL?
biblioteca IEEE;
Usa IEEE.std_logic_1164.all;
Usa IEEE.numeric_std.all;
Entity Square_Wave_Generator è
porto (
CLK:in std_logic;
Ripristino:in std_logic;
frequenza:in std_logic_vector (7 down to 0); -Frequenza di input in Hz (0-255)
output_signal:out std_logic
);
Entity End Square_Wave_Generator;
L'architettura comportamentale di Square_Wave_Generator è
contatore del segnale:non firmato (7 down to 0);
Signal Half_period:non firmato (7 down to 0);
inizio
-Calcola il mezzo periodo in base all'ingresso di frequenza
Half_period <=10000000 / (2 * Unsigned (Frequency)); - 10000000 =frequenza di clock da 10 mHz
processo (clk, reset)
inizio
Se reset ='1' allora
contatore <=(altri => '0');
output_signal <='0';
Elsif Rising_edge (CLK) allora
Se contatore =Half_period - 1 allora
contatore <=(altri => '0');
output_signal <=non output_signal;
altro
contatore <=contatore + 1;
terminare se;
terminare se;
processo di fine;
End Architecture Behaviour;
`` `
Spiegazione:
1. Dichiarazione di entità:
- Definisce l'entità `Square_Wave_Generator` con porte per clock, reset, input di frequenza (a 8 bit) e segnale di uscita.
2. Architettura:
- Utilizza l'architettura `comportamental 'per descrivere la logica.
3. Segnali:
- `Counter`:un contatore senza segno a 8 bit per generare la forma dell'onda.
-`Half_period`:un segnale non firmato a 8 bit che rappresenta il mezzo periodo dell'onda quadra (calcolato in base alla frequenza di ingresso).
4. Calcolo del mezzo periodo:
- La linea `Half_period <=10000000 / (2 * senza segno (frequenza));` calcola il mezzo periodo in base alla frequenza di input e a una frequenza di clock da 10 MHz. Regola il valore `10000000` se la frequenza di clock è diversa.
5. processo:
- Il processo è sensibile all'orologio e ripristina i segnali.
- Esegue quanto segue:
- Reimposta logica: Se `reset` è alto, il contatore viene ripristinato a zero e l'uscita è impostata su basso.
- Logica del bordo di salita: Sul bordo di salita dell'orologio, il processo controlla se il contatore ha raggiunto il valore `Half_period - 1`. In tal caso, attiva l'output_signal` e ripristina il contatore. Altrimenti, aumenta il contatore.
Come funziona:
- Il contatore conta da 0 a `Half_period - 1`.
- Quando il contatore raggiunge `Half_period - 1`, il segnale di uscita viene attivato e il contatore viene ripristinato.
- Questo crea un'ondata quadrata con un periodo di doppio `Half_period` calcolato.
Utilizzo:
- Collegare i segnali `clk` e` reset` all'orologio e ripristinare gli ingressi.
- Fornire la frequenza desiderata (0-255 Hz) attraverso l'input `Frequency`.
- L'output_signal` emetterà l'onda quadrata generata.
Nota: Questo codice assume una frequenza di clock da 10 MHz. Modifica il calcolo `Half_period` se la frequenza dell'orologio è diversa.