flankenerkennung für externen takt

Gast #1630387
Lesenswert?

hi,
ich hab da ein problem vllt kann mir da jemand helfen. Also ich hab ein 
Systemtakt von 66MHZ und ein externer takt von 3kHz ich mach eine neg 
Fankenerkennung mit folgendem prinzip
process(CLK)
 begin
   if rising_edge(CLK) then
    if RESET = '1' then
     signal_syn <= '0';
     signal_last <= '0';
    else
     signal_syn <= externtakt;
     signal_last <= signal_syn;
    signal_rising <= not signal_syn and  signal_last;
end if;
   end if;
 end process;

es funktioniert aber nicht richtig kann es sein das der externe takt zu 
schnell ist für diese prinzig???
VIELEN DANK
Moderator (Firma: Titel) Persönliche Seite #1630436
Lesenswert?

> es funktioniert aber nicht richtig
Was funktioniert nicht?
Die Simulation?
Das Design im Zielsystem?
Ist das ein FPGA oder CPLD?

BTW: die Simulation ist garantiert falsch, denn die Sensitivliste ist 
unvollständig. Wenn du schon einen asynchronen Reset beschribst, dann 
muß der auch mit rein:
process(RESET,CLK) ...

> Also ich hab ein Systemtakt von 66MHZ und ein externer takt von 3kHz
> ... kann es sein das der externe takt zu schnell ist
Nein. Eher ist der 66MHz-Takt zu schnell, wenn die Flankensteilheit des 
3kHz-Signals relativ flach ist. Dann erkennst du evtl. mehrere Flanken 
schnell hintereinander wo eigentlich nur 1 Flanke ist.

> ich mach eine neg Fankenerkennung
Und nennst dein Ergebnissignal dann rising. Das ist brutal :-o

Dein Code ist kurz und trotzdem macht er mir fast einen Knoten ins Hirn:
1. Du brauchst keinen Reset.
2. Nimm ein Schieberegister.
3. Du mußt nicht jedes Signal nochmal im Namen mit signal_ ansprechen.

Das hier mal als Vorschlag
1
 flankensr : std_logic_vector(1 downto 0) := "00";
2
 falledge  : std_logic := '0';
3
 :
4
 process (CLK) begin
5
   if rising_edge(CLK) then
6
     flankensr <= flankensr(0) & externtakt;
7
--     if (flankensr = "10") then falledge <= '1';  -- Entweder so....
8
--     else                       falledge <= '0';  -- ...
9
--     end if;                                      -- ...
10
   end if;
11
 end process;
12
 :
13
 falledge <= '1' when flankensr = "10" else '0';    -- ... oder so.
Gast #1630500
Lesenswert?

erst mal vielen dank
@lothar
zur beruhigung das ist nicht der orign. code hab das nur schnell 
hingeschrieben.
1. das ist ein fpga
2.simulation geht alles nur auf der hardware nicht
3. die flanken des esternen takt sind sehr steil

frage zu deinem code
meckert der compiler nicht bei der zuweisung
flankensr <= flankensr(0) & externtakt;
da flankensr 2bit groß ist und du ihm darauf nur ein bit einfach zuweist 
ohne zu sagen wohin?? ich kenn das so nicht?? anfänger halt
#1630868
Lesenswert?

@  rene (Gast)

>zur beruhigung das ist nicht der orign. code hab das nur schnell
>hingeschrieben.

Patsch

Für so ein Blödsinn KANN man nur Ohrfeigen verteilen!
Siehe Netiquette!!!

>2.simulation geht alles nur auf der hardware nicht

Wie so oft ;-)

>3. die flanken des esternen takt sind sehr steil

Ja und? Das ist der Sinn der Sache!

MfG
Falk
Gast #1631844
Lesenswert?

Hallo Rene,

was heisst "funktioniert nicht richtig" in HW. Immer, oder nur manchmal, 
oder manchmal nicht?

Takte das externe Signal mal 2mal nach, bevor Du die Flanke detektierts.

Sig1 <= ExtClock;
Sig2 <= Sig1;
dann erst das Signal, dass dann auf die Flanke geprüft wird.
Sig3 <= Sig2;
EdgeDetection <= (not Sig2) and Sig3;

Ist es beabsichtigt, hier nur nen 1-Takt breiten Impuls zu erzeugen?

Mit was verarbeitest Du denn dann diesen Impuls?
Ist der externe Takt glitchfrei?

Gruss,

S.



PS:

> BTW: die Simulation ist garantiert falsch, denn die Sensitivliste ist
> unvollständig. Wenn du schon einen asynchronen Reset beschribst, dann
> muß der auch mit rein:
> process(RESET,CLK) ...

Hmmm, ist das nicht ein synchroner Reset in dem Beispiel, und damit dann 
die Sensitivity Liste richtig ?   :-)
Aber ich nehm auch lieber Async Reset ...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren