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.
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?
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
>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?
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 den Xilinxbausteinen weis ich, daß die manchmal zu langsm hochkommen um von der Software als konfiguriert erkannt werden zu können.
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).
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
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???
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.
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
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.
warum hast Du keinen Pullup dran? Die Schaltung ist ohne Pullup wertlos. 'Z' ist kein Zustand den ein DSP auswerten kann !?!?!?!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.