Forum: FPGA, VHDL & Co. CPLD Clock Probleme XC9572 1Hz 3V3


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Michael (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich nutze einen xc9572xl auf einem BitConnector[1] und beobachte bei 
folgender Zählerschaltung
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity vhdl_zaehler is
    Port ( 
    clock :   in  STD_LOGIC;
    Sec :   out STD_LOGIC_VECTOR (3 downto 0)
   );
end vhdl_zaehler;

architecture Behavioral of vhdl_zaehler is
signal x : unsigned (3 downto 0) := (others=>'0');
begin

  process begin
  
  wait until  rising_edge(clock);
    if(x>"1000") then
      x <= (others=>'0');
    else
      x <= x+1;
    end if;
  end process;
  Sec <= std_logic_vector(x);

end Behavioral;

synthetisiert auf der Hardware folgendes Zählverhalten:
0001
0010
0011
0100
0101
0110
0111
1001 <- !!!
0001 <- !!!

Sobald ich ein Oszi an die Taktleitung zum Messen der Steilheit der 
Fanke anlegen (CPLD + LED bei 3.3V), wird es noch verrückter:
0001
0010
0011
0101 <- !!!
0110
0111
1001 <- !!!
0001 <- !!!

Dabei sehen die Fanken des Rechteckgenerators bei 20ms unendlich steil 
aus (läuft mit 1Hz).

Wenn ich im .ucf File aber

NET  "clock"    LOC="1";
durch bzw
NET  "clock"    LOC="23";
ersetze, funktioniert alles bestens. Sobald ich wieder das Oszi anlege, 
verschluckt er sich aber beim zählen von 7 auf 9

Hat jemand eine Idee woran das liegen könnte ?

Beste Grüße,

Michael

[1] https://github.com/1ux/BitConnector

von jo mei (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> Hat jemand eine Idee woran das liegen könnte ?

Am elektrisch-physikalischen Aufbau, den wir allerdings nicht
kennen.

Wer misst, misst Mist.

Das gilt auch für den Aufbau allgemein, sowie für die
Einspeisung von Signalen.

Vielleicht ist auch das Board mit dem xc9572xl bereits
unzureichend aufgebaut bzw entkoppelt.

von Michael (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Vielleicht ist auch das Board mit dem xc9572xl bereits
> unzureichend aufgebaut bzw entkoppelt.

Nun wenn vielleicht der Schaltplan etwas Klarheit bringen könnte, der 
befindet sich hier:

https://github.com/1ux/BitConnector/blob/master/schematic_v4X.pdf

von jo mei (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> Nun wenn vielleicht der Schaltplan etwas Klarheit bringen könnte

Leider nur sehr wenig.

Keine Spannungsversorgung, keine Info wo ein Clock eingespeist
wird, wie ein Clock eingespeist wird etc.

Hier nur einer von vielen Verdächtigen:

Michael schrieb:
> Fanken des Rechteckgenerators bei 20ms unendlich steil

Wenn du wirklich Hilfe haben möchtest dann müsstest du viel
mehr offenlegen. Links auf irgendwelche vorgefertigte Dinge
helfen da nicht weiter.

von Michael (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Das gilt auch für den Aufbau allgemein, sowie für die
> Einspeisung von Signalen.

OK, du scheinst wirklich auf der richtigen Spur zu sein.
Ich habe einmal den günstigen China Rechteckgenerator XY-PWM durch ein 
Laborgerät ersetzt und das Problem auf dem Pin LOC="1" ist auch hier 
verschwunden.

Sobald ich aber ein Oszi dranhänge (1MOhm Vorwiederstand), habe ich 
wieder Sprünge im Zähler. Da scheinen wohl irgendwelche Kapazitäten eine 
Rolle zu spielen ?

von Michael (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Wenn du wirklich Hilfe haben möchtest dann müsstest du viel
> mehr offenlegen. Links auf irgendwelche vorgefertigte Dinge
> helfen da nicht weiter.

Ja sehr gerne. Als Spannungsversorgung ist ein Labornetzteil mit 
Strombegrenzer im Einsatz (3V3). CPLD + LEDs ziehen rund 50mA und der 
Begrenzer liegt bei 400mA

Clock wird jetzt über einen FG-506 eingespeist. (Tastknopf + 2 kurze 
Kabel an  den Spitzen )

Frequenz liegt bei 1 bis 2 Herz, DC-Offset auf Messebezug 
(Rechteckspannung)

Was genau möchtest du denn wissen ?

von jo mei (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> Ja sehr gerne.

Schaltpläne und Aufbauten in Prosa sind scheisse.

Das wurde hier auf uC.net schon oft genug gesagt.

Michael schrieb:
> Tastknopf + 2 kurze Kabel an  den Spitzen )

Was ist ein Tastknopf?

Wenn du einen Tastkopf meinst, also das was man an einem
Oszilloskop anschliesst, das ist das ungeeignet einen
Clock irgendwo einzuspeisen.

von Michael (Gast)


Bewertung
0 lesenswert
nicht lesenswert
> Schaltpläne und Aufbauten in Prosa sind scheisse.

Gut der Schaltplan [1] ist ja nun nicht in Prosa.

Da der restliche Aufbau so überschaubar ist (4 LEDs mit 120 Ohm 
Vorwiederstand am Port  44,43,42,41 des CPLSs [2] bzw. 
IO33,IO32,IO31,IO30 des BitConnectors) möchte ich mir den Aufwand 
sparen.

An dieser Stelle opfere ich gerne die Philosophie des Herzens, der Prosa 
der Verhältnisse.

Fehlt noch der Takt, der am Pin 1 des CPLDs hängt.
Das ganze alles in 3V3

> Was ist ein Tastknopf?
> Wenn du einen Tastkopf meinst,

Ich sehe, du verstehst mich ja doch :), oder wolltest du mich nur 
verbessern ?

>...Tastkopf ... ungeeignet einen Clock irgendwo einzuspeisen

Warum ?


[1] https://github.com/1ux/BitConnector/blob/master/schematic_v4X.pdf
[2] https://www.xilinx.com/support/documentation/data_sheets/ds057.pdf

von jo mei (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
Michael schrieb:
> Vorwiederstand

Ohne Worte.

Michael schrieb:
> An dieser Stelle opfere ich gerne die Philosophie des Herzens, der Prosa
> der Verhältnisse.

Beratungsresistenz ist eine Zier, doch weiter kommt man ohne ihr.

Bin dann mal weg bzw. 'raus.

von Michael (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Danke, du hast mir sehr geholfen.

Ich wünsche dir noch ein schönes Wochenende.

von Achim S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> NET  "clock"    LOC="1";
> durch bzw
> NET  "clock"    LOC="23";

Diese beiden Pins sind an deinem CPLD schon dedizierte Takteingänge, 
oder? Sonst liegt da das Problem.

Michael schrieb:
> Dabei sehen die Fanken des Rechteckgenerators bei 20ms unendlich steil
> aus (läuft mit 1Hz).

Hast du dabei auch das Oszi auf 20ms eingestellt? Dann sieht fast alles 
unendlich steil aus. Auf der ns-Skala (auf der der CPLD reagiert) wird 
es interessanter.

Eine mögliche Erklärung: du hast am Takt-Eingang durch deine Einspeisung 
(Leitungslänge, nicht abgeschlossene Leitung....) einen Wackler auf der 
Taktflanke. Ein Teil der Macrozellen taktet dabei doppelt, ein anderer 
Teil nicht. Dadurch entstehen "verbotene" Zählergebnisse.

Eine andere Möglichkeit: die Taktflanke ist am CPLD-Pin so schlapp, dass 
du zu lange im Umschaltbereich bist und es durch den Strompuls beim 
Umschalten der Makrozellen zu einer Doppeltaktung in einem Teil der 
Zählerbits kommt. (Unzureichende Versorungs-Kondensatoren würden das 
wahrscheinlicher machen).

Im ersten Fall sollte ein "Bremsen" der Taktflanke helfen, im zweiten 
Fall wäre es kontraproduktiv. In jedem Fall sollte eine hoch aufgelöste 
Messung der Taktflanke mehr Klarheit bringen, ob diese Erklärungsansätze 
zutreffen können.

von W.S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> Frequenz liegt bei 1 bis 2 Herz, DC-Offset auf Messebezug
> (Rechteckspannung)

Also, dein Stromlaufplan sieht erstmal recht unverdächtig aus. Was du 
hingegen mit deinem DC-Offset meinst, kann ich dort nicht herauslesen.

Ich würde allerdings so eine Schaltung auf dem Board versorgen, d.h. ein 
einziger Versorgungsanschluß und auf dem Board dann die nötigen 
Regler-IC's. Kosten ja nicht die Welt und man hat bei sauberem GND dann 
auch saubere Spannungen am CPLD.

Was mir fehlt, ist der Teil, wo die Musike spielt: also was ist dein 
Takteingang (und was ist da konkret verbaut)? und was sind deine 
Ausgänge für's Zählergebnis? Und was ist dort verbaut?

Bedenke mal, daß man mit einem CPLD einen recht sauschnellen Chip in der 
Hand hat. Die XC95 kommen m.W. locker auf 200 MHz und bei den 
Coolrunnern kommt man bis auf mehr als 600 MHz, da ist das Layout und 
auch die E/A-Beschaltung mit etwas Vorsicht zu gestalten.

Wenn man das nicht bedenkt, dann kann man sich einfach schon durch 
Fehlanpassung ein Echo auf der Zuleitung des Signals erzeugen, das dann 
zu doppelt gezählten Flanken führt.

Nochwas: Wenn du in solchen Schaltungen herum oszillografierst, dann 
setze in Reihe mit deiner Tastspitzen einen simplen kleinen Widrstand, 
so 47..100 Ohm. Das entkoppelt die Kapazität der Tastspitzen ganz 
passabel von der Schaltung.

Und nochwas: Bei VHDL weiß unsereiner nie so recht, was tatsächlich 
dabei heraus kommt (ich mach sowas ja nicht hauptberuflich). Also 
versuche mal, deine Logik einfach mit dem der ISE/Webpack beiliegenden 
Schematics zu machen. Xilinx liefert ja passende Zähler dort mit. Ja, 
das Schematics der ISE ist ein Graus, aber dennoch: wenn damit plötzlich 
dein Zähler tut, was er soll, dann müßtest du in deinem Quellcode nach 
dem Fehler suchen.

W.S.

von Michael K. (2ux)


Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank Achim & W.S. ich werde darüber nachdenken.
Da dies nicht mein Beruf ist, muss ich die Sache bis nächstes WE 
aufschieben. Es besteht hier allerdings eine intrinsische Motivation.
Ich habe den BitConnector entworfen und gebaut. Dass ich jetzt an einem 
Zähler scheiter, frustriert mich ein wenig.

Was ich dazu schon sagen kann:
@Achim

> Diese beiden Pins sind an deinem CPLD schon dedizierte Takteingänge,
> oder? Sonst liegt da das Problem.

Nun LOC="1" hat die interne Zusatzfunktion globalCLOCK,
LOC="23" ist hingegen ein einfacher general purpose input/output

Ist es das, was du mit dediziert meinst ?

> Hast du dabei auch das Oszi auf 20ms eingestellt? Dann sieht fast alles
> unendlich steil aus. Auf der ns-Skala (auf der der CPLD reagiert) wird
> es interessanter.

Ja,also 20ms/Teilung, und ja das stimmt wohl bei der Auflösung.
OK ich sehe mir mal 50 ns an, mehr schafft die alte Dame „Fluke3335“ 
nicht.

> du hast am Takt-Eingang durch deine Einspeisung
> (Leitungslänge, nicht abgeschlossene Leitung....) einen Wackler

Ich werde mal einen Taster mit Hardwareentprellung (RC + 
Schmitt-Trigger) dranhängen und schauen, ob er da richtig zählt.

> die Taktflanke ist am CPLD-Pin so schlapp, dass
> du zu lange im Umschaltbereich bist ...

Ja, auch da sollte der RC + Schmitt-Trigger-Ansatz für Klarheit sorgen.

> In jedem Fall sollte eine hoch aufgelöste
> Messung der Taktflanke mehr Klarheit bringen, ob diese Erklärungsansätze
> zutreffen können.

Ja, Bis nächstes WE in Arbeit

@W.S.

> Was du hingegen mit deinem DC-Offset meinst, kann ich dort nicht
> herauslesen.

Ja, damit wollte ich sagen, dass das Rechtecksignal keine negative 
Flanke hat. Es schaltet zwischen 0V und 3V3.

> Ich würde allerdings so eine Schaltung auf dem Board versorgen,  ... man
> hat bei sauberem GND dann auch saubere Spannungen am CPLD.

Die Platine ist so gedacht, dass Sie auf ein größeres Board 
„aufgesockelt“ werden kann, was dann genau diese Eigenschaften haben 
sollte.
Aktuell wird es mit einem stabilisierten Labornetzteil betrieben.

> Was mir fehlt, ist der Teil, wo die Musike spielt: also was ist dein
> Takteingang (und was ist da konkret verbaut)? und was sind deine
> Ausgänge für's Zählergebnis? Und was ist dort verbaut?

Ich komm wohl doch nicht um einen Schaltplan herum :(
Der Takt geht direkt auf einen CPLD Pin (Pin 1)
> ...Ausgänge für's Zählergebnis?
4 LEDs + 120 Ohm Vorwiderstand (hängen auch am CPLD)

Mehr gibt es nicht.

> Die XC95 kommen m.W. locker auf 200 MHz und bei den
> Coolrunnern kommt man bis auf mehr als 600 MHz, da ist das Layout und
> auch die E/A-Beschaltung mit etwas Vorsicht zu gestalten.

Ja, ich habe schon so etwas gelesen. Ich dachte nur bei meinem 1Hz 
Taktsignal muß ich mir diesbezüglich wenig sorgen machen ?

> Nochwas: Wenn du in solchen Schaltungen herum oszillografierst, dann
> setze in Reihe mit deiner Tastspitzen einen simplen kleinen Widrstand,
> so 47..100 Ohm. Das entkoppelt die Kapazität der Tastspitzen ganz
> passabel von der Schaltung.

Danke !

> Und nochwas: Bei VHDL weiß unsereiner nie so recht, was tatsächlich
> dabei heraus kommt (ich mach sowas ja nicht hauptberuflich). Also
> versuche mal, deine Logik einfach mit dem der ISE/Webpack beiliegenden
> Schematics zu machen....

Arrg, davon wollte ich doch eigentlich weg kommen ;)
Und Lothar hat mir da einigermaßen Mut gemacht, dass VHDL vielleicht 
doch kein Hexenwerk ist.

Liebe Grüße,

Michael

: Bearbeitet durch User
von Achim S. (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Michael K. schrieb:
> Nun LOC="1" hat die interne Zusatzfunktion globalCLOCK,

dann kannst du ihn als Takteingang verwenden.

Michael K. schrieb:
> LOC="23" ist hingegen ein einfacher general purpose input/output

dann kannst du ihn nicht vernünftig als Takteingang verwenden. Wirft dir 
deine Entwicklungssoftware keine Warnungen aus, wenn du den Takt darüber 
einspeist?

Michael K. schrieb:
> Arrg, davon wollte ich doch eigentlich weg kommen ;)
> Und Lothar hat mir da einigermaßen Mut gemacht, dass VHDL vielleicht
> doch kein Hexenwerk ist.

Ist es auch nicht. Deine Logikbeschreibung ist sauber, das Problem kommt 
nicht von der Seite. Ein Problem auf der Codeseite gibt es höchstens im 
ucf, wenn du dort einen ungeeigneten Pin zum Einspeisen des Takts 
angibst.

Michael K. schrieb:
> Ja, damit wollte ich sagen, dass das Rechtecksignal keine negative
> Flanke hat. Es schaltet zwischen 0V und 3V3.

??? Du willst wohl sagen, dass es keine negativen Spannungswerte 
annimmt. Natürlich hat ein Rechtecksignal genau so viele negative 
Flanken wie positive Flanken.

Michael K. schrieb:
> OK ich sehe mir mal 50 ns an, mehr schafft die alte Dame „Fluke3335“
> nicht.

Wenn dein Messobjekt (CPLD) um ein Vielfaches schneller ist als dein 
Messgerät (60 MHz Oszi), dann kannst einige Fehlerursachen damit nicht 
rausmessen (z.B. einen CLK-Reversal in der Mitte der Flanke, der für das 
CPLD schon zur Doppeltaktung führt).

Michael schrieb:
> Clock wird jetzt über einen FG-506 eingespeist. (Tastknopf + 2 kurze
> Kabel an  den Spitzen )

https://www.ersinelektronik.com/class/INNOVAEditor/assets/Funktionsgenerator-FG-506.pdf

Deine Beschreibung der Takteinspeisung klingt für mich im Augenblick als 
Hauptkandidat für die Fehlerquelle.

Ansonsten:
Ich hab mir grade auf github den Schaltplan deines CPLD-Boards 
angeschaut. Hast du sowohl +3,3V als auf VCC sauber versorgt?

Das Board hat grade mal einen GND-Pin. Wenn mehre Ausgänge des CPLDs 
gleichzeit schalten kann bei so einer sparsamen GND-Anbindung das 
Problem auftreten, dass sich die GND-Potentiale zwischen dem CPLD-Board 
und deinem Basisboard verschieben. Wenn die Verschiebung so weit geht, 
dass die Schaltschwelle von Eingängen angekratzt wird, lässt sich damit 
keine saubere Taktung realisieren (außer der Takt käme nicht vom 
Basisboard sondern würde auf dem CPLD-Board selbst erzeugt).

Aber fang erst mal an, die bestehende Takteinspeisung zu verbessern - so 
wie du es dir vorgenommen hast. Vielleicht läuft es dann ja schon wie 
gewünscht.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
W.S. schrieb:
> Und nochwas: Bei VHDL weiß unsereiner nie so recht, was tatsächlich
> dabei heraus kommt
Das kann man sich ganz problemlos im RTL-Schaltplan ansehen. Und für den 
Zähler oben ist ganz klar, was dabei herauskommt. Wenn dieser Zähler 
falsch zählt, dann ist irgendwas Grundlegendes faul. Dieses 
Hardwareproblem wird dieser Zähler auch bei einer direkten 
Schaltplaneingabe haben. Wie sieht denn die Hardware samt 
Entkopplungskondensatoren aus?

Michael schrieb:
> Sobald ich ein Oszi an die Taktleitung zum Messen der Steilheit der
> Fanke anlegen (CPLD + LED bei 3.3V), wird es noch verrückter:
Da hast du wohl Klingeln auf der Leitung. Immerhin kann dein CPLD mit 
Frequenzen im halben GHz-Bereich schon was anfangen.
Und mit solchem "Klingeln" lässt sich dann das wirre Verhalten des 
Zählers auch recht einfach erklären: weil so ein Überschwinger ggfs. 
eben nicht alle 4 Flipflops des Zählers zum Speichern bringt, wird ein 
beliebiger oder auch ungültiger Zustand angesprungen.

Achim S. schrieb:
> Ein Problem auf der Codeseite gibt es höchstens im ucf, wenn du dort
> einen ungeeigneten Pin zum Einspeisen des Takts angibst.
Das teilt der Synthesizer dann aber auch mit.

Michael schrieb:
> [1] https://github.com/1ux/BitConnector
Hilft leider nicht viel, wenn man nur das aus dem Screenshot zu sehen 
bekommt. Häng das Layout und den Schaltplan doch mal hier an.

: Bearbeitet durch Moderator
von Christoph Z. (christophz)


Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> Clock wird jetzt über einen FG-506 eingespeist. (Tastknopf + 2 kurze
> Kabel an  den Spitzen )

Wird in deinem Aufbau immer noch der Clock mit Hilfe von einem 
Oszilloskoptastkopf eingespeist? Am besten noch einer der mit 10:1 
Vorteiler?

Dann wird das nichts, einen CPLD Eingang mit irgendwas 10 bis 100 kOHm 
Eingangswiederstand zuverlässig zu treiben. Dein Tastkopf hat einen 10 
MOhm Widerstand in Serie (wenn 10:1).

von Michael K. (2ux)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich muss mir und euch leider zugestehen, dass ich momentan nicht Herr 
meiner eigenen Zeit bin. Ich bitte um Entschuldigung für diese 
Verzögerung.
@Achim S.

> dann kannst du ihn nicht vernünftig als Takteingang verwenden. Wirft dir
> deine Entwicklungssoftware keine Warnungen aus, wenn du den Takt darüber
> einspeist?

Nein, 1. bemerke ich keinen Unterschied und 2. gibt es keine derartige 
Warnung. Aber ich nutze nun ausschließlich „globalCLOCK“, wie du es dir 
wünscht.

> ... Deine Logikbeschreibung ist sauber, das Problem kommt nicht von der
> Seite. ...

Ich danke dir für die Klarstellung.


> Ist es auch nicht. Deine Logikbeschreibung ist sauber, das Problem kommt
> nicht von der Seite. Ein Problem auf der Codeseite gibt es höchstens im
> ucf, wenn du dort einen ungeeigneten Pin zum Einspeisen des Takts
> angibst.

Die ucf-Datei ist nicht das Problem. Auch mit einem „geeigneten“ Pin 
habe ich die selben Resultate.

> Wenn dein Messobjekt (CPLD) um ein Vielfaches schneller ist als dein
> Messgerät (60 MHz Oszi), dann kannst einige Fehlerursachen damit nicht
> rausmessen (z.B. einen CLK-Reversal in der Mitte der Flanke, der für das
> CPLD schon zur Doppeltaktung führt).

Das klingt für mich schon plausibel. Aber ich frage mich, ob dies bei 
solche niedrigen Frequenzen zum Tragen kommt?  (Tastendruck)

> Aber fang erst mal an, die bestehende Takteinspeisung zu verbessern - so
> wie du es dir vorgenommen hast. Vielleicht läuft es dann ja schon wie
> gewünscht.

Wie besprochen habe ich den Takt über einen Taster mit Tiefpass und 
Schmitt-Trigger angeschlossen. Resultat: läuft, aber sobald ich das Oszi 
dran hänge (habe es mit zwei verschiedenen Geräten getestet ) 
überspringt der Zähler wieder einige Ziffern.

siehe anbei das Oszillogramm zum Tastendruck (bit_flanke.png)
Lothar M.

> ...Und für den Zähler oben ist ganz klar, was dabei herauskommt....

Ich danke dir für die Klarstellung.

> Wie sieht denn die Hardware samt Entkopplungskondensatoren aus?

Guter Punkt! Ich habe gerade nochmal in der Xilinx-Spezifikation „A 
Quick JTAG ISP Checklist- XAPP104 (3.0.1) December 20, 2007“ 
nachgelesen:

„For CPLDs and PROMs, provide both 0.1 μF and 0.01 μF capacitors at 
every VCC point of the chip, attached directly to the nearest ground.“

Den 0.01 μF Kondensator habe ich nicht vorgesehen, nur den 0.1 μF. Soll 
mir das jetzt wirklich auf die Füße fallen ?

> Hilft leider nicht viel, wenn man nur das aus dem Screenshot zu sehen
> bekommt. Häng das Layout und den Schaltplan doch mal hier an.

Lieber Lothar, ich habe es dir angehangen.

Christoph Z.


> Wird in deinem Aufbau immer noch der Clock mit Hilfe von einem
> Oszilloskoptastkopf eingespeist? Am besten noch einer der mit 10:1
> Vorteiler?


Ich habe wirklich vieles versucht (aktuell mit Taster + 
Hardwareentprellung), unter anderem auch einen 1:1 Tastkopf.
Auf die Idee einen 1:10 Tastkopf zu verwenden, bin ich noch nicht 
gekommen ;) .


Liebe Grüße,

Michael

: Bearbeitet durch User
von Fast track to /dev/null (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich seh da einen Kurzschluss zw. 3V3 und GND über das Netz PWR_FLG.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Fast track to /dev/null schrieb:
> das Netz PWR_FLG
Das POWER_FLAG ist vermutlich ein Bauteil... ;-)

Michael K. schrieb:
> Aber ich frage mich, ob dies bei solche niedrigen Frequenzen zum Tragen
> kommt?  (Tastendruck)
Es ist keine Frage der Frequenz sondern der Flankensteilheit und 
das, was in dieser Flanke versteckt ist. Deine Messung ist da um 
mindestens 3 Zehnerpotenzen zu langsam. Wie gesagt: das, was das CPLD 
interessiert, spielt sich im ns-Bereich ab.

Blöderweise ist genau diese minimale Flankensteilheit bei den XC9500 
nirgends spzifiziert. Es wird lediglich gefordert, dass die Flanke 
"monoton" sein müsse. Und wie steil die Flanke dann sein muss, das wird 
hier ziemlich flapsig abgehandelt:
https://forums.xilinx.com/t5/CPLDs-Archived/XC9500-Clock-requirements/td-p/207765
Fazit: mach die Flanke so steil wie nur möglich!

> Den 0.01 μF Kondensator habe ich nicht vorgesehen, nur den 0.1 μF.
> Soll mir das jetzt wirklich auf die Füße fallen ?
Muss nicht, kann aber, kommt ja eben auf das Layout an. Und wie du darin 
das "directly to nearest" umgesetzt hast.

Die "Conclusions" der XAPP784 fassen das recht griffig zusammen: wenn 
man alle Regeln einhält, dann geht das:
https://www.xilinx.com/support/documentation/application_notes/xapp784.pdf

Michael K. schrieb:
> sobald ich das Oszi dran hänge überspringt der Zähler wieder
Überspringt der Zähler auch schon, wenn du nur die Messleitung ganz ohne 
Oszi anhängst?
Und wo wir grade beim Thema 1:1 und 10:1 sind: was für einen Tastkopf 
hast du da zur Messung verwendet?
Denn wenn so eine Messleitung solche Einflüsse zeigt, dann deutet das 
auf Reflexionen an der Flanke aufgrund nicht angepasster Impedanz hin.

: Bearbeitet durch Moderator
von Michael K. (2ux)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Lothar,

abermals möchte ich um Entschuldigung für meine späte Antwort bitten.
Leider hat mein momentaner Job so nichts mit dem hier gemeinsam.

> Es ist keine Frage der Frequenz sondern der Flankensteilheit ...

Ich glaube ich verstehe, was du sagen möchtest.
Ich habe mir mal die Flanken bei einem diskret aufgebauten CMOS Inverter 
angesehen.
Normalerweise schalten diese ja leistungslos, aber beim Umschalten gibt 
es einen kurzen Augenblick, an dem beide leiten. Wenn man nun eine 
Spannung an diesen Inverter anlegt, die irgendwo zwischen Leiten und 
Sperren ist, so kann es passieren, dass beide MOS-Fets "aufmachen". Wenn 
ich dann etwas mit dem Spannungspegel spiele, dann ist undefiniert, wann 
welcher Transistor wieder sperrt oder leitet.
Geht das in die Richtung, die du meinst ?

> Und wie steil die Flanke dann sein muss, das wird
> hier ziemlich flapsig abgehandelt

Du hast dir wirklich die Mühe gemacht, um für mich nachzusehen? Ich 
möchte mich herzlich bei dir bedanken.

> Muss nicht, kann aber, kommt ja eben auf das Layout an. Und wie du darin
> das "directly to nearest" umgesetzt hast.

Ach ja, das Layout. Ich habe es mal angehangen. Vielleicht fällt 
jemanden etwas auf. Die Entkopplungskondensatoren sind C3 auf der 
Vorderseite und C1 und C2 auf der Rückseite.

> Die "Conclusions" der XAPP784 fassen das recht griffig zusammen: ...
Ja, „Bulletproof CPLD Design Practices“ das ist genau nach meinem 
Geschmack. Vielen Dank !

> Überspringt der Zähler auch schon, wenn du nur die Messleitung ganz ohne
> Oszi anhängst?

Ja, sobald ich die Masseleitung des Tastkopfes mit an GND hänge, beginnt 
der Ärger. Der Zähler verschluckt sich noch mehr, wenn dann auch noch 
ein Oszi daran hängt.

> was für einen Tastkopf hast du da zur Messung verwendet?

Es ist ein PVP2150 von Rigol.

P.S. Das mit dem PWR_FLG war ein Notbehelf, um eine Fehlermeldung von 
KiCat aufzulösen. Ich weiß aber nicht mehr um was es ging, nur dass ich 
sie nicht verstanden habe. Es ist aber kein Kurzschluss.

: Bearbeitet durch User
von A. G. (grtu)


Bewertung
0 lesenswert
nicht lesenswert
Ich vermute, dass die fehlende Terminierung des Rechtecksignals (wie 
u.A. W.S. schon schrieb) Reflexionen verursacht, so dass die Flanken 
teilweise doppelt gezählt werden. Schaue mal wie dein Taktgenerator 
terminiert werden muss und baue eine entsprechende Terminierung ein 
(eventuell 50-Ohm-Widerstand gegen Ground).

Bei der nächsten Version des Boards würde ich dir vorschlagen gerade die 
Versorgung nochmal etwas 'stabiler' zu Routen, d.h. breitere 
Leiterbahnen (oder sogar Flächen), Ground nicht durch einen Ground-Pin 
durchzurouten usw.

von Achim S. (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Michael K. schrieb:
> Wenn
> ich dann etwas mit dem Spannungspegel spiele, dann ist undefiniert, wann
> welcher Transistor wieder sperrt oder leitet.
> Geht das in die Richtung, die du meinst ?

Das ist eine Möglichkeit (wenn die Flanken "zu langsam" sind und 
deswegen zu mehrfachem Umschalten führen).

Daneben gibt es nocht die Möglichkeit, dass die Flanken zu schnell sind 
und deswegen im Umschaltmoment aufgrund von Relektionen unsauber werden 
(das ist die Variante, bei der eine Terminierung helfen würde).

Michael K. schrieb:
> Ja, sobald ich die Masseleitung des Tastkopfes mit an GND hänge, beginnt
> der Ärger.

Das ist schon mal ganz, ganz schlecht. Es spricht dafür, dass dein 
Massebezug der verschiedenen Schaltungsteile zueinander nicht so ist, 
wie er sein sollte.

Michael K. schrieb:
> Ach ja, das Layout. Ich habe es mal angehangen. Vielleicht fällt
> jemanden etwas auf. Die Entkopplungskondensatoren sind C3 auf der
> Vorderseite und C1 und C2 auf der Rückseite.

Die Gute Nachricht vorweg: der Kondensator füf VCC_IO ist gut platziert 
(C3). Ich habe im Anhang mal beide Ebenen übereinander geblendet und in 
Gelb eingezeichnet, welchen Weg der Strom vom jeweiligen 
Stützkondensator zu den zugehörigen Anschlussbeinchen des ICs nehmen 
muss. C3 (unten) liegt direkt neben den zugehörigen Anschlussbeinchen 
und ist direkt angebunden. So soll es sein (nur dass die 
Versorgungsleitungen noch deutlich dicker sein sollten als in dieser 
Schaltung).

C1 (links) und C2 (rechts) dienen zum Stützen von VCC_INT - also der 
Spannung, mit der die Logik betrieben wird. C1 liegt zwar eigentlich auf 
der Rückseite direkt neben den beiden Anschlussbeinchen platziert. Aber 
es fehlt eine Durchkontaktierung für GND. Deswegen muss der GND-Strom 
von C1 erst zu der DuKo neben C2 fließen und dann wieder zurück - 
dadurch wird die Wirksamkeit von C1 deutlich verschlechtert.

C2 hat ebenfalls keine kurze Anbindung ans IC (wobei das beim VCC-Pin 
rechts auch nicht einfach möglich wäre, weil dort kein GND-Pin daneben 
liegt). Auch C2 wird durch die langen, dünnen Leiterbahnen kaum als 
Stützkondensator wirksam.

Tatsächlich ist das Layout so gebaut, dass der gesamte GND-Strom von 
VCC_int durch die eine, kleine DurchKontaktierung neben C2 fließen muss 
(wo sich die von Hand eingezeichneten gelben Linien kreuzen). Das ist 
ein No-Go - die GND-Anbindung deines CPLDs auf der Platine ist leider 
miserabel.

(Aber das Logo mit der Diana im Handstand ist künstlerisch ansprechend. 
Ich hab bei meinen Layouts aus Studie-Zeiten an solchen Stellen 
höchstens mal Strichmännchen oder so gemalt, die deutlich 
unprofessioneller aussehen ;-)

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
1 lesenswert
nicht lesenswert
Michael K. schrieb:
> Ach ja, das Layout. Ich habe es mal angehangen. Vielleicht fällt
> jemanden etwas auf.
Mir stechen die unheimlich ultraschmalen Leiterbahnen der gesamten 
Versorgung ins Auge. Aber auch die sonstigen Leiterbahnen sind unnötig 
schmal. Zudem sieht das gesamte Layout irgendwie etwas "unbeholfen" oder 
nach Autorouter aus.

Achim S. schrieb:
> die GND-Anbindung deines CPLDs auf der Platine ist leider miserabel.
Und die GND-Anbindung ist nur die eine Hälfte der Versorgung. Die 
Vcc-Anbindung sieht nicht wesentlich besser aus. Und HF-mäßig sollte Vcc 
das selbe Potential wie GND sein.

Kurzversion: diese Platine wird nie zuverlässig laufen, denn irgendein 
Design wird garantiert für zu viel Ground-Bouncing durch zu viele SSO 
(Simultan schaltende Outputs) sorgen (z.B. 
https://www.xilinx.com/support/answers/20417.html).
Du kannst niemals sicher sein, ob du einen Fehler in deinem neuen 
HDL-Design hast, oder ob wieder mal das schlechte Layout der 
Leiterplatte urige Effekte macht.

BTW: wenn du auch die restlichen Bauteile wie den Schalter und den 
JTAG-Pinheader usw. in SMD ausführst, dann gehen diese Bauteile nur auf 
einer Lage "im Weg um". Die andere Kupferlage hast du frei zur 
Verfügung.

von Michael K. (2ux)


Bewertung
0 lesenswert
nicht lesenswert
Wow, ich danke euch Dreien, das klingt sehr plausibel. Das ist zwar eine 
ganz schöne Klatsche, aber so kann ich daraus lernen.

Ich werde mich der Sache annehmen und wieder kommen wenn ich fertig bin.

Herzlich Dank noch einmal für eure Kritikpunkte.

Michael

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Michael K. schrieb:
> Das ist zwar eine ganz schöne Klatsche
Blumen waren grade alle... ;-)

> Ich werde mich der Sache annehmen und wieder kommen wenn ich fertig bin.
Viel Erfolg, lass uns das Layout mal sehen, vor du die Platine in 
Auftrag gibst. Und beim Layouten immer wieder mal nur eine einzige 
Kupferlage (ohne Bestückungsdruck o.ä.) einschalten. Denn nur so siehst 
du, wo auf der Platine tatsächlich noch Platz ist und ob sich irgendwo 
Leiterbahnen unnötig in einer Ecke drängeln.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.