Kód négyzethullám generálásához VHDL-ben?
könyvtár ieee;
használja az ieee.std_logic_1164.all;
használja az ieee.numeric_std.all;
entitás square_wave_generator is
port (
clk :in std_logic;
reset :in std_logic;
frekvencia :in std_logic_vector(7 downto 0); -- Bemeneti frekvencia Hz-ben (0-255)
output_signal:out std_logic
);
endity square_wave_generator;
a square_wave_generator architektúra viselkedése
jelszámláló :unsigned(7-től 0-ig);
signal half_period :unsigned(7-től 0-ig);
kezdődik
- Félperiódus kiszámítása a frekvencia bemenet alapján
félidőszak <=10000000 / (2 * előjel nélküli(gyakoriság)); -- 10000000 =10 MHz órajel
folyamat (clk, reset)
kezdődik
ha reset ='1' akkor
számláló <=(egyéb => '0');
kimeneti_jel <='0';
elsif rising_edge(clk) akkor
ha számláló =félperiódus - 1 akkor
számláló <=(egyéb => '0');
kimeneti_jel <=nem kimeneti_jel;
más
számláló <=számláló + 1;
vége if;
vége if;
folyamat befejezése;
vég architektúra viselkedési;
```
Magyarázat:
1. Entitásnyilatkozat:
- Meghatározza a `square_wave_generator` entitást az órajel, a visszaállítás, a frekvencia bemenet (8 bites) és a kimeneti jel portjaival.
2. Architektúra:
- A „viselkedési” architektúrát használja a logika leírására.
3. Jelek:
- `számláló`:8 bites előjel nélküli számláló a hullámalak generálásához.
- `half_period`:8 bites előjel nélküli jel, amely a négyszöghullám félperiódusát reprezentálja (a bemeneti frekvencia alapján számítva).
4. Félidőszak számítása:
- A `half_period <=10000000 / (2 * unsigned(frekvencia));` sor kiszámítja a félidőszakot a bemeneti frekvencia és egy 10 MHz-es órajel alapján. Állítsa be az `10000000' értéket, ha az órajel frekvenciája eltérő.
5. Folyamat:
- A folyamat érzékeny az órajelekre és a reset jelekre.
- A következőket hajtja végre:
- Logika visszaállítása: Ha a „reset” értéke magas, a számláló nullázódik, a kimenet pedig alacsonyra áll.
- Rising Edge Logic: Az óra felfutó élén a folyamat ellenőrzi, hogy a számláló elérte-e a `half_period - 1` értéket. Ha igen, akkor átkapcsolja az "output_signal" értéket, és alaphelyzetbe állítja a számlálót. Ellenkező esetben növeli a számlálót.
Hogyan működik:
- A számláló 0-tól `fél periódus - 1-ig számol.
- Amikor a számláló eléri a `half_period - 1` értéket, a kimeneti jel átkapcsol, és a számláló nullázódik.
- Ez egy négyzethullámot hoz létre, amelynek periódusa kétszerese a kiszámított "félperiódusnak".
Használat:
- Csatlakoztassa a "clk" és "reset" jeleket az órájához és a reset bemenetekhez.
- Adja meg a kívánt frekvenciát (0-255 Hz) a "frekvencia" bemeneten keresztül.
- Az `output_signal` a generált négyszöghullámot adja ki.
Megjegyzés: Ez a kód 10 MHz-es órajelet feltételez. Módosítsa a `half_period` számítást, ha az órajel frekvenciája eltérő.