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
@rene (Gast) >es funktioniert aber nicht richtig Ist Reset auf 0? >kann es sein das der externe takt zu >schnell ist für diese prinzig??? Nein. Lass das Reset weg, ist hier überflüssig. MFG Falk
> 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. |
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
> da flankensr 2bit groß ist und du ihm darauf nur ein bit einfach zuweist Da werden durchaus 2 Bit zugewiesen. Sieh dir mal die Funktion des & Operators (Concatenation, Verknüpfung) in VHDL an.
@ 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
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 ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.