Forum: FPGA, VHDL & Co. CPLD als Taktgenerator gibt schlechte Signalqualität


von Christian H. (cavorca)


Lesenswert?

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.

von Benedikt K. (benedikt)


Lesenswert?

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.

von hackklotz (Gast)


Lesenswert?

Die 5V wirst du mit dem 9536 nicht erreichen, Erklärung:

http://www.xilinx.com/xlnx/xil_ans_display.jsp?iLanguageID=1&getPagePath=2150&BV_SessionID=@@@@1158440460.1183567500@@@@&BV_EngineID=cccfaddlgidjjhgcefeceihdffhdfkf.0

2V sind allerdings doch sehr wenig.

Wie sieht denn das Signal sonst so aus? Sind die Flanken wenigstens 
rattenscharf?

von Christian H. (cavorca)


Angehängte Dateien:

Lesenswert?

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.

von hackklotz (Gast)


Lesenswert?

Hast du die Pins auch richtig zugeordnet?

von Christian H. (cavorca)


Lesenswert?

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.

von Benedikt K. (benedikt)


Lesenswert?

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 ?

von Dirk S. (Gast)


Lesenswert?

Ich plane Spartan 3 einzusetzen. Sind dort auch solche Treiberprobleme 
zu erwarten?

Dirk

von Rick Dangerus (Gast)


Lesenswert?

@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

von Joerg W. (joergwolfram)


Lesenswert?

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

von Christian H. (cavorca)


Lesenswert?

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?

von nop(); (Gast)


Lesenswert?

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.

von Benedikt K. (benedikt)


Lesenswert?

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.

von Klaus F. (kfalser)


Lesenswert?

> 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

von Christian H. (cavorca)


Lesenswert?

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.

von Joerg W. (joergwolfram)


Lesenswert?

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

von Falk (Gast)


Lesenswert?

@ 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

von Christian H. (cavorca)


Lesenswert?

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

von Falk (Gast)


Lesenswert?

@ 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

von Christian H. (cavorca)


Lesenswert?

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...

von Joerg W. (joergwolfram)


Lesenswert?

@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

von Falk (Gast)


Lesenswert?

@ 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

von nop(); (Gast)


Lesenswert?

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.

von hackklotz (Gast)


Lesenswert?

>>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.

von Falk (Gast)


Lesenswert?

@ 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

von hackklotz (Gast)


Lesenswert?

Ok, stimmt. Danke für deine Erläuterungen.

von Christian H. (cavorca)


Lesenswert?

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

von Falk (Gast)


Lesenswert?

@ 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

von Christian H. (cavorca)


Lesenswert?

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.

von hackklotz (Gast)


Lesenswert?

An dem 5V-CPLD wird's wohl kaum liegen. Bei dir ist irgendwo der Wurm 
drin, vielleicht hat das CPLD sogar eine Macke?

von Falk (Gast)


Lesenswert?

@ 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

von Bewerber (Gast)


Lesenswert?

Die Frequenz spielt doch keine Rolle sondern nur die Anstiegszeit.

von Falk (Gast)


Lesenswert?

@ 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

von Christian H. (cavorca)


Lesenswert?

> 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.

von Bewerber (Gast)


Lesenswert?

Was hast du eigentlich mit den unbenutzten Pins des CPLDs gemacht?

von Joerg W. (joergwolfram)


Lesenswert?

@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

von nop(); (Gast)


Lesenswert?

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.

von Falk (Gast)


Lesenswert?

@ 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

von Mark (Gast)


Lesenswert?

@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.

von Falk (Gast)


Lesenswert?

@ 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

von Christian H. (cavorca)


Lesenswert?

@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.

von Falk (Gast)


Lesenswert?

@ 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

von hackklotz (Gast)


Lesenswert?

>Sind denke ich durch ISE standartmäßig auf Masse gelegt.

Na hoffentlich hast du nicht versehentlich einen solchen Pin extern an 
VCC gelegt.

von Christian H. (cavorca)


Lesenswert?

@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.

von Jupp M. (juppp)


Lesenswert?

Könntest du mal das ISE-Projekt hochladen?

von Christian H. (cavorca)


Angehängte Dateien:

Lesenswert?

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?

von Dirk S. (Gast)


Lesenswert?

>>
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

von Christian H. (cavorca)


Lesenswert?

> 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?

von nop(); (Gast)


Lesenswert?

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.

von Christian H. (cavorca)


Angehängte Dateien:

Lesenswert?

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

von hackklotz (Gast)


Lesenswert?

Wo hat der Xilinx denn seine Blockerkondensatoren?

von Christian H. (cavorca)


Lesenswert?

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.

von rene (Gast)


Lesenswert?

Wie sowas aussehen kann :

http://www.ibrt.ch/electronics/project1i.jpg
http://www.ibrt.ch/electronics/project2i.jpg
http://www.ibrt.ch/products/multispicontroller.html
http://www.ibrt.ch/products/avrboard1.html

Der Vorteil der FPGAs ist, das man die Funktionszuweisung nachher noch 
machen kann/macht. Die Kondensatorbatterien sind uebrigens meist auf der 
Unterseite. Das sind alles 2 Lagige.

Das Altera Quartus rechnet uebrigens alle Glitches.


von HildeK (Gast)


Lesenswert?

>>...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!

von Falk (Gast)


Lesenswert?

@ 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

von Christian H. (cavorca)


Lesenswert?

@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...

von Falk (Gast)


Lesenswert?

@ 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

von hackklotz (Gast)


Lesenswert?

>DAS ist schon die höhere Schule. Ich lass dich noch bissel schmoren ;-)

Nicht zu fassen...

von Christian H. (cavorca)


Angehängte Dateien:

Lesenswert?

> 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?

von Christian H. (cavorca)


Lesenswert?

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

von Falk (Gast)


Lesenswert?

@ 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

von Christian H. (cavorca)


Lesenswert?

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:
1
module m1(clk, clk_del2_5);
2
    input clk;
3
    output clk_del2_5;
4
5
  reg pf,nf; //FFs die getoggelt werden
6
  reg toggle; //kommando: toggeln
7
  reg [2:0] cnt; //Zähler bis 5
8
  
9
  xor(clk_del2_5,pf,nf);
10
  
11
  initial begin
12
    pf<=0;
13
    nf<=0;
14
    cnt<=0;
15
  end
16
  
17
  always @ (posedge clk) begin
18
    case (cnt)
19
      default:
20
        begin
21
          cnt<=cnt+1;
22
          toggle<=0;
23
          pf<=pf;
24
        end
25
      1:
26
        begin
27
          cnt<=cnt+1;
28
          toggle<=1;
29
          pf<=pf;
30
        end
31
      4:
32
        begin
33
          cnt<=0;
34
          toggle<=0;
35
          pf<=!pf;
36
        end
37
    endcase
38
  end
39
  
40
  always @ (negedge clk)
41
    if (toggle==1) begin
42
      nf<=!nf;
43
    end else begin 
44
      nf<=nf;
45
    end
46
endmodule

von HildeK (Gast)


Lesenswert?

>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

von Christian H. (cavorca)


Angehängte Dateien:

Lesenswert?

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?

von Falk (Gast)


Lesenswert?

@ 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

von Christian H. (cavorca)


Lesenswert?

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.

von Christian H. (cavorca)


Lesenswert?

> 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.

von Christian H. (cavorca)


Angehängte Dateien:

Lesenswert?

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.

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
Noch kein Account? Hier anmelden.