Kód Verilog pro dělič kmitočtu
On 17 února, 2021 by adminMůžete mi prosím pomoci, jak vytvořit kód Verilog pro obvod děliče kmitočtu, který může generovat 50Hz hodinový signál z 50MHz signálu pomocí 16bitové synchronní počítadlo. Snažil jsem se to udělat, ale nefungovalo to!
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];
Komentáře
- Použití 16 bitů z čeho?
- A co jste vyzkoušeli? Mohli byste odeslat svůj kód?
- 16bitové synchronní počítadlo
- Můžete použít dva z nich?
- Dobré. Pak nejprve vydělte 1000, poté vydělte dalších 1000 ..
Odpovědět
Bohužel 16 bitů nestačí k převodu signálu 50MHz na signál 50Hz. Je to proto, že je třeba rozdělit hodiny o 1 milion. $$ 2 ^ {16} = 65536 $$ Proto to nestačí. A čítač s minimálně 20 bity by stačil, protože: $$ 2 ^ {20} = 1048576 $$
Chcete-li převést signál, jednoduše spočítejte 1 milion hodinových cyklů a poté změňte stav výstupního signálu .
příklad:
always @(posedge clk_in) begin count_20 <= count_20 + 1; if(count_20 == 1000000) begin count<=0; clk_out <= !clk_out; end end
Upravit: Ukázalo se, že by ^ ^ mělo za následek signál 25 Hz, takže stačí pouze počítat do 500 000, které potřebují 19 bitů. Otázkou tedy je, kde ten 20. bit pochází z toho, že musíte vydělit 1 milion. Bit clk_out slouží jako 20. bit.
Komentáře
- dalším řešením je použití několika z těchto 16 bitových čítačů. budete potřebovat alespoň 16 z nich (16 * 65536 = 2 ² ⁰ = 1048576)
- Možná jsem udělal chybu, myslím, že moje řešení by vyústilo v 25 Hz?
- budete potřebovat jen dva, což vám dá 32 bitů
- @ Makak ano, musíte počítat do 500_000, a za druhé – s největší pravděpodobností tam bude varování o s použitím jiného typu přiřazení v konstrukci vždy, myslím, že jste mysleli
clk_out <= !clk_out
; - ano to změní
Napsat komentář