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


von Christian P. (kron)


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.

von Εrnst B. (ernst)


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?

von Johannes T. (johnsn)


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

von Christian P. (kron)


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?

von Roger S. (edge)


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

von Ludger (Gast)


Lesenswert?

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

von Christian P. (kron)


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

von Roger S. (edge)


Lesenswert?

Tristate != Open-Drain

ausser dein rdy_n und rdy_ua_adec_n ist fest auf 0 verdrahtet.
1
RDY_ADC <= '0' when (rdy_n = '0' and rdy_out_en_n = '0') else 'Z';
2
3
RDY <= '0' when (rdy_ua_adec_n = '0' and rdy_oe_n = '0') else 'Z';

Cheers, Roger

von Mark (Gast)


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

von Mark (Gast)


Lesenswert?

der Roger war schneller...

von Christian P. (kron)


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.

von Roger S. (edge)


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

von Christian P. (kron)


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.

von Mark (Gast)


Lesenswert?

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

von Εrnst B. (ernst)


Lesenswert?

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

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.