Kod za generiranje kvadratnog vala u VHDL-u?
knjižnica ieee;
koristiti ieee.std_logic_1164.all;
koristiti ieee.numeric_std.all;
entitet kvadratni_generator_valova je
luka (
clk :u std_logici;
reset :u std_logic;
frekvencija :u std_logic_vector(7 downto 0); -- Ulazna frekvencija u Hz (0-255)
izlazni_signal :izlazna std_logika
);
krajnji entitet kvadratni_generator_valova;
arhitektura ponašanja generatora kvadratnih_valova je
brojač signala :unsigned(7 downto 0);
signal half_period :unsigned(7 downto 0);
početi
-- Izračunajte poluperiod na temelju ulazne frekvencije
poluperioda <=10000000 / (2 * bez predznaka (frekvencija)); -- 10000000 =10MHz taktna frekvencija
proces (clk, reset)
početi
ako je reset ='1' tada
brojač <=(ostali => '0');
izlazni_signal <='0';
elsif rastući_rub(clk) zatim
if counter =half_period - 1 then
brojač <=(ostalo => '0');
izlazni_signal <=nije izlazni_signal;
drugo
brojač <=brojač + 1;
kraj ako;
kraj ako;
završni proces;
end architecture bihevioralni;
```
Objašnjenje:
1. Deklaracija entiteta:
- Definira entitet `square_wave_generator` s priključcima za sat, resetiranje, ulaz frekvencije (8-bitni) i izlazni signal.
2. Arhitektura:
- Koristi "biheviorističku" arhitekturu za opisivanje logike.
3. Signali:
- `brojač`:8-bitni brojač bez predznaka za generiranje valnog oblika.
- `half_period`:8-bitni signal bez predznaka koji predstavlja poluperiod pravokutnog vala (izračunato na temelju ulazne frekvencije).
4. Izračun poluvremena:
- Redak `half_period <=10000000 / (2 * unsigned(frequency));` izračunava poluperiod na temelju ulazne frekvencije i frekvencije takta od 10MHz. Podesite vrijednost "10000000" ako je vaša frekvencija takta drugačija.
5. Proces:
- Proces je osjetljiv na signale sata i resetiranja.
- Obavlja sljedeće:
- Poništi logiku: Ako je `reset` visok, brojač se vraća na nulu, a izlaz se postavlja na nizak.
- Rising Edge Logic: Na rastućem rubu takta, proces provjerava je li brojač dosegao vrijednost `half_period - 1`. Ako je tako, prebacuje `output_signal` i resetira brojač. U suprotnom, povećava brojač.
Kako to radi:
- Brojač broji od 0 do `half_period - 1`.
- Kada brojač dosegne `half_period - 1`, izlazni signal se uključuje, a brojač se poništava.
- Ovo stvara kvadratni val s periodom dvostrukom od izračunate `polu_periode`.
Korištenje:
- Spojite signale `clk` i `reset` na vaš sat i ulaze za resetiranje.
- Unesite željenu frekvenciju (0-255 Hz) preko ulaza `frequency`.
- `output_signal` će ispisati generirani kvadratni val.
Napomena: Ovaj kod pretpostavlja frekvenciju takta od 10MHz. Izmijenite izračun `half_period` ako je vaša frekvencija sata drugačija.