mikrocontroller.net

Forum: FPGA, VHDL & Co. Bidirektionaler Multiplexer im CPLD


Autor: Der Albi (der-albi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.
Ich habe hier einen CoolRunnter II der wie im Anghängten PDF 2 SD-Karten 
multiplexen soll. (siehe Seite 4)

Leider ist mir die Schaltung ein wenig zu komplex.. :-(

Ich habe 2 Fragen:
1) Sind die verwendeten Gatter alles nur ORs? (bis auf die FlipFlops) 
Laut Schaltsymbolik ist das so.

2) Die Ausgangstreiber: beduetet der Punkt vor dem Eingang, dass der 
Ausgang der invertirte Signal ist?

Ich habe das ganze in der Xillinx ISE nachgebaut und habe damit keinen 
Erfolg :-(


Die ausgänge haben ein Konstantes Level..
mehr fehlerbeschreibung kann ich nicht geben, das tut mir leid... 
Versteht jemand die schaltung richtig?

Ich wäre für jede Hilde dankbar :-)
MFG
Albi.

: Verschoben durch Admin
Autor: Raimund Rabe (corvuscorax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Albi schrieb:
> Hallo.
> Ich habe hier einen CoolRunnter II der wie im Anghängten PDF 2 SD-Karten
> multiplexen soll. (siehe Seite 4)
>
> Leider ist mir die Schaltung ein wenig zu komplex.. :-(
>
> Ich habe 2 Fragen:
> 1) Sind die verwendeten Gatter alles nur ORs? (bis auf die FlipFlops)
> Laut Schaltsymbolik ist das so.

Das Schaltsymbol der Gatter steht für ein AND und nicht für ein OR.
  _
-|   \
 |    |-   = AND
-|___/

 __
-\   \
  |   |-   = OR
-/___/

Unterschied jetzt klar?


> 2) Die Ausgangstreiber: beduetet der Punkt vor dem Eingang, dass der
> Ausgang der invertirte Signal ist?

Nicht zwangsläufig! Die Negierung ist nicht so ohne weiteres zw. Ein- 
und Ausgang austauschbar. Bei den AND-Gattern vor den CLK-Eingangen der 
Flip-Flops z.B. sind nur die Eingängssignale negiert - die Funktion des 
Gatters selbst bleibt weiterhin ein AND. Aus Sicht der boolschen Algebra 
allerdings wird aus einem an allen Eingängen negiertem AND ein NOR (und 
kein 'nur' OR). In Figure 4 ergibt übrigens tatsächlich die 
Kombination von Gatter B1 und dem nachfolgenden Inverter B (rechts oben 
in der Ecke) ein OR (also Q + SEL + ... = SD1)

> Ich habe das ganze in der Xillinx ISE nachgebaut und habe damit keinen
> Erfolg :-(
>
>
> Die ausgänge haben ein Konstantes Level..

Haste dran gedacht, daß die Ausgangsbuffer (B in Figure 4) Tri-State 
sein können? Immer dann, wenn das entsprechende SEL-Signal high wird, 
geht der Ausgang (SD1 o. SD2) in den hochohmigen Zustand und der Pin 
funktioniert als Eingang. Den Pull-Up-Widerstand nicht vergessen.

> mehr fehlerbeschreibung kann ich nicht geben, das tut mir leid...

Mehr Hilfestellung kann ich nicht geben, das tut mir leid... :-)

> Versteht jemand die schaltung richtig?

Yip - alles reine Logik! Vorausgesetzt man weiß genau was welches Gatter 
macht. ;-)

> Ich wäre für jede Hilde dankbar :-)
> MFG
> Albi.

Autor: Der Albi (der-albi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Danke erstmal für die Klarstellung.

Ich hab den Schaltplan jetzt mit AND-Gattern aufgebaut. Leider geht das 
ganze immernoch nicht. Es liegt nicht an exteren PullUps oder so.

Ich hab den Plan nun mitlerweile zig mal verglichen und er stimmt 
haargenau mit seinem Vorbild überein. Also ich denke entweder ist der 
Plan schrott, oder mein CPLD.. wobei der CPLD noch geht :-)

Ich hänge den Plan mal an..
Ist mit der Xilinx IDE 10.1 gezeichnet...

Autor: Albi G. (deralbi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Höhöhö. Einfch mal die Flipflops mit Latches ersetzt und siehe da....
Gaaanz toll. Funktioniert.

Nun ist es bei mir aber so, dass ich keine externen Pullups vorgesehen 
habe.
Es stellt sich aber heraus, dass die internen total hochohmig sind. Kann 
man da noch was tun?

Das Dargestellte ist ja ein Quasi OpenDrain Ausgang... das ist für Hohe 
Frequenzen stromsparend eh nicht zu realisieren.. :-(

Was ich brauche wäre ein intelligenter Treiber, der solange treibt, wie 
er geändert werden soll und sobald das Soll-Level erreicht ist, soll er 
abschalten. Den Rest sollte ein KEEPER-Element machen.

Bisher mache ich das so:

Sollwert -> D FlipFlop Q -> Treiber
Zusätklich  (D XOR AktuellesAusgangsLevel) --> Enable des Treibers sowie 
Clockimpuls für das FlipFlop.

Prolem ist: das Treibt dummerweise auch gegen jede Änderung von Außen 
(Wegen XOR zu AktuellesAusgangsLevel - greife ich aber vor dem Treiber 
ab ( da würde ich von einer exteren  Änderung nix mitbekommen) würde ich 
den treiber nur viel zu kurz anmachen :-(

Wie realisiere ich das, dass ich nur nach interner Änderung nach außen 
treibe?
Hat da jemand nen Kunstgriff parat?

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.