CLK Skillelinje HELP

K

Kaiser

Guest
Jeg har en 50 MHz klokke på mitt bord og jeg trenger en 60Hz klokke for mine design ......
Noen som kan foreslå noe å gjøre ...?
En Verilog descripiton det blir veldig fint ....( med kommentarer-general mods)

THX PÅ FORHÅND!

 
Her går Verilog koden!Code:

modul clk_div (clk_50mhz, rst_n, clk_60hz);

input clk_50mhz, rst_n;

output clk_60hz;

reg clk_60hz;reg [47:0] teller;alltid @ (posedge clk_50mhz eller negedge rst_n) begin

if (! rst_n) begin

counter <= 48'h00000;

clk_60hz <= 1'b0;

end else begin

if (teller == 48'h65B9A) begin

counter <= 48'h00000;

clk_60hz <= ~ clk_60hz;

end else begin

counter <= teller 1'b1;

slutt

end / / else:! if (! rst_n)

end / / alltid @ (posedge clk_50mhz eller negedge rst_n)

endmodule / / clk_div
 
jeg får det fra et universitet ...dunno navnet D. ..VHDLCode:

Hvis du trenger en langsommere klokke, her er en enkel klokke som deler algoritmen, som deler klokken ved 2N.Hvor:N = f (clk) / (2 * f (ønsket))
- File "clk_div.vhd"- En generisk klokke som deler dividerer med 2 * N- Tilpasset fra «VHDLL Primer" av J. Bhasker, s.
295-------------------------------------------------- ----------------------------------------library IEEE;

bruk ieee.std_logic_1164.all;enhet clk_div er

generisk (N: positiv: = 2);

port

(fast_clk, reset: in std_logic;

slow_clk: buffer std_logic

);

end clk_div;arkitektur atferdsforstyrrelser av clk_div er

begynne

process (reset, fast_clk)

variabel count: natur;

begynne

hvis reset = '1 'da

teller: = 0;

slow_clk <= '0 ';

elsif rising_edge (fast_clk) then

teller: = teller 1;

hvis count = N deretter

slow_clk <= ikke slow_clk;

teller: = 0;

end if;

end if;

end process;

end atferdsproblemer;
 
alltid @ (posedge clk_50mhz eller negedge rst_n) begin
if (! rst_n) beginDu trenger dobbel kant filp-floppen.Er CPLD / FPGA stand? [/ U]

 
Quote:alltid @ (posedge clk_50mhz eller negedge rst_n) begin

if (! rst_n) beginDu trenger dobbel kant filp-floppen.
Er CPLD / FPGA stand?

 
Tusen takk ....

det var hjelpsomt ..Etter at jeg så på dine forslag, gjorde jeg dette (fra 50MHz downto 1Hz med 50% Dutty syklus)modul clk_div (clk_in, reset, clk_1hz);
input clk_in, reset;
output clk_1hz;
reg clk_1hz;reg [25] teller;

alltid @ (posedge clk_in eller posedge reset)
begynne
if (reset)
begynne
counter <= 26'h0;
clk_1hz <= 1'b0;
slutt
ellers
begynne
if (teller == 26'h17D7840)
begynne
counter <= 26'h0;
clk_1hz <= ~ clk_1hz;
slutt
ellers
counter <= teller 1'b1;
slutt
slutt

endmoduleeventuelle kommentarer den vil bli verdsatt ...Lagt etter 11 minutter:nand_gates skrev:

Her går Verilog koden!
Code:

modul clk_div (clk_50mhz, rst_n, clk_60hz);

input clk_50mhz, rst_n;

output clk_60hz;

reg clk_60hz;reg [47:0] teller;alltid @ (posedge clk_50mhz eller negedge rst_n) begin

if (! rst_n) begin

counter <= 48'h00000;

clk_60hz <= 1'b0;

avslutte ellers begynner

if (teller == 48'h65B9A) begin

counter <= 48'h00000;

clk_60hz <= ~ clk_60hz;

end else begin

counter <= teller 1'b1;

slutt

end / / else:! if (! rst_n)

end / / alltid @ (posedge clk_50mhz eller negedge rst_n)

endmodule / / clk_div
 
50 MHz ikke skillet ikke jevnt til 60 Hz.Forholdet er 833333.333 ...

Du kan bygge en teller som teller opp fra 0 til 2.499.999 og utganger en puls når den passerer 0, 833.333 og 1.666.666.Det vil gi deg tre pulser hvert 2500000 klokker som er nøyaktig 60 Hz.Men pulsene er ikke jevnt fordelt, er det én syklus jitter (20 ns).
Code:

modul topp (clk, hz60);

input clk;

reg [21:0] count = 0;

output reg hz60 = 0;alltid @ (posedge clk) begin

count <= (count == 2499999)?
0: count 1;

hz60 <= (count == 0) | (count == 833333) | (count == 1666666);

slutt

endmodule
 
echo47 skrev:

Det vil gi deg tre pulser hvert 2500000 klokker som er nøyaktig 60 Hz.
Men pulsene er ikke jevnt fordelt, er det én syklus jitter (20 ns).
 
Min telleren har 20ns periode jitter.Perioden er 16666660ns, 16666660ns, 16666680ns, og den gjentas.Gjennomsnittet av de tre periodene er 16666666.6666 ...nanosekunder, som er nøyaktig 60 Hz.

Selv de beste klokken oscillatorer har noen jitter (vanligvis picoseconds) på grunn av termisk støy.Du bør alltid måle en klokke frekvens av snitt mange sykluser.

 
nand_gates skrev:

Her går Verilog koden!
Code:

modul clk_div (clk_50mhz, rst_n, clk_60hz);

input clk_50mhz, rst_n;

output clk_60hz;

reg clk_60hz;reg [47:0] teller;alltid @ (posedge clk_50mhz eller negedge rst_n) begin

if (! rst_n) begin

counter <= 48'h00000;

clk_60hz <= 1'b0;

end else begin

if (teller == 48'h65B9A) begin

counter <= 48'h00000;

clk_60hz <= ~ clk_60hz;

end else begin

counter <= teller 1'b1;

slutt

end / / else:! if (! rst_n)

end / / alltid @ (posedge clk_50mhz eller negedge rst_n)

endmodule / / clk_div
 
fjell,

1.Uten reg uttalelse, vil utgangssignalet standard til en ledning i stedet for et register.

Du kan kombinere de to utsagnene: output reg clk_60hz;2.Nei, 48 bits overkill.Den øvre 29 bits er alltid null.

Forresten, denne modulen ikke generere 60 Hz.Det genererer ca 59.999952 Hz.

 
alltid @ (posedge clk_50mhz eller negedge rst_n) begin
if (! rst_n) begin

designene er ok, er det bare en asynkron RESET
, Ikke en dobbel kant filp-floppen.
det passer for CPLD / FPGA.

 
Can any1 forklare abt Clock Dobbel & Hvordan implementere det ?....

 
kumar_eee skrev:

Can any1 forklare abt Clock Dobbel & Hvordan implementere det ?....
 

Welcome to EDABoard.com

Sponsor

Back
Top