mikrocontroller.net

Forum: FPGA, VHDL & Co. 0 ist nicht 0, obwohl es 0 ist


Autor: Christian Peters (kron)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich stieß hier gerade auf ein komisches Problem.
Es gibt ein CPLD (xc9536XL) und ein FPGA (xc3s50),
die beide ein low-aktives Ready-Signal generieren.
Die Signale sind getristated und es gibt jeweils ein Enable.
Der, der ready ist, zieht dann das Signal auf 0.

Jetzt habe ich mit dem Oszi festgestellt, dass das CPLD
das Ready zwar runterzieht, aber es kommt spannungstechnisch
nicht mal annähernd zu 0V. Die 1 liegt bei 3,3V und das Ready
vom CPLD liegt so bei 1,5V.
Dieses Ready wird dann natürlich nicht erkannt und blockiert mir alles.

Kann mir jemand einen Tip geben, woran das liegen kann?

Die Readys sind auf dem Board ganz normal verdrahtet,
es sind keine Pullups oder sonst etwas dazwischen.

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal mit dem Oszi nachgeschaut ob der Output vom CPLD wirklich statisch 
auf 1.5 V liegt, oder ob der evtl. hochfrequent zw. 0V und 3.3V 
schwingt, und nur dein Multimeter das dann als 1.5 interpretiert?

Autor: Johannes T. (johnsn)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schluss gegen Masse ist hoffentlich schon auszuschließen?

> Es gibt ein CPLD (xc9536XL) und ein FPGA (xc3s50),
Was genau meinst du damit? Hast du es für beide Gatearrays ausprobiert?

Ich kann mich erinnern, dass es mal einen Bug mit genau einem CPLD (weiß 
leider nicht mehr welches das war) und ISE7 gab. Nach der Synthese 
wurden alle Pins am Chip einfach invertiert interpretiert. D.h. eine 
anliegende logische '0' am Eingang wurde als logisch '1' interpretiert 
und vice versa. Glaube aber nicht, dass das dein Problem ist.

Gruß,
Johnsn

Autor: Christian Peters (kron)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Mal mit dem Oszi nachgeschaut ob der Output vom CPLD wirklich statisch
>auf 1.5 V liegt, oder ob der evtl. hochfrequent zw. 0V und 3.3V
>schwingt, und nur dein Multimeter das dann als 1.5 interpretiert?

Ja, ich habe ja mit 'nem Oszi gemessen. Das CPLD zieht wirklich auf 1,5V 
runter.
Hab das Runterziehen auch mal verlängert, weil ich dachte, es braucht 
einfach
länger, um auf 0V zu kommen, aber nichts dergleichen, es bleibt schön 
bei 1,5V.

>> Es gibt ein CPLD (xc9536XL) und ein FPGA (xc3s50),
>Was genau meinst du damit? Hast du es für beide Gatearrays ausprobiert?
Nein, das mache ich nachher gleich, aber die FPGA-Sachen liefen 
eigentlich,
also gehe ich davon aus, dass das FPGA die 0 korrekt runterzieht.

>Ich kann mich erinnern, dass es mal einen Bug mit genau einem CPLD (weiß
>leider nicht mehr welches das war) und ISE7 gab. Nach der Synthese
>wurden alle Pins am Chip einfach invertiert interpretiert. D.h. eine
>anliegende logische '0' am Eingang wurde als logisch '1' interpretiert
>und vice versa. Glaube aber nicht, dass das dein Problem ist.

Ich arbeite mit ISE 8.1.
Die 0 ist auch kein Eingang am CPLD sondern ein Ausgang.

Die 1 beim CPLD ist ja 3,3V.
Beim FPGA ist aber in der ISE für die Pins standardmäßig LVCMOS25
eingestellt. Kann das problematisch sein?

Autor: Roger Steiner (edge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian Peters wrote:

>es sind keine Pullups oder sonst etwas dazwischen.

pullups sind in der Regel zwischen Speisespannung und einem Signal.
Und wenn du bei deiner Schaltung tatsaechlich keinen verbaut hast,
dann ist da doch ein Fehler in deinem Konzept.

> Die 0 ist auch kein Eingang am CPLD sondern ein Ausgang.

hoffentlich open-drain, sowie beim FPGA auch!

> Die 1 beim CPLD ist ja 3,3V.

mit externem pull-up? es liest es sich so als ob du push-pull outputs 
miteinander verbunden hast. keine gute Idee.

Cheers, Roger

Autor: Ludger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Von den Xilinxbausteinen weis ich, daß die manchmal zu langsm hochkommen 
um von der Software als konfiguriert erkannt werden zu können.

Autor: Christian Peters (kron)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, im CPLD sieht es folgendermaßen aus:
RDY_ADC <= rdy_n when ((rdy_out_en_n = '0')) else 'Z';

RDY_ADC ist der Pinout, rdy_n ist das ready-Signal, und rdy_out_en_n
ist der Tristate-Schalter.

Im FPGA ist es ganz ähnlich:
 RDY <= rdy_ua_adec_n when rdy_oe_n = '0' else 'Z'; 

Hier ist RDY der Pin, rdy_ua_adec_n ist das ready-Signal und rdy_oe_n
ist der Tristate-Schalter.

Beide Ausgänge gehen auf einen Eingangspin eines DSP (den 
ready-Eingang).

Autor: Roger Steiner (edge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tristate != Open-Drain

ausser dein rdy_n und rdy_ua_adec_n ist fest auf 0 verdrahtet.

RDY_ADC <= '0' when (rdy_n = '0' and rdy_out_en_n = '0') else 'Z';

RDY <= '0' when (rdy_ua_adec_n = '0' and rdy_oe_n = '0') else 'Z';


Cheers, Roger

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christian,

also nach Deiner VHDL-Beschreibung kann das CPLD genausogut eine 1 
treiben,
und das FPGA auch. Schlimmstenfalls treiben beide entgegengesetzt!
So wie ich es verstanden habe, willst Du aber was anderes realisieren.

Eigentlich müsste es doch heißen:
RDY_ADC <= '0' when rdy_out_en_n='0' else 'Z';

Wo ist eigentlich der Pullup und wie groß ist er? Nutzt Du einen 
internen
im DSP???

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der Roger war schneller...

Autor: Christian Peters (kron)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, Entschuldigung, das habe ich nicht dazugeschrieben,
die beiden ready-Signale werden natürlich auch low gesetzt,
wenn der Tristate-Schalter offen ist.

Es gibt KEINEN Pullup!

Und es ist natürlich sichergestellt,
dass zu einem Zeitpunkt nur eines der beiden Readys kommt.

Autor: Roger Steiner (edge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian Peters wrote:
> die beiden ready-Signale werden natürlich auch low gesetzt,
> wenn der Tristate-Schalter offen ist.

offen?

> Es gibt KEINEN Pullup!

errm, im Ruhezustand floatet das Ding?
Selektiert der DSP vorher welche ready Leitung er sehen will?

> Und es ist natürlich sichergestellt,
> dass zu einem Zeitpunkt nur eines der beiden Readys kommt.

vermutlich ist in der Logik noch ein Fehler drinn.

Cheers, Roger

Autor: Christian Peters (kron)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Herrje, offen heißt, wenn das ready-Signal durchkann.
Also nochmal ganz klar: wenn der Tristate-Schalter auf 0 ist, so ist
auch das Ready-Signal auf 0.

>errm, im Ruhezustand floatet das Ding?
im Ruhezustand ist es getristated.

>Selektiert der DSP vorher welche ready Leitung er sehen will?
Ja, er macht einen Lese- oder Schreibzugriff
und löst damit die ready-Generierung aus, und das
kann er nur an einer Stelle zur Zeit.

>vermutlich ist in der Logik noch ein Fehler drinn.
Nein. Siehe oben.

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum hast Du keinen Pullup dran? Die Schaltung ist ohne
Pullup wertlos. 'Z' ist kein Zustand den ein DSP
auswerten kann !?!?!?!

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wow. ein FPGA, ein CPLD und ein DSP in einer Schaltung. Darf man 
erfahren was es werden soll?

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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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