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


von Der A. (der-albi)


Angehängte Dateien:

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
von Raimund R. (corvuscorax)


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.

von Der A. (der-albi)


Angehängte Dateien:

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

von Albi G. (deralbi)


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?

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.