Verilog kód a frekvenciaosztóra
On február 17, 2021 by adminTudna segíteni abban, hogyan hozhat létre Verilog kódot a frekvenciaosztó áramkörhöz, amely 50Hz órajel a 50MHz jelből a 16 bites szinkron számláló. Megpróbáltam csinálni, de nem működött!
module divier_16 (clk_in, clk_out); input clk_in; wire w; wire [0:15]temp; output clk_out; count_16 c1 (clk_in, w); count_16 c2 (w, temp); assign clk_out= temp[6];
Megjegyzések
- 16 bit miből?
- És mit próbáltál? Fel tudnád adni a kódodat?
- 16 bites szinkron számláló
- Használhat ebből kettőt?
- jó. Ezután először osszuk el 1000-gyel, majd osszuk el még 1000-vel.
Válasz
Sajnos a 16 bit nem elegendő az 50 MHz-es jel 50Hz-es jellé konvertálásához. Ennek oka, hogy el kell osztani az órát 1 millióval. $$ 2 ^ {16} = 65536 $$ Ezért ez közel sem elég. A legalább 20 bites számláló elegendő lenne, mert: $$ 2 ^ {20} = 1048576 $$
A jel konvertálásához egyszerűen számoljon 1 millió óraciklusra, majd változtassa meg a kimeneti jel állapotát .
példa:
always @(posedge clk_in) begin count_20 <= count_20 + 1; if(count_20 == 1000000) begin count<=0; clk_out <= !clk_out; end end
Szerkesztés: Kiderült, hogy ez a ^^ 25Hz-es jelet eredményez, ezért csak számoljon 500000-ig, amelyhez 19 bitre van szükség. Ekkor az a kérdés, hogy hol ez a 20. bit abból származik, hogy látja, mivel meg kell osztani 1 millióval. Nos, a clk_out bit szolgál ez a 20. bit.
Megjegyzések
- másik megoldás az, hogy ebből a 16 bites számlálóból többet használunk. ezek közül legalább 16-ra lenne szüksége (16 * 65536 = 2 ² ⁰ = 1048576)
- Lehet, hogy hibáztam, gondolom, hogy a megoldásom eredményezné 25Hz-en?
- csak kettőre lenne szükséged, ez 32 bitet adna
- @Makoto igen, 500_000-ig kell számolnod, másodszor – valószínűleg figyelmeztetni fognak mindig más hozzárendelési típust használva a konstrukcióban, azt hiszem, hogy
clk_out <= !clk_out
; - igen meg fogja változtatni
Vélemény, hozzászólás?