mikrocontroller.net

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

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.