Cod Verilog pentru divizor de frecvență
On februarie 17, 2021 by adminPuteți să mă ajutați cu privire la modul de creare a unui cod Verilog pentru circuitul divizor de frecvență care poate genera 50Hz semnal de ceas din 50MHz semnal utilizând 16 biți contor sincron. Am încercat să o fac, dar nu a funcționat!
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];
Comentarii
- Utilizarea 16 biți din ce?
- Și ce ați încercat? Ați putea posta codul dvs.?
- Contor sincron pe 16 biți
- Puteți utiliza două dintre acestea?
- Bine. Apoi împărțiți mai întâi la 1000, apoi împărțiți la încă 1000 ..
Răspundeți
Din păcate, 16 biți nu sunt suficienți pentru a converti un semnal de 50 MHz într-un semnal de 50 Hz. Acest lucru se datorează faptului că trebuie să împărțiți ceasul cu 1 milion. $$ 2 ^ {16} = 65536 $$ Prin urmare, nu este aproape suficient. contorul cu cel puțin 20 de biți ar fi suficient pentru că: $$ 2 ^ {20} = 1048576 $$
Pentru a converti semnalul, numărați pur și simplu la 1 milion de cicluri de ceas și apoi modificați starea semnalului de ieșire .
exemplu:
always @(posedge clk_in) begin count_20 <= count_20 + 1; if(count_20 == 1000000) begin count<=0; clk_out <= !clk_out; end end
Editare: Se pare că acel ^^ ar rezulta într-un semnal de 25Hz, deci trebuie doar să numărați până la 500000, care are nevoie de 19 biți. Întrebarea este atunci unde are cel de-al 20-lea bit provine din faptul că trebuie să vă împărțiți cu 1 milion. Ei bine, bitul clk_out servește ca acel 20 de biți.
Comentarii
- o altă soluție este utilizarea mai multor contoare de 16 biți. ai avea nevoie de cel puțin 16 dintre acestea (16 * 65536 = 2 ² ⁰ = 1048576)
- S-ar putea să fi făcut o greșeală, cred că ar rezulta soluția mea în 25Hz?
- ai avea nevoie doar de doi, ceea ce ți-ar oferi 32 de biți
- @Makoto da, trebuie să numeri până la 500_000, iar în al doilea rând – cel mai probabil va fi un avertisment despre folosind un tip de atribuire diferit în construcția întotdeauna, cred că ai vrut să spui
clk_out <= !clk_out
; - da o va schimba
Lasă un răspuns