Hallo,
Für mein Projekt muss ich flexibel Takt erzeugen können. Ich habe einen
50MHz Quarzoszillator und will einen XC9536 verwenden.
Versucht habe ich es mit diesem Code:
1
module modul1(clock, teilung, clock_out);
2
3
input clock;
4
input [3:0] teilung;
5
output clock_out;
6
reg [14:0]z;
7
8
9
assign clock_out = (clock && (teilung[3:0]==0))||
10
(z[0:0] && (teilung[3:0]==1))||
11
(z[1:1] && (teilung[3:0]==2))||
12
13
...
14
15
(z[12:12] && (teilung[3:0]==13))||
16
(z[13:13] && (teilung[3:0]==14))||
17
(z[14:14] && (teilung[3:0]==15));
18
19
always @ (posedge clock)
20
begin
21
z <= z + 1;
22
end
23
24
endmodule
Prinzipiell funktioniert es. ISE meldet, dass 83,3MHz maximal möglich
sind.
Allerdings ist bei 50MHz eine so miserable Signalform, dass die
restliche Schaltung nicht mehr anständig läuft. Miserabel heißt, dass
das Signal grade noch 2V Amplitude hat (sollte ja eigentlich 5V sein).
Ist in dem Code etwas grob falsch oder unklug gemacht? Oder gibt es
vielleicht bessere Möglichkeiten einen Takt zu generieren? Da gibt es
doch sicher fertige Chips. Am besten natürlich solche die man bei
Reichelt/Farnell/... bestellen kann. Allerdings war meine Suche da
bisher erfolgslos.
Viele Grüße,
Christian
P.S. Ein Teil der Elektronik die ich mit dem Takt Versorge läuft mit 5V.
Also diesen Pegel muss auch der Takt haben.
Schau mal in die Application Notes von Xilinx. Die XC95xx können keine
5V CMOS Pegel erzeugen, da die Ausgänge intern aus 2 N Kanal Fets
bestehen, und so nur etwa 3,5V high Pegel liefern.
Ich hatte auch schon einge Probleme mit den Signalen. Ich verwende daher
in letzter Zeit entweder die günstigeren XC9536XL mit 3,3V die dieses
Problem nicht haben, oder ich schalte einen 74HCT245 hinter die Ausgänge
um saubere 5V Pegel zu erzeugen.
Hoppla sehe grade, dass ich im falschen Forum gelandet bin.
Danke für den Tipp. Werde ich mal versuchen. Allerdings steht bei dem
Modell bei Reichelt was von Propagation delay 13 ns (typ) 22 ns (max).
Ist das nicht etwas viel? Die Output Transition Time ist mit 7 (12) ns
angegeben, was mir bei 50MHz fast auch schon was viel scheint...
Am Takt hängt auch ein ADC der laut Datenblatt ein sehr sauberes
Taktsignal braucht.
Wenn ich einen XC9500XL nehmen würde hätte ich ja auch immernoch das
Problem, dass ich eigentlich 5V Pegel brauche.
Vom Takt habe ich ein Foto angehängt. Sieht einfach nur grausig aus. Die
Leitung über die der Takt noch läuft ist ca 15 cm lang.
P.S. Das gelbe (untere) Signal ist der Takt.
Was meinst Du mit richtig zugeordnet? Ob ich am CPLD den richtigen Pin
als Ausgang definiert habe und den dann auch verwende? Bin eigentlich
ziemlich sicher, kann es aber mal prüfen.
Christian Honisch wrote:
> Wenn ich einen XC9500XL nehmen würde hätte ich ja auch immernoch das> Problem, dass ich eigentlich 5V Pegel brauche.
Jain. Die Ausgangsspannungen des XL und des nicht XL sind nicht weit
auseinander. Wenn du wirklich 5V Pegel brauchst, musst du auch beim 9536
einen Puffer dahinter schalten.
> Die Leitung über die der Takt noch läuft ist ca 15 cm lang.
Ich hatte mit einem XC95144 mal ein TFT angesteuert. Der wollte auch
nicht, wenn das Kabel länger als 10cm war. Am Ende habe ich ein HC245
dazwischen gehängt, und jetzt sieht auch mit >20cm das Signal noch gut
aus.
Meiner Erfahrung nach sind die XC95xx CPLDs das schlimmste um Leitungen
zu treiben: Die verursachen Überschwinger und schlimmeres.
Kann es sein, dass dein Tastkopf das Signal stark dämpft, und das du
Mist misst ?
@Dirk:
Xilinx selbst sagt: Nimm nie (NIE!) einen Takt aus dem FPGA um damit
einen ADC zu betreiben. Verwende dafür eine eigene Taktquelle
(Qaurzoszillator) und führe die mit zum FPGA. Der Jitter des vom FPGA
erzeugten Signals versaut Dir wohl die gesampelten Werte.
Rick
Bei den XC95xx-ern lassen sich die Makrozellen zwischen LOW-Power und
Standard umschalten. Entweder im ucf-File oder für alle als Option beim
Fitter. Für schnellere Sachen ist der LOW-Power Mode nur bei
ausschliesslich intern genutzten Makrozellen sinnvoll. Und selbst im
Standard Mode ist die Highside mit gemessenen ca. 3,45V und 90Ohm
Innenwiderstand nicht imstande, größere Lasten (insbesondere kapazitive)
zu treiben.
Da aber die Lowside wesentlich kräftiger ausgelegt ist (ca. 10 Ohm
Innenwiderstand), kann man sich oft mit einem relativ niederohmigen
Pullup behelfen.
Gruß Jörg
Also mit den Pins stimmt alles, das habe ich überprüft.
@Benedikt:
Was das für ein Tasktopf war weiß ich leider nicht mehr. Gemessen habe
ich das Signal in der Uni. Das war auch nur was einmaliges. Ich kann den
Doktoranden, der mir geholfen hat mal fragen, ob er noch weiß welcher
Tasktopf das war. Dürfte aber nächste Woche werden. Er hat auch gesagt,
dass er dem Taskopf nicht ganz traut. Wir haben und irgendwann einen
anderen geholt, ich weiß aber nicht mehr ob ich das Foto vorher oder
nachher gemacht habe. Was sieht danach auch als ob der Taskopf dämpft?
Warum eigentlich einen HC245? Reicht nicht ein einfacher Buffer? Oder
ist der HC245 ein Standartbaustein, wenn es um sowas geht?
Noch offen bleibt meine Frage, ob ich das Modell von Reichelt nehmen
kann. 7ns Anstiegszeit scheinen ziemlich viel.
Oder kann ich vielleicht einen HC245 nehmen den ich im Elektronikladen
um die Ecke bekomme? Ich kenne mich nicht so gut aus, aber ich denke mal
dass ältere Bausteine etwas schlechtere Daten haben. Und ich könnte mir
vorstellen, dass die da nicht grade die neuesten Modelle haben. Aber bei
50 cent kann ichs eigentlich mal ausprobieren...
@Rick:
und wie sieht es bei CPLDs aus? Erzeugen die auch so viel Jitter? Auf
dem Oszilloskop sieht es ja schon so aus... Was kann man sonst nehmen?
Normale Teiler? obwohl ich mir bei denen auch vorstellen könnte, dass
das Ausgangssignal deutlichen Jitter hat. Was sagst du dazu? Wenn der
CPLD jittert ist das ja wirklich ein Problem. Dann werde ich einen
völlig anderen weg gehen müssen, ich habe aber keine Idee welchen.
@Jörg:
Ich denke die Zellen sind alle im Standardmodus. Aber das werde ich auch
mal überprüfen. Was heißt niederohmig? Vielleicht so 100 Ohm?
Irgend wie ist das Spielzeug, moeglicherweise die falsche Familie. Ich
hatte mal einen Altera ACEX als Taktgenerator fuer externe Elektronik.
Zum Einen waren die Flanken mit 450ps sehr steil, zum anderen war der
Jitter mit einem 1GHz Scope nicht messbar.
Christian Honisch wrote:
> Also mit den Pins stimmt alles, das habe ich überprüft.>> Was sieht danach auch als ob der Taskopf dämpft?
Das Signal ist gedämpft und rund, genauso wie es hinter einem RC
Tiefpass aussehen würde. Wenn du den Tastkopf gefunden hast, kannst du
dessen Werte ermitteln (meist aufgedruckt) und das ganze simulieren.
Wenn das Tastkopf auf 1:1 Teilung stand, dann hast du totalen Mist
gemessen, bei 10:1 kommt es auf den Tastkopf an, aber ich vermute stark
das dieser die Fehlerursache ist.
> Warum eigentlich einen HC245? Reicht nicht ein einfacher Buffer? Oder> ist der HC245 ein Standartbaustein, wenn es um sowas geht?
HC245 ist so ziemlich Standard. Ein HC244 würde auch funktionieren, oder
zwei HC14 oder HC04 oder oder oder. Es gibt viele Puffer. Bei 50MHz
könnte man auch zu AC/AHC/VHC Bauteilen greifen, aber diese erzeugen
meist ein starkes Überschwingen wenn sie nicht terminiert sind, vor
allem wenn 15cm Leitung dazwischen sind. Die HC Reihe macht fast nie
solche Probleme, aber 50MHz sind bei denen an der Grenze.
> und wie sieht es bei CPLDs aus? Erzeugen die auch so viel Jitter? Auf> dem Oszilloskop sieht es ja schon so aus... Was kann man sonst nehmen?> Normale Teiler? obwohl ich mir bei denen auch vorstellen könnte, dass> das Ausgangssignal deutlichen Jitter hat. Was sagst du dazu? Wenn der> CPLD jittert ist das ja wirklich ein Problem. Dann werde ich einen> völlig anderen weg gehen müssen, ich habe aber keine Idee welchen.
Soviel Jitter erzeugen die CPLD's nun auch wieder nicht.
Das wes Du am Oszi siehst hat mit Jitter erst einmal gar nichts zu tun,
du sollstest aber das Ausgangssignal nochmals abtakten. Ein
kombinatorisches Signal als Takt zu verwenden ist mehr als schlecht.
In deiner Leiterplatte oder in der Messung ist irgendwo der Hund
drinnen.
Ein Signal mit 15 cm Leitungslänge schaut zwar nicht mehr so schön aus,
aber ein CPLD wie das 9536 schafft das immer noch besser aus einer der
vorgeschlagenen HC Buffer,
Man kann beim XC9500 CPLD die SLEW-Rate am Pin einstellen. Schau einmal
nach ob diese wirklich auf FAST (nicht SLOW) gesetzt ist.
Klaus
slew rate steht auf fast, alle Makrozellen sind im High Power Mode.
Dann werde ich heute mal einen HC245 kaufen gehen. Wäre ein 74F245 nicht
eigentlich besser? Sollte es SMD sein, oder reicht zum Testen auch
konventionell?
Ich denke nicht dass die Messung so extrem falsch war. Wie gesagt, bei
hohen Frequenzen funktioniert die Schaltung nicht mehr zuverlässig.
Lässt man den CPLD weg und geht mit den 50MHz aus dem Quarzoszillator
direkt an die Schaltung sieht alles besser aus.
Bis 330 Ohm kann man ohne Probleme runtergehen, erhöht natürlich die
Stromaufnahme der Schaltung. Wenn es mehr auf saubere Flanken als auf
Frequenz ankommt, ist es besser den Ausgang zwischen LOW und Tristate
umzuzuschalten.
Gruß Jörg
@ Christian Honisch (cavorca)
>Für mein Projekt muss ich flexibel Takt erzeugen können. Ich habe einen>50MHz Quarzoszillator und will einen XC9536 verwenden.
So weit, so gut!
>Prinzipiell funktioniert es. ISE meldet, dass 83,3MHz maximal möglich>sind.>Allerdings ist bei 50MHz eine so miserable Signalform, dass die
Nun, du hast auch einen Taktteiler der üblen, alten Sorte programmiert.
Der hat einen kombinatorischen Ausgng und macht schön Glitches. AUA!
Du MUSST den AUSGANG direkt per FlipFlop erzeugen, dann ist er sauber
und glitchfrei.
>Ist in dem Code etwas grob falsch oder unklug gemacht? Oder gibt es
Ja, kombinatoricher Takt ist böse böse!
>P.S. Ein Teil der Elektronik die ich mit dem Takt Versorge läuft mit 5V.>Also diesen Pegel muss auch der Takt haben.
Die meisten 5V ICs haben TTL-Schaltschwellen (1,4V) und lassen sich
prima mit 3,3V ansteuern.
Und einen echten 5V 50 MHz Takt zu erzeugen ist schon nicht ganz ohne!!
Rechne mal die Flankensteilheiten aus.
>Ist das nicht etwas viel? Die Output Transition Time ist mit 7 (12) ns>angegeben, was mir bei 50MHz fast auch schon was viel scheint...
Ja, das wird eng.
>Am Takt hängt auch ein ADC der laut Datenblatt ein sehr sauberes>Taktsignal braucht.
Das brauchen sie alle.
>Wenn ich einen XC9500XL nehmen würde hätte ich ja auch immernoch das>Problem, dass ich eigentlich 5V Pegel brauche.
Nein, siehe oben.
>Leitung über die der Takt noch läuft ist ca 15 cm lang.
Und hat wahrscheinlich keine Serienterminierung. Wie misst du? Mit
welchem Oszi, welcher Tastkopf, welche Masseanbindung. 50 MHz ist kein
Kindergeburtstag mehr!
>P.S. Das gelbe (untere) Signal ist der Takt.
Bitte nicht 800kB für solche miesen Photos verplempern. Bei DER Qualität
kann man die JPG Kompression ruhig runterschrauben .
>Meiner Erfahrung nach sind die XC95xx CPLDs das schlimmste um Leitungen>zu treiben: Die verursachen Überschwinger und schlimmeres.
Schon mal was von Terminierung gehört? Auch die "alten" 9500 (ohne XL)
sind VERDAMMT schnell. Da is nix mehr mit Klingeldrahtverhau. Das
braucht halbwegs ordentliche Leitungen + ggf. Terminierung.
>Kann es sein, dass dein Tastkopf das Signal stark dämpft, und das du>Mist misst ?
Sieht für mich auch so aus.
An den OP. Du brauchst auf JEDEN Fall einen 1:10 Tastkopf mit mind. 200
MHz Bandbreite. Sonst wird das nix. Ausserdem, was für ein TEK ist es
den? Du braucht zu dieser Messung mind. 150 MHz++ Bandbreite.
>Ich plane Spartan 3 einzusetzen. Sind dort auch solche Treiberprobleme>zu erwarten?
Das "PROBLEM" sind die Leute, die unzureichende HF-Kenntnisse besitzen.
Aber das kann man ändern.
>Xilinx selbst sagt: Nimm nie (NIE!) einen Takt aus dem FPGA um damit>einen ADC zu betreiben. Verwende dafür eine eigene Taktquelle>(Qaurzoszillator) und führe die mit zum FPGA. Der Jitter des vom FPGA>erzeugten Signals versaut Dir wohl die gesampelten Werte.
Alles relativ. Das gilt für sehr schnelle ADCs, 100 MHz++. In diesem
Fall sollte es schon möglich sein.
>Standard Mode ist die Highside mit gemessenen ca. 3,45V und 90Ohm>Innenwiderstand nicht imstande, größere Lasten (insbesondere kapazitive)>zu treiben.>Da aber die Lowside wesentlich kräftiger ausgelegt ist (ca. 10 Ohm>Innenwiderstand), kann man sich oft mit einem relativ niederohmigen>Pullup behelfen.
Uups. Die Unterschiede sind SOOO gross? Na das wird nicht so einfach mit
solider Terminierung.
>nachher gemacht habe. Was sieht danach auch als ob der Taskopf dämpft?
Das Signal ist schon fast ein Sägezahn/Dreieick. Klares Zeichen für zu
geringe Bandbreite (Oszi + Tastkopf)
>Warum eigentlich einen HC245? Reicht nicht ein einfacher Buffer? Oder
Ja, das reicht auch. 74HC04.
>und wie sieht es bei CPLDs aus? Erzeugen die auch so viel Jitter? Auf
Nicht ganz.
>dem Oszilloskop sieht es ja schon so aus... Was kann man sonst nehmen?
??? Weisst du übrhaupt, was Jitter ist? Dein Oszi zeigt keinen an.
>@Jörg:>Ich denke die Zellen sind alle im Standardmodus. Aber das werde ich auch>mal überprüfen. Was heißt niederohmig? Vielleicht so 100 Ohm?
NEIN! Schon mal ausgerechnet was dann bei LOW für Ströme fliessen?
>Zum Einen waren die Flanken mit 450ps sehr steil, zum anderen war der
Meine Rede!
>Jitter mit einem 1GHz Scope nicht messbar.
Interessant.
MFG
Falk
Hallo Jörg,
Ich glaube ich verstehe nicht ganz. Wann ist es sinvoll den externen
Pull-Up Wiederstand zu verwenden? Wenn man zwischen Tristate und 0
umschaltet oder sonst auch?
>Wenn es mehr auf saubere Flanken als auf Frequenz ankommt, ist es besser den >Ausgang zwischen LOW und Tristate umzuzuschalten.
D.h.? Bis zu welcher Frequenz kann man das machen? Der Pull up hier
sollte auch minimal 330Ohm sein?
@Klaus:
Dann muss ich aber auf 100MHz als Taktversorgung für den CPLD. Oder gibt
es eine andere Möglichkeit? Sonst müsste ich ja einen always @ posedge
clock und einen always @ negedge clock block einbauen. Ist sowas denn
synthetisierbar?
@Falk:
> Nun, du hast auch einen Taktteiler der üblen, alten Sorte programmiert.
Es heißt immer überall man soll googlen bevor man fragt. Sowas kann
dabei rauskommen ;-) Was gibt es denn noch für Möglichkeiten?
> Der hat einen kombinatorischen Ausgng und macht schön Glitches. AUA!
Ich hätte gedacht Glichtes entstehen in so einem Fall nur, wenn ich
Zwischen 2 Taktfrequenzen umschalte. In der Zeit in der Ich den Takt
verwende wird er aber nicht umgeschaltet. Alle Signale sind konstant bis
auf den Takt Vor und nach dem Umschalten ist lange Zeit, also us
vielleicht sogar ms.
> Du MUSST den AUSGANG direkt per FlipFlop erzeugen, dann ist er sauber> und glitchfrei.
Trotz dem was ich oben geschrieben habe?
> Die meisten 5V ICs haben TTL-Schaltschwellen (1,4V) und lassen sich> prima mit 3,3V ansteuern.
Datenblatt sagt LOW 1V, High 2,4V. Ist da genug Luft?
> Und hat wahrscheinlich keine Serienterminierung. Wie misst du? Mit> welchem Oszi, welcher Tastkopf, welche Masseanbindung. 50 MHz ist kein> Kindergeburtstag mehr!
Nein hat keine Terminierung. In einem EMV Buch habe ich gelesen ab
welchem Verhältnis von Anstiegszeit zu Laufzeit man sich um sowas
Gedanken machen muss. Mit der Formel aus dem Buch habe ich mir
ausgerechnet, dass es wohl ab 20cm ein Thema ist.
Zum einen sind die 15cm etwas groszügig geschätzt, zum anderen ist das
jetzt nur ein Testaufbau. In der fertigen Platine wird die Leitung wohl
höchstens 5 cm haben. Brauche ich trotzdem eine Terminierung?
Bandbreite war meine ich 150MHz. Tastkopf weiß ich nicht. Kann ich aber
fragen.
> Bitte nicht 800kB für solche miesen Photos verplempern. Bei DER Qualität> kann man die JPG Kompression ruhig runterschrauben .
Ich hatte überlegt die entscheidenden Teile aus dem Foto raus zu
schneiden und es so übersichtlicher zu machen. Aber dass sich heute noch
jemand um 500kB mehr oder weniger schert hätte ich nicht gedacht...
Nächstes mal mach ichs kleiner ;-)
> Das "PROBLEM" sind die Leute, die unzureichende HF-Kenntnisse besitzen.
Ich weiß, dass ich da bestenfalls Grundkenntnisse habe und was viel
schlimmer ist manche Dinge einfach nicht bedenke weil mir die Erfahrung
fehlt. Aber man lernt halt nur mit neunen Herausforderungen.
> Aber das kann man ändern.
Deshalb stelle ich hier fragen und hoffe kompetente Antworten zu
bekommen. Auch das beste Buch kann sowas meiner Meinung nach nicht
ersetzen.
> Das Signal ist schon fast ein Sägezahn/Dreieick. Klares Zeichen für zu> geringe Bandbreite (Oszi + Tastkopf)
Ok.
>>dem Oszilloskop sieht es ja schon so aus... Was kann man sonst nehmen?>> ??? Weisst du übrhaupt, was Jitter ist? Dein Oszi zeigt keinen an.
Wenn ein Takt jittert würde ich sagen heißt dass das die Flanke mal ein
bisschen früher kommt, mal ein bisschen später. Soweit richtig?
Natürlich kann man das nicht präzise auf dem Oszi sehen, aber was man
sehen kann ist dass die "Flanke" (wenn man es noch so nennen kann) jedes
mal etwas anders aussieht. Ich hätte jetzt gedacht, dass man aus so
einem Bild rückschließen kann, dass dann auch der Pegel ab dem das
Signal faktisch für den ADC als High gilt mal was früher ist, mal was
später. Aber wenn die Messung ohnehin jenseits der Bandbreite liegt ist
das wohl nicht mehr so aussagekräftig. Oder könnte man aus einem
verrauschten oder anders verschlechterten Takt sowas nicht folgern?
> NEIN! Schon mal ausgerechnet was dann bei LOW für Ströme fliessen?
Ja, ist mir heute morgen auch aufgefallen. Ich hätte jetzt mal 1k
versucht.
Viele Grüße,
Christian
@ Christian Honisch (cavorca)
>es eine andere Möglichkeit? Sonst müsste ich ja einen always @ posedge>clock und einen always @ negedge clock block einbauen. Ist sowas denn>synthetisierbar?
In getrennten Blöcken schon.
>> Der hat einen kombinatorischen Ausgng und macht schön Glitches. AUA!>Ich hätte gedacht Glichtes entstehen in so einem Fall nur, wenn ich>Zwischen 2 Taktfrequenzen umschalte. In der Zeit in der Ich den Takt
Nein, fast jeder kombinatorische Dekoder erzeugt Glitches.
>> Du MUSST den AUSGANG direkt per FlipFlop erzeugen, dann ist er sauber>> und glitchfrei.>Trotz dem was ich oben geschrieben habe?
Ja. Siehe hier
http://www.geocities.com/jacquesmartini/digital/glitch/glitch.html>Datenblatt sagt LOW 1V, High 2,4V. Ist da genug Luft?
Ja. Die XL Ziehen bis fast 3.3V, das reicht locker. Ein echter 5V
TTL-Auusgang schafft auch nur ~3.8V bei HIGH.
>Zum einen sind die 15cm etwas groszügig geschätzt, zum anderen ist das>jetzt nur ein Testaufbau. In der fertigen Platine wird die Leitung wohl>höchstens 5 cm haben. Brauche ich trotzdem eine Terminierung?
Erstmal musst du richtig messen.
>jemand um 500kB mehr oder weniger schert hätte ich nicht gedacht...
Es wird schon genug Datenmüll erzeugt. Das muss man auch im
DSL-Zeitalter nicht noch vorantreiben.
>fehlt. Aber man lernt halt nur mit neunen Herausforderungen.
Genau.
>bekommen. Auch das beste Buch kann sowas meiner Meinung nach nicht>ersetzen.
Aber es gibt schon einige sehr gute Bücher.
<Schleichwerbung>
www.signalintegrity.com
</Schleichwerbung>
>> ??? Weisst du übrhaupt, was Jitter ist? Dein Oszi zeigt keinen an.>Wenn ein Takt jittert würde ich sagen heißt dass das die Flanke mal ein>bisschen früher kommt, mal ein bisschen später. Soweit richtig?
Ja.
>Natürlich kann man das nicht präzise auf dem Oszi sehen, aber was man>sehen kann ist dass die "Flanke" (wenn man es noch so nennen kann) jedes>mal etwas anders aussieht. Ich hätte jetzt gedacht, dass man aus so
Aber deine Flanken sehen doch alle gleich aus (gelbes Signal).
>einem Bild rückschließen kann, dass dann auch der Pegel ab dem das>Signal faktisch für den ADC als High gilt mal was früher ist, mal was>später. Aber wenn die Messung ohnehin jenseits der Bandbreite liegt ist>das wohl nicht mehr so aussagekräftig. Oder könnte man aus einem
Eben.
>verrauschten oder anders verschlechterten Takt sowas nicht folgern?
Doch.
>> NEIN! Schon mal ausgerechnet was dann bei LOW für Ströme fliessen?>Ja, ist mir heute morgen auch aufgefallen. Ich hätte jetzt mal 1k>versucht.
Bringt auch wenig. Alles was nicht in der Grössenordnung des
Leitungswiderstandes liegt (50..100Ohm)ist entweder viel zu hochohmig
oder zu niedrderohmig. Wenn die Ausgänge wirklich so dermassen
asymetrisch aufgebaut sind, tja, da fällt mir spontan keine Lösung ein.
Oder einfach ein XL Typen nehmen, die sind billiger und schneller.
Mfg
Falk
Falk wrote:
>> Erstmal musst du richtig messen.>
d.H.? besserer Tastkopf/Oszi/mehr Bandbreite? Oder stimmt noch was
anderes nicht?
> Aber deine Flanken sehen doch alle gleich aus (gelbes Signal).
Finde ich hängt davon ab wie genau man hinsieht. Aber wenn man das noch
gleich nennen kann ist das ja ok.
>>Ja, ist mir heute morgen auch aufgefallen. Ich hätte jetzt mal 1k>>versucht.>> Bringt auch wenig. Alles was nicht in der Grössenordnung des> Leitungswiderstandes liegt (50..100Ohm)ist entweder viel zu hochohmig> oder zu niedrderohmig.
hm.
>Wenn die Ausgänge wirklich so dermassen> asymetrisch aufgebaut sind, tja, da fällt mir spontan keine Lösung ein.> Oder einfach ein XL Typen nehmen, die sind billiger und schneller.
Gibt es denn nicht eigentlich auch fertige Schaltungen, die mir einen
Takt erzeugen? Muss flexibel sein, also 50MHz...10kHz aber sowas gibts
doch sicher schon. Man muss ja nicht jedes mal das Rad neu erfinden...
@Falk
zumindest bei den XC9536 die ich hier so rumliegen hatte, ist das so.
Darauf gekommen bin ich, als ich versucht hatte einen R2R DAC an die
Ausgänge anzuschliessen...
Nach einigen (statischen) Messungen bin ich dann auf diese recht
seltsamen Werte gekommen.
@Christian
Benutzt habe ich es nur bei einem Projekt: Einen AD9201 (20Msps ADC)
über nen Teiler im CPLD aus 40MHz Systemtakt versorgen. Ohne Pullup gab
es manchmal Aussetzer (Wandlungen wurden ausgelassen), mit 470 Ohm ging
es dann ohne Probleme.
Gruß Jörg
@ Christian Honisch (cavorca)
>> Erstmal musst du richtig messen.>d.H.? besserer Tastkopf/Oszi/mehr Bandbreite?
Ja.
> Oder stimmt noch was anderes nicht?
KEine Ahnung. Auf jeden Fall ein direkte Masseanbindung des Taskopfes.
NICHT diesen Mäuseschwanz mit Krokodilklemme verwenden.
>Gibt es denn nicht eigentlich auch fertige Schaltungen, die mir einen>Takt erzeugen? Muss flexibel sein, also 50MHz...10kHz aber sowas gibts
Wie flexibel? Welche Abstufungen brauchst du denn? Wenn es reicht durch
2/4/8/16 etc. zu teilen tut es jeder beliebige Zähler, egal ob synchron
oder Ripple-Counter. Als 1:N Teiler (N = 3..255) gibt es den 74HC40103.
Allerdings schaft der max. 32 MHz.
MfG
Falk
Wie misst man Jitter ? Man triggert auf eine saubere Flanke, und
verzoegert das angezeigte maximal, zB mit einem Delaytrigger, B-trace
oder so. Und dann zoomt man. Ein Jitter wird so sichtbar als horizontale
Unschaerfe der Flanke. Beim ACEX konnte ich den Jitter so mit einem 1GHz
Scope nicht mehr messen.
>>Wenn ich einen XC9500XL nehmen würde hätte ich ja auch immernoch das>>Problem, dass ich eigentlich 5V Pegel brauche.>Nein, siehe oben.
Warum wiederholst du das dann? Vielleicht nur zur Info, du mußt bei
einer Antwort nicht auf jede Frage des Ausgangspostings eingehen. Wenn
die bereits richtig beantwortet wurden, darfst du auch gerne mal
schweigen.
Kann natürlich auch sein, dass ich was nicht mitgekriegt habe. Muß jede
Antwort neuerdings von dir bestätigt werden? Kläre mich auf, will ja
kein Fehler machen.
@ hackklotz (Gast)
>>>Wenn ich einen XC9500XL nehmen würde hätte ich ja auch immernoch das>>>Problem, dass ich eigentlich 5V Pegel brauche.>>Nein, siehe oben.>Warum wiederholst du das dann? Vielleicht nur zur Info, du mußt bei>einer Antwort nicht auf jede Frage des Ausgangspostings eingehen. Wenn>die bereits richtig beantwortet wurden, darfst du auch gerne mal>schweigen.
ICH habe mich nur wiederholt, weil der OP trotz mehrfacher Postings zum
Thema immer noch die Frage gestellt hat, woraus ich schliesse, dass er
es noch nicht (sicher) verstanden hat. Und meine Antwort war ja wohl
nicht seitenfüllend.
>Kann natürlich auch sein, dass ich was nicht mitgekriegt habe. Muß jede>Antwort neuerdings von dir bestätigt werden? Kläre mich auf, will ja
Kaum. Und ich bin ja wohl kaum der einzige, der ggf. Antworten gibt, die
andere schon gegeben haben. Schau dir mal die diversen Threads an.
MFG
Falk
Ohje, habe ich wirklich so oft das Gleiche gefragt? Naja... passiert mir
schon mal... höre ich auch mal von anderen Leuten :-(
@Jörg:
Ok. Werde ich mal versuchen. Bei mir ist ehr das Problem dass der ADC 0
und 255 Produziert, wo sie definitiv nicht hingehören, oder dass
einzelne Bits manchmal invertiert sind.
Update: Ein Pull-Up-Widerstand bringt keine Verbesserung.
@Falk:
Bisher habe ich ja auch nur. /2 /4 /8 ... wenn man noch /5 bzw /10 hätte
wäre das besser. Dafür gibt es zwar auch Zähler, allerdings brauche ich
dann ja auch wieder kombinatorik um die passende Teilung auszuwählen.
Kann man da Video-Switches nehmen?
Eine ein-chip-Lösung wäre mir allerdings auch etwas lieber.
Ich bin die Seite über Glitches mal durchgegangen:
>The only reliable ways to avoid a glitch are>* change just one input at a time (gray code)>* use a FlipFlop at the decoder output to sample (register) the signal
Zuerst dachte ich, dass ich ja eigentlich den ersten Weg gehe, aber da
im Design ein Zähler ist stimmt das nicht. Richtig?
Ich war einen 74F04 kaufen und habe ihn getestet. Bringt keine
Verbesserung. Eigentlich sogar ehr eine Verschlechterung, wenn ich ihn
zwischen Quarzoszillator und rest Schalte (XC9536 draußen).
Was würdet ihr für eine weitere Vorgehensweise vorschlagen?
-Code ändern, dass Takterzeugung nicht mehr kombinatorisch ist
-wenn das nichts hilft xc9500xl verwenden
-wenn das nichts hilft ... ??
Wenn ich nochmal neue Bauteile kaufen müsste wären keine 5V CPLDs dabei.
Was ich jetzt zum Experimentieren habe sind die 2 CPLDs die ich gekauft
habe als ich mit CPLDs angefangen habe. Der eine xl den ich habe ist
fester Bestandteil der restlichen Schaltung.
Viele Grüße
Christian
@ Christian Honisch (cavorca)
>Ok. Werde ich mal versuchen. Bei mir ist ehr das Problem dass der ADC 0>und 255 Produziert, wo sie definitiv nicht hingehören, oder dass>einzelne Bits manchmal invertiert sind.
Klingt eher nach einem Problem am Datenbus. Setup-und Holdzeiten OK?
Wobei du das mit DEM Aufbau nicht messen kannst.
>dann ja auch wieder kombinatorik um die passende Teilung auszuwählen.>Kann man da Video-Switches nehmen?
Wozu DAS? Es gibt wunderbar schnelle Digitalmultiplexer.
>Eine ein-chip-Lösung wäre mir allerdings auch etwas lieber.
Dann nimm den 9572XL.
>im Design ein Zähler ist stimmt das nicht. Richtig?
Der Zähler ist OK, aber dein Takt komm direkt aus einem Dekoder.
Schlecht.
>Ich war einen 74F04 kaufen und habe ihn getestet. Bringt keine>Verbesserung. Eigentlich sogar ehr eine Verschlechterung, wenn ich ihn>zwischen Quarzoszillator und rest Schalte (XC9536 draußen).
Du bewegst dich im Blindflug. Schaff erstmal einen ordentlichen
Messaufbau, mach ne Messsung (und hoffentlich einen etwas bessern
Screenshot) und dann reden wir weiter.
>Was würdet ihr für eine weitere Vorgehensweise vorschlagen?>-Code ändern, dass Takterzeugung nicht mehr kombinatorisch ist
Auf jeden Fall.
>-wenn das nichts hilft xc9500xl verwenden
Möglich, eine ordentliche Messung hilft hier ungemein.
>-wenn das nichts hilft ... ??
Schau mer mal.
>Wenn ich nochmal neue Bauteile kaufen müsste wären keine 5V CPLDs dabei.
5V ist ja auch nicht mehr so aktuell. Und 5V Designs mit 50 MHz waren
auch damals (tm) selten.
MfG
Falk
Falk wrote:
> @ Christian Honisch (cavorca)>>>Ok. Werde ich mal versuchen. Bei mir ist ehr das Problem dass der ADC 0>>und 255 Produziert, wo sie definitiv nicht hingehören, oder dass>>einzelne Bits manchmal invertiert sind.>> Klingt eher nach einem Problem am Datenbus. Setup-und Holdzeiten OK?> Wobei du das mit DEM Aufbau nicht messen kannst.>
Folgende Beobachtung spricht meiner Meinung dafür, dass der Takt die
größte Problemquelle ist:
Schließt man direkt den Quarzoszillator an die Schaltung an hat man sehr
wenige solcher Fehler. Unter 100k Samples 3 bis 7. Das ist nicht ideal,
wäre aber noch zu ertragen.
Schaltet man allerdings den CPLD als Taktgenerator dazwischen werden die
Fehler sehr häufig. Dann hat man schon nach 1k Samples 7 bis 9. Ich habe
mir das ganze auch sehr oft angesehen um ausschließen zu können, dass es
nur Zufall war.
Und der CPLD hat ja nichts mit dem Datenbus zu tun.
>>dann ja auch wieder kombinatorik um die passende Teilung auszuwählen.>>Kann man da Video-Switches nehmen?>> Wozu DAS? Es gibt wunderbar schnelle Digitalmultiplexer.
ok
> Du bewegst dich im Blindflug. Schaff erstmal einen ordentlichen
Ich weiß. Vielleicht sollte ich dazu was erklären. Die Bastelei mache
ich als Hobby und auch noch nicht so lange, dass ich teure Geräte
gekauft habe. Ich war schon sehr froh, dass es sich ergeben hat, dass
ich an der Uni mal was messen konnte. Wann ich das nächste mal
Gelegenheit dazu habe kann ich nicht sagen. Mich Ärgert es ja selbst,
dass ich so wenig über die Schaltung weiß.
> Messaufbau, mach ne Messsung (und hoffentlich einen etwas bessern> Screenshot) und dann reden wir weiter.>>Was würdet ihr für eine weitere Vorgehensweise vorschlagen?>>-Code ändern, dass Takterzeugung nicht mehr kombinatorisch ist>> Auf jeden Fall.>
ok. bin dabei. den fehler in dem code oben habe ich auch schon
gefunden...
> Möglich, eine ordentliche Messung hilft hier ungemein.
Wie gesagt, wenn ich Gelegenheit hätte hätte ich längst gemessen.
> 5V ist ja auch nicht mehr so aktuell.
Ich hatte mich vorher in Mikrocontroller eingearbeitet. Da waren die
meisten beispiele auf 5V. Die CPLDs auch als 5V Variante zu nehmen war
wohl so eine Art Gewohnheit.
@ Christian Honisch (cavorca)
>Schließt man direkt den Quarzoszillator an die Schaltung an hat man sehr>wenige solcher Fehler. Unter 100k Samples 3 bis 7. Das ist nicht ideal,>wäre aber noch zu ertragen.
Nein, wäre es nicht! Es ist ein klares Zeichen dafür, dass was faul ist.
Wo kommen wir denn hin wenn wir in DIGITALER Hardware SOLCHE
Fehlertoleranzen zulassen würden?
>Schaltet man allerdings den CPLD als Taktgenerator dazwischen werden die>Fehler sehr häufig. Dann hat man schon nach 1k Samples 7 bis 9. Ich habe
??
Also für micht ist der Uterschied zwischen 3..7 und 7..9 nicht sehr
gross, aber in absoluten Zahlen sind BEIDE zu gross. Das Problem muss
GRUNDLEGEND behoben werden.
>ok. bin dabei. den fehler in dem code oben habe ich auch schon>gefunden...
Und wie sieht dein Sourcecode jetzt aus?
>Wie gesagt, wenn ich Gelegenheit hätte hätte ich längst gemessen.
Wie sieht dein Aufbau überhaupt aus? Wildes Klingeldrahtverhau auf
Lochraster? Machmal ein ordenliches Bild und stells hier rein.
>Ich hatte mich vorher in Mikrocontroller eingearbeitet. Da waren die>meisten beispiele auf 5V. Die CPLDs auch als 5V Variante zu nehmen war>wohl so eine Art Gewohnheit.
Ist ja nicht schlimm. Aber wie gesagt, 50 MHz ist kein Pappenstil, auch
nicht im Zeitalter wo CPUs 3GHz Takt haben.
MFG
Falk
@ Bewerber (Gast)
>Die Frequenz spielt doch keine Rolle sondern nur die Anstiegszeit.
Richtig, sag ich auch immer wieder ;-)
Aber bei 50 Mhz = 20ns Periodendauer wird die Anstiegszeit wohl deutlich
unter 10ns zu finden sein, schätzungsweise 2..5ns. Und bei 2ns kommt es
bereits ab ca. 6cm Leitungslänge zu Reflexionen, bei Klingeldrahtverhau
schon bei kürzeren Leitungen.
MFG
Falk
> Nein, wäre es nicht! Es ist ein klares Zeichen dafür, dass was faul ist.> Wo kommen wir denn hin wenn wir in DIGITALER Hardware SOLCHE> Fehlertoleranzen zulassen würden?
Grundsätzlich stimme ich dir zu. Da das jetzt aber nur ein Testaufbau
mit katastrophaler EMV ist bin ich sowieso überrascht, dass es schon so
gut funktioniert.
>>Schaltet man allerdings den CPLD als Taktgenerator dazwischen werden die>>Fehler sehr häufig. Dann hat man schon nach 1k Samples 7 bis 9. Ich habe>> ??>> Also für micht ist der Uterschied zwischen 3..7 und 7..9 nicht sehr> gross, aber in absoluten Zahlen sind BEIDE zu gross. Das Problem muss> GRUNDLEGEND behoben werden.>
Achtung: 3..7 in 100k zu 7..9 in 1k das ist irgendwas zwischen 1:100
und 1:300. Das ist wie ich finde erstens ein großer unterschied und
zweitens ein deutlicher Hinweis, dass der CPLD irgendwas vermurkst.
Dass das Problem grundlegend behoben werden muss und dass es eigentlich
zu viel ist stimme ich dir 100% zu.
>>ok. bin dabei. den fehler in dem code oben habe ich auch schon>>gefunden...>> Und wie sieht dein Sourcecode jetzt aus?>
Wie gesagt, das ist für mich ein Hobby, dem ich in meiner "reichlich
bemessenen" Freiziet nachgehe. Will sagen: Habe da noch nichts dran
gemacht. kommt vermutlich heute nachmittag.
> Wie sieht dein Aufbau überhaupt aus? Wildes Klingeldrahtverhau auf> Lochraster? Machmal ein ordenliches Bild und stells hier rein.
Mischung aus SMD Platinen, wildem Klingeldrahtverhau und Steckplatinen.
Bevor du jetzt sagst klar bei Steckplatinen kann das ja gar nicht
ordentlich laufen nur die ruhe ;-) Alle Teile die mit der Takterzeugung
zu tun haben habe ich auch schon vor einiger Zeit von der Steckplatine
entfernt. Das brachte aber auch keine minimale Verbesserung.
Ich erwarte ein 100% perfektes Ergebnis auch gar nicht.
Mein ursprünglicher Plan war das ganze zuerst Stück für Stück aufzubauen
dann zu Testen und Bugs zu entfernen. Wenn ich damit fertig bin wollte
ich eine ordentliche SMD Platine mit 2 Layern machen.
Da es momentan allerdings wesentlich besser läuft, wenn ich den 50MHz
Oszillator direkt anschließe, als wenn ich alles mit kürzeren Drähten
direkt verlöte, muss ich folgern dass nor irgendwo etwas schief läuft,
dass nichts mit der mangelhaften EMV zu tun hat.
Eben wegen der schlechten EMV wäre ich auch noch mit 3..7 Fehlern in
102400 Samples zufrieden.
Ich denke es wäre das sinnvolste als erstes den code des taktcpld zu
optimieren. Dann schicke ich auch mal ein Foto.
Aber jetzt muss ich erst mal los.
Viele Grüße,
Christian.
@Falk
>...bei Klingeldrahtverhau schon bei kürzeren Leitungen.
Das wage ich zu bezweifeln, da bei einem frei liegendem Draht die
Ausbreitungsgeschwindigkeit fast doppelt so hoch ist wie auf einer
Leiterbahn. Und die geht ja bekanntlicherweise direkt in die kritische
Leitungslänge ein.
1
Medium c l(krit)
2
-----------------------------------------
3
Vakuum (ideal) 30cm/ns tr * 6cm/ns
4
FR4 (ca.) 15cm/ns tr * 3cm/ns
Das gilt jetzt natürlich nur für nicht abgeschlossene Leitungen.
Gruß Jörg
Die CPLDs und FPGAs, mit denen ich zu tun hatte, hatten alle
Anstiegszeiten um 1ns und drunter. Das erkennt man auch daran, dass die
moeglichen Taktraten je nach Design bei 200MHz und drueber liegen
koennen. Mit weniger als 2 lagigem Print muss man gar nicht anfangen. An
jedes Vcc Pin Paar kommt ein Cap oder zwei, alle Vcc sind mit einem Ring
verbunden, der Rest ist GND. Die Caps zwischen 100n, 10n, 1n. Das Layout
ist dann eher kompliziert.
@ Christian Honisch (cavorca)
>Achtung: 3..7 in 100k zu 7..9 in 1k das ist irgendwas zwischen 1:100>und 1:300. Das ist wie ich finde erstens ein großer unterschied und>zweitens ein deutlicher Hinweis, dass der CPLD irgendwas vermurkst.
Uuups, da hab ich wohl die Nullen übersehen. ;-)
>zu tun haben habe ich auch schon vor einiger Zeit von der Steckplatine>entfernt. Das brachte aber auch keine minimale Verbesserung.
Was ist bei dir eine Steckplatine? Steckbrett?
>Ich erwarte ein 100% perfektes Ergebnis auch gar nicht.>Mein ursprünglicher Plan war das ganze zuerst Stück für Stück aufzubauen>dann zu Testen und Bugs zu entfernen. Wenn ich damit fertig bin wollte
Schon OK, aber es bringt meistens immer nur haufenweise Stress, wenn man
"mal schnell" was zusammenschiesst. Das dauert dann am Ende dreimal
länger als wenn man es gleich ordentlich macht. Von dem Stress und den
grauen Haaren mal ganz zuschweigen . . . ;-)
Gilt für Profis gleichermassen wie für Hobybastler.
@ Joerg Wolfram (joergwolfram)
>>...bei Klingeldrahtverhau schon bei kürzeren Leitungen.>Das wage ich zu bezweifeln, da bei einem frei liegendem Draht die>Ausbreitungsgeschwindigkeit fast doppelt so hoch ist wie auf einer>Leiterbahn. Und die geht ja bekanntlicherweise direkt in die kritische>Leitungslänge ein.
Schon klar, aber schon mal über die Induktivität nachgedacht?
http://www.signalintegrity.com/Pubs/news/2_8.htm
@ nop(); (Gast)
>Die CPLDs und FPGAs, mit denen ich zu tun hatte, hatten alle>Anstiegszeiten um 1ns und drunter. Das erkennt man auch daran, dass die
Jep, die Dinger sind SAUSCHNELL, mehr als den meisten lieb ist. Deshalb
sollte man die SLEW Rate sowei wie möglich drosseln, bei Xilinx mit dem
SLOW Constraint.
>moeglichen Taktraten je nach Design bei 200MHz und drueber liegen>koennen. Mit weniger als 2 lagigem Print muss man gar nicht anfangen. An
Naja, definierte Wellenwiderstände bekommt man prinzipiell auch auf ner
einlagigen Platine hin. OK, das braucht dann etwas Platz ;-)
>jedes Vcc Pin Paar kommt ein Cap oder zwei, alle Vcc sind mit einem Ring>verbunden, der Rest ist GND. Die Caps zwischen 100n, 10n, 1n. Das Layout>ist dann eher kompliziert.
Naja, man muss nicht gleich den Teufel an die Wand malen. Ich hab auch
schon FPGAs und CPLDs auf zweilagige Platinen verfrachtet, die laufen
gut. Und das mit den Kaskaden aus 100n/10n/1n (ganz Besorgte platzieren
noch 100pF) ist teilweise übertrieben und grösstenteils historisch
bedingt. Bei 0603 und kleiner hat ein 100nF fast die gleiche parasitäre
Induktivität wie 1nF. Da bringt das 1nF nichts. (jaja, die
Resonanzfrequenz ist höher, aber schau dir mal den absoluten Widerstand
an).
MfG
Falk
@nop
also bei mir kann ein XC9572-15 eine Eingangsfrequenz von >200MHz
zählen,
es gibt keine SMD-Bauteile und die Platine ist einseitig, Hartpapier,
Layout selber gemacht und geätzt.
M.E. kann sog. 'ugly construction' manchmal besser gehen als was
hochgezüchtetes.
Allerdings: es geht nichts über gute Messgeräte, das ist die
Voraussetzung für den Erfolg dabei.
@ Mark (Gast)
>M.E. kann sog. 'ugly construction' manchmal besser gehen als was>hochgezüchtetes.
Naja, so weit würde ich nicht gehen wollen. Das ist eher die Ausnahme,
welche die Regel bestätigt. ;-)
McMurphy is watching you!
>Allerdings: es geht nichts über gute Messgeräte, das ist die
Wohl wahr!
MfG
Falk
@Bewerber:
>Was hast du eigentlich mit den unbenutzten Pins des CPLDs gemacht?
Sind denke ich durch ISE standartmäßig auf Masse gelegt. an manchen ist
noch ein Kabel dran. Das werde ich bei nächster Gelegenheit ablöten,
falls das sinvoll ist. Da aber nur Masse drauf liegt würde ich es nicht
für nötig halten.
@Jörg:
Kann man denn ein Kabel in der Beziehung wie Vakuum behandeln? Ich hätte
mit 2/3 c als Signalgeschwindigkeit gerechnet.
@Falk:
>Schon OK, aber es bringt meistens immer nur haufenweise Stress, wenn man>"mal schnell" was zusammenschiesst. Das dauert dann am Ende dreimal>länger als wenn man es gleich ordentlich macht. Von dem Stress und den>grauen Haaren mal ganz zuschweigen . . . ;-)>Gilt für Profis gleichermassen wie für Hobybastler.
Mein erstes großes wirklich eigenes Projekt war eine Uhr. Der Aufbau ist
auch zuerst auf einem Steckbrett entstanden. Das fand ich damals sehr
gut, da ich so wirklich einen Schritt nach dem anderen machen konnte.
Wenn ich einen Fehler gemacht hatte wusste ich immer direkt wo ich ihn
zu suchen hatte, da ich immer nur einen Schritt gemacht habe.
Wenn ich jetzt gleich eine ganze Platine entwerfen und bestücken würde,
wären mit Sicherheit mindestens 2-3 Fehler drauf, die sicher nicht ganz
einfach zu finden wären.
Es ist ja auch nicht so, dass alles nur Steckbrett ist. Ich habe immer
kleine "Module" entworfen, die dann bestückt und getestet. Wenn es lief
nächstes Modul. Das Steckbrett diehnt hauptsächlich zur Verbindung der
einzelnen Module und zur Stromversorgung. Wobei die Stromversorgung
teilweise auch über angelötete Kabel läuft, da die Bretter scheinbar
einiges an Spannungsabfall verursachen.
Als Student muss ich halt auch ein bisschen drauf achten wofür ich mein
Geld ausgebe. Jede Woche mal ne neue Platine is da nicht. Und Platinen
für VQ64 Steine selber zu Ätzen liegt einfach über meinen
Möglichkeiten/Fähigkeiten.
>Schon klar, aber schon mal über die Induktivität nachgedacht?
Das ist ein Punkt. Aber könnte man das nicht regeln indem man zur
Taktleitung ein Massekabel parallel "verlegt"?
>...Kaskaden aus 100n/10n/1n (ganz Besorgte platzieren>noch 100pF) ist teilweise übertrieben...
Ich habe auch mal gehört die Kombination 10µ 10n wäre das Mittel der
wahl. In meinem Aufbau habe ich nur 100µ 100n. Allerdings nicht nur SMD.
Zu diesem Thema existieren aber wahrscheinlich mehr Überzeugungen als
Religionen auf der Welt. Ich denke dafür sollte man auch besser einen
eingenen Thread aufmachen.
@ Christian Honisch (cavorca)
>Kann man denn ein Kabel in der Beziehung wie Vakuum behandeln? Ich hätte>mit 2/3 c als Signalgeschwindigkeit gerechnet.
Das passt eher.
>Wenn ich jetzt gleich eine ganze Platine entwerfen und bestücken würde,>wären mit Sicherheit mindestens 2-3 Fehler drauf, die sicher nicht ganz>einfach zu finden wären.
??? Fehler machen auch Profis. Und wieso sollte auf einer Pltine der
Fehler schwerer zu finden sein als in einem Knäul von Klingeldraht. Auch
richtig grosse Platinen werden Schritt für Schritt in Betrieb genommen,
und nicht alles auf einmal. Been there, done that.
>Als Student muss ich halt auch ein bisschen drauf achten wofür ich mein>Geld ausgebe. Jede Woche mal ne neue Platine is da nicht. Und Platinen
Sollst du ja auch gar nicht. Und gerade WEIL es schon etwas kostet, wird
man beim Aufbau/Layout sorgsam zu Wege gehen. Ausserdem, wer billig
kauft(baut) kauft meistens zweimal.
>für VQ64 Steine selber zu Ätzen liegt einfach über meinen>Möglichkeiten/Fähigkeiten.
Schon klar.
>Das ist ein Punkt. Aber könnte man das nicht regeln indem man zur>Taktleitung ein Massekabel parallel "verlegt"?
Ja. Nimm ein ordenlichs Kabel, entweder RG174 (dünnes Koax) oder ein
Päärchen aus nem CAT3/CAT5 Kabel, aber NICHT aufdröseln, die Adern
müssen verdrillt bleiben. Sowohl am Sender (Quarzoszillator/CPLD) als
auch Empfänger NAH am IC anlöten (<1cm).
>Ich habe auch mal gehört die Kombination 10µ 10n wäre das Mittel der>wahl. In meinem Aufbau habe ich nur 100µ 100n. Allerdings nicht nur SMD.
Passt, wenn die 100nF mit kurzen (<1cm) Drähten angelötet sind.
MFg
Falk
@Falk:
> ??? Fehler machen auch Profis. Und wieso sollte auf einer Pltine der> Fehler schwerer zu finden sein als in einem Knäul von Klingeldraht.
Beim Aufbauen kommen pro Schritt ja maximal 8 Kabel dazu. Ich finde da
kann man den durchblick behalten. Ok, bei wirklich großen Projekten
kommt man da an Grenzen.
Aber trotzdem, wenn man dann ausversehen beim designen irgendwas
vertauscht hat kommt man nicht drum herum verbindungen zu trennen und
Kabel anzulöten. Dass will ich mit meiner Taktik weitgehend vermeiden.
> Ausserdem, wer billig> kauft(baut) kauft meistens zweimal.
Daran manches zwei mal zu bauen ging für mich kaum ein weg vorbei. Z.B.
SRAM hatte ich vor diesem Projekt nie eingesetzt. Schwirig ist der nicht
zu verwenden. Ich wollte es aber halt einmal vorher ausprobiert haben,
bevor ein Stein direkt auf die Platine kommt.
> Ja. Nimm ein ordenlichs Kabel, entweder RG174 (dünnes Koax) oder ein> Päärchen aus nem CAT3/CAT5 Kabel, aber NICHT aufdröseln, die Adern> müssen verdrillt bleiben. Sowohl am Sender (Quarzoszillator/CPLD) als> auch Empfänger NAH am IC anlöten (<1cm).
CAT5 Kabel ist eine gute Idee. Selber drehen sollte aber auch ok sein?
> Passt, wenn die 100nF mit kurzen (<1cm) Drähten angelötet sind.
@hackklotz
>Na hoffentlich hast du nicht versehentlich einen solchen Pin extern an>VCC gelegt.
Das würde ich schon nach der Rauch / kein Rauch - Methode ausschließen.
Verdammt. Mir fällt einfach keine Lösung ein wie ich die Logik im
Takt-CPLD realisieren soll OHNE dass hinter dem FF noch ein bisschen
kombinatorische Logik folgt. Unter der Voraussetzung 50MHz rein, max
50MHz raus. Geht das überhaupt? Kann mir vielleicht jemand einen
Denkanstoß oder ein Beispiel geben?
Ich muss auch zugeben, dass ich noch nicht wirklich verstanden habe an
welcher stelle in dem Code ein Glitch enstehen kann. Ok,
kombinatorischer Takt ist ein "do not". Aber an welcher stelle ist da
das Problem? Die kombinatorik dahinter ist ja wirklich nur ein
Multiplexer bei dem sich eine Leitung ändert. Ich sehe nicht wie bei wie
auch immer gearteten Verzögerungen ein Glitch entstehen soll.
Ich poste mal nur die .v Datei. Da sollte ja eigentlich das
entscheidende drin stehen. (Allerdings auch nicht mehr als in dem Code
oben) Wenn gewünscht kann ich auch das ganze Verzeichnis hochladen. Das
ist allerdings kompremiert 1,7MB groß. Oder gibt es in ISE eine
Möglichkeit alle "unnützen" Dateien zu löschen?
>>
Verdammt. Mir fällt einfach keine Lösung ein wie ich die Logik im
Takt-CPLD realisieren soll OHNE dass hinter dem FF noch ein bisschen
kombinatorische Logik folgt. Unter der Voraussetzung 50MHz rein, max
50MHz raus. Geht das überhaupt? Kann mir vielleicht jemand einen
Denkanstoß oder ein Beispiel geben?
<<
Also ich würde sagen einfach deinen bisherigen kombinatorischen Ausgang
in ein FF mit dem Systemtakt eintakten und fertig.
Dirk
> Also ich würde sagen einfach deinen bisherigen kombinatorischen Ausgang> in ein FF mit dem Systemtakt eintakten und fertig.
-Systemtakt hat 50MHz.
-FF kann bei einer sorte von Flanken umschalten
=> Maximal 25 mio umschaltungen pro sec
also habe ich nur noch 25MHz als Maximalfrequenz. Brauchen tu ich aber
50MHz.
Oder stimmt da was in meiner Argumentation nicht?
Das ist richtig. Mit 50MHz clock kommen hoechstens 25MHz raus. Man
sollte nicht mit 50MHz beginnen, wenn man 50MHz haben will. Sondern mit
10MHz, nach einem PLL kann man irgendwas haben. Wie waer's mit dem
NBC12430, CY27EE16, MC100EL1648, CDC5801, LTC6905, ADF4001 ... Da gibt's
Dinge bis zum Abwinken.
Bezueglich den Glitches. Lass die schaltung duch mal durch den gratis
downloadbaren simulator.
Ich habe jetzt das Taktsignal mit einer Masseleitung verdrillt und siehe
da: Es ist deutlich besser. Fehlerrate jetzt: um die 5 auf 100k Samples.
Hätte echt nicht gedacht dass das schon so viel ausmacht.
Jaja... und beim Praktikum in der Uni hatte der Tutor damals noch
gefragt, warum ich die zuleitungen zu der Spule verdrillt habe, das
würde ja alles nur viel schlimmer machen. Und die Leitungen waren
irgendwas zwischen 1 und 2 Meter. (Die Frequenz war aber auch ehr im
Bereich 100kHz und Sinus)
Vielen Dank an alle die geholfen haben!
Am Design für den CPLD dass die Logik am Ende sequentiell ist wäre ich
aber immernoch interresiert.
Auch daran die Fehlerrate weiter zu reduzieren wäre ich natürlich
interresiert. Aber das ist mit diesem Aufbau evtl nicht möglich
Im Anhang ist ein Foto von dem momentanen Aufbau. Bitte nicht von den
Schleifen aud dem ADC board verwirren lassen, die sind nicht (mehr)
verbunden.
@nop();
Meinst du den Simulator in der ISE? - Der gibt keine Glitches aus
(Natürlich die Post Fit Simu, nicht die behavioral)
Oder dieses eigenständige Programm? (mir fällt der Name grade nicht ein)
Da bin ich noch nicht dahinter gekommen wie man es bedient.
Ehrlich gesagt kann ich mir aber auch kaum vorstellen, dass ein
Simulator jeden Glitch wirklich erfassen kann.
Viele Grüße,
Christian
der linke ca 2 cm unterhalb (ich weiß das ist zu weit, wird beim
nächsten aufbau besser) der rechte direkt unter dem cpld auf der anderen
seite der platine.
>>...Kaskaden aus 100n/10n/1n (ganz Besorgte platzieren>>noch 100pF) ist teilweise übertrieben...>Ich habe auch mal gehört die Kombination 10µ 10n wäre das Mittel der>wahl. In meinem Aufbau habe ich nur 100µ 100n. Allerdings nicht nur SMD.>Zu diesem Thema existieren aber wahrscheinlich mehr Überzeugungen als>Religionen auf der Welt. Ich denke dafür sollte man auch besser einen>eingenen Thread aufmachen.
Wenn schon minimal, dann 1-10uF (ev. auch bis 100uF) parallel zu 1-10nF!
Ich entkopple auch größte FPGAs (1000 Pins und mehr, mit oft mehr als
100 Spannungspins) mit max. 4-6 Cs pro Spannungswert. Und, SMD ist Muß!
Auch wird die Platine mit eingebunden: zwei ca. 5cm * 5cm
gegenüberliegenden Flächen mit GND und VCC in zwei eng
beieinanderliegenden Lagen wirken als Flächenkondensator und verteilen
gleichzeitig die Versorgungsspannung an alle Pins. Diese Kondensatoren
müssen natürlich ebenso wie die Spannungspins der ICs so kurz wie
möglich (mindestens eine Durchkontaktierung pro Kondensatoranschluss) an
die VCC/GND-Flächen angeschlossen werden. Die gesamte Schaltung wird so
aufgeteilt, dass die Flächen nicht zu groß werden (Diagonale und
Lambda/4 geben die Grenze für die Entkopplung) und nicht zu klein werden
(Flächenkondensator wirkt nicht mehr). Alle VCC-Teilflächen werden über
ein L (1 ... 10 uH) mit der Spannungsquelle verbunden.
Leider ist das nur mit mehrlagigen Platinen realisierbar.
Ansonsten gilt mein erster Satz!
@ Christian Honisch (cavorca)
>Aber trotzdem, wenn man dann ausversehen beim designen irgendwas>vertauscht hat kommt man nicht drum herum verbindungen zu trennen und>Kabel anzulöten. Dass will ich mit meiner Taktik weitgehend vermeiden.
Und holst dir adabei 10 andere, weserntlich kritischere Probleme an den
Hals. Naja, irgendwann (wenn der Schmerz gross genug ist) wirst du das
schon noch verstehen ;-)
>CAT5 Kabel ist eine gute Idee. Selber drehen sollte aber auch ok sein?
Keine Ahnung, ich bin Nichtraucher ;-)
>Verdammt. Mir fällt einfach keine Lösung ein wie ich die Logik im>Takt-CPLD realisieren soll OHNE dass hinter dem FF noch ein bisschen>kombinatorische Logik folgt. Unter der Voraussetzung 50MHz rein, max>50MHz raus. Geht das überhaupt?
Nein, nicht wirklich. Ist hier auch gar nciht nötig. Mach deinen Zähler,
mit FlipFlop am Ausgang. Und dann einen kombinatorsichen MUX, der
zwischen Zähler (Teiler 2....X) und direkten 50 MHz (Teiler =1)
umschaltet. Das ist OK. Du schaltest ja nicht dynamisch im Betrieb um.
>welcher stelle in dem Code ein Glitch enstehen kann. Ok,
Am Dekoderausgang
[pre]
assign clock_out = (clock && (teilung[3:0]==0))||
(z[0:0] && (teilung[3:0]==1))||
(z[1:1] && (teilung[3:0]==2))||
...
(z[12:12] && (teilung[3:0]==13))||
(z[13:13] && (teilung[3:0]==14))||
(z[14:14] && (teilung[3:0]==15));
[pre]
>Multiplexer bei dem sich eine Leitung ändert. Ich sehe nicht wie bei wie>auch immer gearteten Verzögerungen ein Glitch entstehen soll.>Ich poste mal nur die .v Datei. Da sollte ja eigentlich das
Das ist besser.
>ist allerdings kompremiert 1,7MB groß. Oder gibt es in ISE eine
Nein, zuviel Datenmüll.
>-Systemtakt hat 50MHz.>-FF kann bei einer sorte von Flanken umschalten>=> Maximal 25 mio umschaltungen pro sec>also habe ich nur noch 25MHz als Maximalfrequenz. Brauchen tu ich aber>50MHz.>Oder stimmt da was in meiner Argumentation nicht?
Du hast schon Recht. Lösung siehe oben.
>10MHz, nach einem PLL kann man irgendwas haben. Wie waer's mit dem>NBC12430, CY27EE16, MC100EL1648, CDC5801, LTC6905, ADF4001 ... Da gibt's>Dinge bis zum Abwinken.
Alles viel zu aufwendig und unnötig.
>Bezueglich den Glitches. Lass die schaltung duch mal durch den gratis>downloadbaren simulator.
Dazu braucht es keinen Simulator, wenn man das Problem als solches
verstanden hat. Ausserdem haben Glitches meist die "schöne" Eigenschaft,
in Simulationen nicht aufzutauchen, aber sehr wohl, und was besonders
fies ist, äusserst sporadisch in der realen Schaltung.
>Ich habe jetzt das Taktsignal mit einer Masseleitung verdrillt und siehe>da: Es ist deutlich besser. Fehlerrate jetzt: um die 5 auf 100k Samples.>Hätte echt nicht gedacht dass das schon so viel ausmacht.
Schau an! ;-)
>Im Anhang ist ein Foto von dem momentanen Aufbau. Bitte nicht von den>Schleifen aud dem ADC board verwirren lassen, die sind nicht (mehr)>verbunden.
Und beid dem Drahtverhau wunderst du dich über Fehlfunktionen . . . ;-)
>Ehrlich gesagt kann ich mir aber auch kaum vorstellen, dass ein>Simulator jeden Glitch wirklich erfassen kann.
Eben. Aber einige schon.
>Das Altera Quartus rechnet uebrigens alle Glitches.
Modelsim auch! Was den Designer aber nciht davon entbindet,
Grundlagenwissen zu haben und richtig anzuwenden.
@ HildeK (Gast)
>Wenn schon minimal, dann 1-10uF (ev. auch bis 100uF) parallel zu 1-10nF!>Ich entkopple auch größte FPGAs (1000 Pins und mehr, mit oft mehr als>100 Spannungspins) mit max. 4-6 Cs pro Spannungswert. Und, SMD ist Muß!
Naja, man sollte schon jedem VCC/GND Paar einen 100nF spendieren. Plus
die diversen Elkos.
Wahrscheinlich reicht auch die Hälfte, aber bei einem so graossen FPGA
kommt es darauf auch nicht mehr an (Layout/Kosten).
>(Flächenkondensator wirkt nicht mehr). Alle VCC-Teilflächen werden über>ein L (1 ... 10 uH) mit der Spannungsquelle verbunden.
Wozu das L?
MfG
Falk
@rene
>Wie sowas aussehen kann :
Das war mein erstes Projekt mit CPLD das über synthetisieren eines "UND"
oder eines kleinen Zählers hinaus ging. Ich finde man muss erst mal
einige wenige Praxiserfahrungen sammeln bevor man alles auf eine Platine
pakt.
>Der Vorteil der FPGAs ist, das man die Funktionszuweisung nachher noch
ja, aber nur bedingt. Man kann ja nicht im nachhinein einen IO Pin ein
einen GCK Pin verwandeln. Will sagen: es ist mein erstes großes Projekt.
Als ich damit angefangen habe wusste ich nicht mal was ein GCK Pin ist.
Und sowas muss man nunmal beim Design berücksichtigen. Ich wollte nicht
riskieren, nach wochenlanger Arbeit festzustellen, dass es so wie ich
angefangen habe nicht funktionieren kann und ich alles neu machen muss.
Klar ist es auf einer Platine wie in den Links oben besser, da gebe ich
euch beiden recht. Ich könnte mir auch gut vorstellen, das mein nächstes
Projekt mit einer richtigen Platine beginnt.
Aber wenn ich nochmal vor der Entscheidung stehen würde wie ich den
ersten Anfang mache, bei dem man alles zum ersten mal kennen lernt,
würde ich auf jeden fall wieder über die Steckbretter gehen.
Ich fand es einfach irsinnig eine Platine für einen CPLD zu entwerfen
ohne jegliche Praxiserfahrung.
Falk wrote:
> Und holst dir adabei 10 andere, weserntlich kritischere Probleme an den> Hals. Naja, irgendwann (wenn der Schmerz gross genug ist) wirst du das> schon noch verstehen ;-)
Wie gesagt. Beim nächsten Projekt wirds sicher anders, für mich ging
aber zum anfangen kein Weg dran vorbei.
>>welcher stelle in dem Code ein Glitch enstehen kann. Ok,>> Am Dekoderausgang
hm, verstehe ich ehrlichgesagt immer noch nicht. Der Dekoder wird doch
auch nicht dynamisch im Betrieb umgeschaltet? Ich meine der Dekoder
macht aus 4 Eingängen 16 Ausgänge auf einem ist permanent eine 1, auf
dem rest permanent 0. Die mit der 0 kann man ignorieren, da 0 und x 0
ist.
Das eine UND-Gatter, dass die 1 bekommt hat als anderen Eingang den
Ausgang des Flipflops des Zählers. Da sehe ich keine Glitch-gefahr. Nach
dem UND-Gatter gehts nochmal in ein ODER, aber das bekommt ja sonst nur
0en.
Wo ist diese Argumentation falsch?
> Und beid dem Drahtverhau wunderst du dich über Fehlfunktionen . . . ;-)
Ganz und gar nicht. Anfangs war ich sogar überrascht, dass es bei 25MHz
noch sauber lief.
Anfangs hatte ich den Testaufbau nur für kleine Frequenzen geplant um
heraus zu finden ob meine Idee Prinzipell funktioniert.
Was mich gewundert hatte war, dass mit CPLD und etwas Kabelverhau
wesentlich schlechter lief, als mit ne menge mehr Kabelverhau und ohne
CPLD. Da war für mich eigentlich klar, dass es an der CPLD liegt. Mein
Fehler war wohl die Anstiegszeiten des CPLD zu unterschätzen. Ich hatte
ehr mit 2ns wie vom Quarzoszilator kalkuliert.
>Wozu das L?
Macht man das nicht um doch noch vorhandene Frequenzen zu blocken, die
trotz der Kondensatoren übrig sind? Also zu verhindern, dass sie ins
Versorgungsnetz kommen? Soll man ja auch bei jedem Bus-Powered USB Gerät
machen. Oder ist das sowieso klar?
Nächster Schritt für mich ist jetzt aus dem /2^n Teiler einen /2 /5 /10
/10- Teiler zu machen.
/10 Teiler ist kein Problem, /5 Teiler ist schwirig. Was ich im netz an
/5-Teiler Beispielen finde hat dann aber einen Ausgangstakt, der um
Faktor 10 kleiner ist. Also brauche ich eigentlich einen /2.5 Teiler?
Hat da jemand vielleicht einen Codeschnipsel oder einen Link? Die Sachen
die ich mir bisher überlegt habe waren entweder nicht synthetisierbar,
oder hatten nicht 50% Duty cycle.
Es gibt doch in ISE sicher vorgefertigte Funktionen. Wo finde ich eine
Übersichtsliste? Man muss ja nicht jedes mal das Rad neu erfinden...
@ Christian Honisch (cavorca)
>Wie gesagt. Beim nächsten Projekt wirds sicher anders, für mich ging>aber zum anfangen kein Weg dran vorbei.
Schon OK ;-)
>hm, verstehe ich ehrlichgesagt immer noch nicht. Der Dekoder wird doch>auch nicht dynamisch im Betrieb umgeschaltet? Ich meine der Dekoder
Das ist egal.
>macht aus 4 Eingängen 16 Ausgänge auf einem ist permanent eine 1, auf>dem rest permanent 0. Die mit der 0 kann man ignorieren, da 0 und x 0>ist.
Du musst das dynamisch betrachten. Lies dir nochmal den Link durch und
denk drüber nach.
http://www.geocities.com/jacquesmartini/digital/glitch/glitch.html>Das eine UND-Gatter, dass die 1 bekommt hat als anderen Eingang den>Ausgang des Flipflops des Zählers. Da sehe ich keine Glitch-gefahr. Nach>dem UND-Gatter gehts nochmal in ein ODER, aber das bekommt ja sonst nur>0en.>Wo ist diese Argumentation falsch?
Du betrachtest es nur im statisch eingeschwungen Zustand. Wenn die
Laufzeiten von den einzelnen FlipFlops durch den Dekoder zum Ausgnag
verschieden sind (was im allgemeinen der Fall ist), dann gibt es
Glitches.
>Was mich gewundert hatte war, dass mit CPLD und etwas Kabelverhau>wesentlich schlechter lief, als mit ne menge mehr Kabelverhau und ohne>CPLD. Da war für mich eigentlich klar, dass es an der CPLD liegt. Mein
Weil der CPLD zu schnell ist! Klingt komisch, ist aber so.
>Fehler war wohl die Anstiegszeiten des CPLD zu unterschätzen. Ich hatte>ehr mit 2ns wie vom Quarzoszilator kalkuliert.
Genau!
>>Wozu das L?>Macht man das nicht um doch noch vorhandene Frequenzen zu blocken, die>trotz der Kondensatoren übrig sind? Also zu verhindern, dass sie ins>Versorgungsnetz kommen? Soll man ja auch bei jedem Bus-Powered USB Gerät
Ja, aber hier in der Form, naja, würde ich nicht unbedingt so machen.
>Nächster Schritt für mich ist jetzt aus dem /2^n Teiler einen /2 /5 /10>/10- Teiler zu machen.>/10 Teiler ist kein Problem, /5 Teiler ist schwirig. Was ich im netz an
Ein 1:N Teiler ist einfach, das ist nur ein Zähler, welcher von 0..N-1
zählt.
>/5-Teiler Beispielen finde hat dann aber einen Ausgangstakt, der um>Faktor 10 kleiner ist. Also brauche ich eigentlich einen /2.5 Teiler?
DAS ist schon die höhere Schule. Ich lass dich noch bissel schmoren ;-)
>Es gibt doch in ISE sicher vorgefertigte Funktionen. Wo finde ich eine>Übersichtsliste? Man muss ja nicht jedes mal das Rad neu erfinden...
Schau dir mal die Templates an. Das ist das Glühlampensymbol oben
rechts.
MFg
Falk
> Du musst das dynamisch betrachten. Lies dir nochmal den Link durch und> denk drüber nach.
Ich habe es gelesen und ich denke die ganze Zeit darüber nach. Nachdem
ich es gelesen hatte war ich mir eigentlich sogar noch sicherer, dass
kleine Glitches entstehen.
Ich meine der wesentliche Unterschied zwischen meiner Schaltung und der
auf der Seite ist doch, dass es kein Gatter gibt, dass 2 Dynamische
eingänge hat. Ich habe mal ein Bild gemalt :-)
Also am Ausgang vom Zähler kann sich so einiges gleichzeitig ändern. OK.
Aber es ändert sich ja nicht welcher Takt ausgewählt wird. Sagen wir
einfach a ist die ganze zeit high, b ist die ganze Zeit low.
Dann ist auch der Ausgang von Gatter B die ganze Zeit LOW, unabhängig
davon was am Zähler passiert.
Gatter A hat als Ausgang genau das was am oberen Eingang rein geht. Also
den Ausgang eines Flipflops. (Oder stimmt das nicht?)
Bis hier hin ist noch kein Glitch.
C hat jetzt als eingang nur den Ausgang von A. Der rest ist immer 0.
Also bekommt man am Ausgang keinen Glitch.
Wo ist der Fehler in dieser Argumentation? Oder: Wo ist das Gatter bei
dem sich während EINER Taktflanke mehr als EIN Eingang verändert?
> Ein 1:N Teiler ist einfach, das ist nur ein Zähler, welcher von 0..N-1> zählt.
OK
> DAS ist schon die höhere Schule. Ich lass dich noch bissel schmoren ;-)
menno
> Schau dir mal die Templates an. Das ist das Glühlampensymbol oben> rechts.
Ah. Aber kein /2.5 Teiler...
Heute morgen hatte ich eine Idee mit z zählern. Einer zählt bei
steigender, der andere bei fallender Taktflanke.
Dass ich jetzt nicht einen zähler in beiden always blöcken ansteuern
kann ist eigentlich klar, aber dass ich den einen nicht in dem anderen
resetten kann will mir Schaltungstechnisch nicht in den kopf. vielleicht
muss ich da noch ein weiteres gatter einfüngen, dass das kommendo zum
reset bis zur nächsten Flanke speichert?
ok, /2.5-Teiler habe ich hinbekommen. Ist doch erstaunlich einfach, wenn
man auf die richtige idee gekommen ist.
Die Frage die aber noch für mich offen bleibt ist an welcher Stelle ein
Glitch entstehen kann. Schon alleine weil ich es für zukünftige Designs
wirklich verstanden haben will.
Viele Grüße,
Christian
@ hackklotz (Gast)
>>DAS ist schon die höhere Schule. Ich lass dich noch bissel schmoren ;-)>Nicht zu fassen...
Was ist denn mit dir los?
Bissel sensibel?
@ Christian Honisch (cavorca)
>Ich meine der wesentliche Unterschied zwischen meiner Schaltung und der>auf der Seite ist doch, dass es kein Gatter gibt, dass 2 Dynamische>eingänge hat. Ich habe mal ein Bild gemalt :-)
Ach sooo. Ja, jetzt wo du es sagst fällt es mir wie Schuppen aus den
Haaren ;-)
>Also bekommt man am Ausgang keinen Glitch.
Hast Recht!
>Heute morgen hatte ich eine Idee mit z zählern. Einer zählt bei>steigender, der andere bei fallender Taktflanke.
Genau!
>ok, /2.5-Teiler habe ich hinbekommen. Ist doch erstaunlich einfach, wenn>man auf die richtige idee gekommen ist.
Zeig mal den Code.
MfG
Falk
Eigentlich braucht man sogar nur einen Zähler. Beim Überlauf wird
getoggelt.
Bei der Hälfte setzt man ein FF dass bei der anderen Taktflanke ein
zweites FF getoggelt werden soll.
Aus den beiden getoggelten FFs macht man ein XOR:
>Naja, man sollte schon jedem VCC/GND Paar einen 100nF spendieren. Plus>die diversen Elkos.>Wahrscheinlich reicht auch die Hälfte, aber bei einem so graossen FPGA>kommt es darauf auch nicht mehr an (Layout/Kosten).
Richtig! Ich nannte ja auch die Kombination 1-10uF, 100 oder 220nF,
10nF, 1nF und ev. 470pF. Das oben war die Minmiallösung.
Beim großen FPGA sind die Kosten für die C's vernachlässigbar. Unter
Umständen aber nicht die Randbedingungen für ein gutes Layout der
Datensignale.
>>(Flächenkondensator wirkt nicht mehr). Alle VCC-Teilflächen werden über>>ein L (1 ... 10 uH) mit der Spannungsquelle verbunden.>Wozu das L?
@Falk
Das Entkopplungsprizip firmiert unter dem Namen Silent (Prof. Dirks).
Da ist tatsächlich die genannte Kombination ausreichend. Weitere C's
bringen das Prinzip ggf. sogar durcheinander. Wir verwenden dieses
Prinzip schon seit 10-15 Jahren erfolgreich und haben seither Ruhe -
auch wenn man bei z.B. FPGA-Funktionsproblemen mal den Support vom
Hersteller benötigt: erste Frage ist die nach Störungen auf der VCC.
Eine Messung, den Screenshot zum Frager und danach ist zu dem Thema
Ruhe!
Das L ist dazu da, die natürlich immer noch verbleibenden Ripple nicht
über die Zuleitung auf dem Board zu verteilen und sich so Probleme beim
anschließenden EMV-Test einzufangen.
Klaus
Ich habe jetzt versucht den Takt etwas intelligenter als nur durch 2er
Potenzen zu Teilen. Dazu habe ich eine Kette von 5 Teilern gemacht. 3
mal /10, 1 mal /2 und 1 mal /5. Jeden kann man seperat ein und aus
schalten.
Code ist im Anhang. Weil die Kette so lang ist habe ich schon ein wenig
ein schlechtes Gewissen. Sind ja ganz schön viele Gatter die da
nacheinander schalten müssen. Oder ist das kein Problem? ISE meldet dass
83,3 MHz möglich sind.
Naja mal zur Funktion:
Die Teiler sind in der Reihenfolge 10,10,10,5,2.
Soweit funktioniert es. Allerdings funktioneiert der /5 Teiler nur, wenn
vorher der Takt schon einmal durch 10 geteilt wurde. Sonst teilt er
durch 10. Also in der Schaltung. In der Post-Fit Simu ist noch alles in
Ordnung. Daher denke ich dass im Code kein Fehler ist.
Ist der CPLD überfordert? Habe ich die Pins vielleicht ungünstig
zugewiesen?
Die andere Möglichkeit wäre natürich nur einen Zähler zu nehmen, der
abnhängig vom Zustand bis zu einer Bestimmten Zahl zählt. Das hätte nur
einen von 3 Nachteilen: wenn der Zähler dann bei 5 angekommen ist und
ich auf /2 teilen umschalte muss ich:
- entweder 1 ms warten
- oder eine resetleitung nach dem umschalten betätigen (gibts bisher
nicht)
- oder alle Möglichen zustände im code berücksichtigen.
Daher würde ich diese Möglichkeit lieber nur dann nehmen, wenn der
jetzige Weg nicht funktioniert.
Zum anderen wüsste ich aber auch nicht, wieso der /5 Teiler dann auf
einmal funktionieren sollte.
Weiß jemand Rat?
@ Christian Honisch (cavorca)
Moin,
>Potenzen zu Teilen. Dazu habe ich eine Kette von 5 Teilern gemacht. 3>mal /10, 1 mal /2 und 1 mal /5. Jeden kann man seperat ein und aus>schalten.
Kann man so machen.
>Code ist im Anhang. Weil die Kette so lang ist habe ich schon ein wenig>ein schlechtes Gewissen. Sind ja ganz schön viele Gatter die da>nacheinander schalten müssen. Oder ist das kein Problem? ISE meldet dass
Naja, es braucht für jeden Zähler einen nuen Takt. Theoretisch ein
ordentliches Taktnetz. Bei einigen äleen FPGAs kkönnten dir so fix die
Taktnetze ausgegehen, aber CPLDs haben auf grund ihrer Historie die
möglichkeit, Takte über fast jedes Netz zu routen. Ist zwar eher
schlechtes Design aber läuft :-0
>Ist der CPLD überfordert? Habe ich die Pins vielleicht ungünstig>zugewiesen?
Denke ich nicht.
>Die andere Möglichkeit wäre natürich nur einen Zähler zu nehmen, der>abnhängig vom Zustand bis zu einer Bestimmten Zahl zählt. Das hätte nur>einen von 3 Nachteilen: wenn der Zähler dann bei 5 angekommen ist und>ich auf /2 teilen umschalte muss ich:>- entweder 1 ms warten
??? Warum das?
>- oder eine resetleitung nach dem umschalten betätigen (gibts bisher>nicht)>- oder alle Möglichen zustände im code berücksichtigen.
Auch nicht. Du brauchst einfach nur einen 1:N Zähler bauen. Und mach dir
keine Sorgen wegen des Tastverhältnisses, das ist bei den meisten
AD-Wandlern nur bei maximaler Frequnz wichtig (damit die HIGH und LOW
Pulse nicht zu kurz werden).
>Daher würde ich diese Möglichkeit lieber nur dann nehmen, wenn der>jetzige Weg nicht funktioniert.>Zum anderen wüsste ich aber auch nicht, wieso der /5 Teiler dann auf>einmal funktionieren sollte.
???
MFG
Falk
Falk wrote:
> @ Christian Honisch (cavorca)>> Moin,>>>Potenzen zu Teilen. Dazu habe ich eine Kette von 5 Teilern gemacht. 3>>mal /10, 1 mal /2 und 1 mal /5. Jeden kann man seperat ein und aus>>schalten.>> Kann man so machen.>>>Code ist im Anhang. Weil die Kette so lang ist habe ich schon ein wenig>>ein schlechtes Gewissen. Sind ja ganz schön viele Gatter die da>>nacheinander schalten müssen. Oder ist das kein Problem? ISE meldet dass>> Naja, es braucht für jeden Zähler einen nuen Takt. Theoretisch ein> ordentliches Taktnetz. Bei einigen äleen FPGAs kkönnten dir so fix die> Taktnetze ausgegehen, aber CPLDs haben auf grund ihrer Historie die> möglichkeit, Takte über fast jedes Netz zu routen. Ist zwar eher> schlechtes Design aber läuft :-0
Soll am Ende in einen 9572XL mit allerlei anderem Zeug. Wenn es
zuverläsig funkioniert soll das nicht so schlimm sein.
>>>Ist der CPLD überfordert? Habe ich die Pins vielleicht ungünstig>>zugewiesen?>> Denke ich nicht.
Was ist dann der Grund, dass /5 de facto /10 Teilt, wenn vorher kein
Teiler aktiv war?
Ich meine:
- stellt man /5 ein teilt der in Wirklichkeit /10.
- Stellt man /10 /5 ein teilt er /50.
>>Die andere Möglichkeit wäre natürich nur einen Zähler zu nehmen, der>>abnhängig vom Zustand bis zu einer Bestimmten Zahl zählt. Das hätte nur>>einen von 3 Nachteilen: wenn der Zähler dann bei 5 angekommen ist und>>ich auf /2 teilen umschalte muss ich:>>- entweder 1 ms warten>> ??? Warum das?
Als Minimalfrequenz will ich 10kHz haben. also brauche ich sowas wie
einen 10 Bit-Zähler (vielleicht auch ein Bit mehr).
Den Zähler hätte ich so realisiert, dass er immer bis N zählt und dann
einen Reset macht. Wenn ich jetzt aber von 10 kHz auf 25 MHz umschalte
ist der Zähler im ungünstigen Fall grade bei 3, da der Reset bei 2
gemacht werden würde muss ich jetzt lange warten, bis er da wieder
ankommt. Oder sehe ich da nur eine einfache Lösung nicht?
Ich glaube nicht, dass man eine ">"-Relation verwenden kann. Schon 8 Bit
sind bei 50MHz entschieden zu viel
>>>- oder eine resetleitung nach dem umschalten betätigen (gibts bisher>>nicht)>>- oder alle Möglichen zustände im code berücksichtigen.>> Auch nicht. Du brauchst einfach nur einen 1:N Zähler bauen. Und mach dir> keine Sorgen wegen des Tastverhältnisses, das ist bei den meisten> AD-Wandlern nur bei maximaler Frequnz wichtig (damit die HIGH und LOW> Pulse nicht zu kurz werden).>
Stimmt. Datenblatt lesen hilft. Obwohl...
1
When digitizing at high sampling rates, the clock should have a 50%
2
duty cycle (tH = tL ), along with fast rise and fall times of 2ns or less.
Man merkt wir bewegen uns ein einer exakten Wissenschaft. Nach dem
Datenblatt hätte ich 10MHz noch hoch genannt, nach dem was du sagst ehr
nicht.
Dann weiß ich jetzt aber wieder nicht, wie ich den /5 Teiler machen
soll. Igendwie muss ich ja auf die fallende Taktflanke...
Ich könnte zwar immer abwechselnd /2 und /3 teilen, aber das entspräche
einem Jitter den ich mich nicht auszurechnen traue...
Und der /5 Teiler ist denke ich der einzige, bei dem ein schlechtes
Tastverhältnis entstehen könnte.
>>Zum anderen wüsste ich aber auch nicht, wieso der /5 Teiler dann auf>>einmal funktionieren sollte.>> ???
Naja, also jetzt ist es ja so, dass ich nicht 10MHz ausgeben kann. Keine
Ahnung, woran das liegt. Kann mir kaum vorstellen, dass es besser wird,
wenn ich den /5 Teiler einfach "wo anders" hinbaue, oder an den Zähler
(in diesem Fall ungenutzte) Bits hinten anhänge.
Kommt auf einen Versuch an.
> Dann weiß ich jetzt aber wieder nicht, wie ich den /5 Teiler machen> soll. Igendwie muss ich ja auf die fallende Taktflanke...> Ich könnte zwar immer abwechselnd /2 und /3 teilen, aber das entspräche> einem Jitter den ich mich nicht auszurechnen traue...> Und der /5 Teiler ist denke ich der einzige, bei dem ein schlechtes> Tastverhältnis entstehen könnte.
murx. Ich versuchs gleich mal.
Trotzdem: Irgendwie brauche ich dann ja immer noch einen reset für den
Zähler beim umschalten. Obwohl, vielleicht mache ich eine FSM, pro
Teilung ein Zustand. Wechselt man den Zustand wird zuerst ein reset
durchgeführt.
Gut. Das versuche ich mal.
ok, läuft. Code ist im Anhang.
Für Kommentare wäre ich dankbar.
Laut ISE läuft es bis 76MHz. Das finde ich ein wenig überraschend, die
andere Variante lief bis 83MHz.
Viele Grüße,
Christian.