Verilog-code voor frequentiedeler
Geplaatst op februari 17, 2021 door adminKun je me alsjeblieft helpen bij het maken van een Verilog-code voor een frequentiedelercircuit dat 50Hz kloksignaal uit 50 MHz signaal met 16 bit synchrone teller. Ik heb geprobeerd het te doen, maar het werkte niet!
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];
Reacties
- Gebruiken 16 bits van wat?
- En wat heb je geprobeerd? Zou je je code kunnen posten?
- 16 bits synchrone teller
- Kun je er twee gebruiken?
- Goed. Deel dan eerst door 1000, deel dan door nog eens 1000 ..
Antwoord
Helaas is 16 bits niet genoeg om een signaal van 50 MHz om te zetten in een signaal van 50 Hz. Dit komt omdat je de klok moet delen door 1 miljoen. $$ 2 ^ {16} = 65536 $$ Daarom is het lang niet genoeg. A een teller met ten minste 20 bits zou voldoende zijn omdat: $$ 2 ^ {20} = 1048576 $$
Om het signaal om te zetten, tel je gewoon naar 1 miljoen klokcycli, en verander je vervolgens de status van het uitgangssignaal .
voorbeeld:
always @(posedge clk_in) begin count_20 <= count_20 + 1; if(count_20 == 1000000) begin count<=0; clk_out <= !clk_out; end end
Bewerken: het blijkt dat ^^ zou resulteren in een 25Hz-signaal, dus je hoeft alleen maar tel tot 500000 wat 19 bits nodig heeft. De vraag is dan waar dat 20ste bit komt voort uit het feit dat je moet delen door 1 miljoen. Welnu, de clk_out-bit dient als dat 20ste bit.
Reacties
- een andere oplossing is om verschillende van die 16-bits tellers te gebruiken. je zou er minstens 16 nodig hebben (16 * 65536 = 2 ² ⁰ = 1048576)
- Ik heb misschien een fout gemaakt, ik denk dat mijn oplossing zou resulteren in 25Hz?
- je zou er maar twee nodig hebben, dat zou je 32 bits opleveren
- @Makoto ja, je moet tot 500_000 tellen, en ten tweede – hoogstwaarschijnlijk zal er een waarschuwing zijn voor door een ander toewijzingstype te gebruiken in always construct, ik denk dat je
clk_out <= !clk_out
bedoelde; - yep zal het veranderen
Geef een reactie