Koda za generiranje kvadratnih valov v VHDL?
knjižnica ieee;
uporabite ieee.std_logic_1164.all;
uporabite ieee.numeric_std.all;
entiteta square_wave_generator je
pristanišče (
clk :v std_logic;
ponastavitev:v std_logic;
frekvenca:v std_logic_vector(7 downto 0); -- Vhodna frekvenca v Hz (0-255)
izhodni_signal:izhodna std_logika
);
končna entiteta kvadratni_generator_valov;
vedenje arhitekture square_wave_generatorja je
števec signalov:brez predznaka (7 navzdol do 0);
polovična_perioda signala:brez predznaka (7 navzdol do 0);
začeti
-- Izračunajte polperiodo glede na vnos frekvence
polovična_perioda <=10000000 / (2 * brez predznaka (frekvenca)); -- 10000000 =taktna frekvenca 10MHz
postopek (clk, ponastavitev)
začeti
če je ponastavitev ='1' potem
števec <=(ostali => '0');
izhodni_signal <='0';
elsif rising_edge(clk) torej
če je števec =pol_obdobje - 1 potem
števec <=(ostali => '0');
izhodni_signal <=ni izhodni_signal;
drugače
števec <=števec + 1;
konec če;
konec če;
končni postopek;
vedenjska končna arhitektura;
```
Razlaga:
1. Izjava subjekta:
- Definira entiteto `square_wave_generator` z vrati za uro, ponastavitev, frekvenčni vhod (8-bitni) in izhodni signal.
2. Arhitektura:
- Uporablja `vedenjsko` arhitekturo za opisovanje logike.
3. Signali:
- `counter`:8-bitni nepredznačeni števec za generiranje oblike valov.
- `half_period`:8-bitni signal brez predznaka, ki predstavlja polovično obdobje kvadratnega vala (izračunano na podlagi vhodne frekvence).
4. Izračun polčasa:
- Vrstica `half_period <=10000000 / (2 * unsigned(frequency));` izračuna polperiodo na podlagi vhodne frekvence in taktne frekvence 10 MHz. Prilagodite vrednost `10000000`, če je vaša urna frekvenca drugačna.
5. Postopek:
- Proces je občutljiv na signale ure in ponastavitve.
- Izvaja naslednje:
- Ponastavi logiko: Če je `reset` visoko, se števec ponastavi na nič, izhod pa na nizek.
- Rising Edge Logic: Na naraščajočem robu ure proces preveri, ali je števec dosegel vrednost `half_period - 1`. Če je tako, preklopi `output_signal` in ponastavi števec. V nasprotnem primeru poveča števec.
Kako deluje:
- Števec šteje od 0 do `half_period - 1`.
- Ko števec doseže `half_period - 1`, se izhodni signal preklopi in števec ponastavi.
- To ustvari pravokotni val s periodo, ki je dvakrat večja od izračunane `polovične_periode`.
Uporaba:
- Povežite signala `clk` in `reset` z vašo uro in vhodi za ponastavitev.
- Zagotovite želeno frekvenco (0-255 Hz) prek vnosa `frekvenca`.
- `output_signal` bo izpisal ustvarjeni kvadratni val.
Opomba: Ta koda predvideva taktno frekvenco 10MHz. Spremenite izračun `half_period`, če je vaša urna frekvenca drugačna.