0 ist nicht 0, obwohl es 0 ist

#637650
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.
#638034
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
#638038
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?
#638196
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
#638235
Lesenswert?

Also, im CPLD sieht es folgendermaßen aus:
1
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:
1
 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).
Gast #638250
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???
#638273
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.
#638286
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
#638293
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren