Wie entwerfen Sie einen CMOS-Puffer mit genau der gleichen Verzögerung wie ein CMOS-Inverter?

Jeder weiß, dass ein CMOS-Inverter einfach ein PMOS ist, der mit einem NMOS verbunden ist. Es gibt Situationen im asynchronen Design, in denen wir die Laufzeitverzögerung des Wechselrichters in einem parallelen Signal kompensieren müssen, das neben dem anderen Signal läuft. In diesem Fall kann ich sehen, dass Designer einen Puffer in Schaltplänen auf Gate-Ebene hinzufügen.

Aber ich muss diesen Puffer selbst mit CMOS-Zellenbibliotheken implementieren, und es scheint mir der vernünftigste Ansatz zu sein, einfach zwei Inverter in Reihe zu schalten, die das Signal zweimal invertieren und somit wie ein Puffer wirken. Aber es scheint mir, dass die Ausbreitungsverzögerung auch verdoppelt wird.

Wie kann man einen Puffer mit genau der gleichen Laufzeitverzögerung eines Inverters haben?

Können Sie Ihre invertierten und nicht invertierten Signale nicht einfach in D-Flip-Flops (DFFs) einspeisen? Die Flip-Flop-Ausgänge sollten ziemlich genau synchronisiert sein. Oder verwenden Sie vielleicht eine DFF-Zellbibliothek mit kostenlosen Ausgängen. Ich habe noch nie einen Chip entworfen. Aber wenn ich zwei Signale in einem FPGA synchronisieren müsste, würde ich das tun.
In asynchronen Schaltungen gibt es keine Uhr.
Oh, ich sehe, Sie sagten asynchrones Design. Nun, lassen Sie mich Sie Folgendes fragen: Von wie viel Verzögerung sprechen wir? Wie groß ist die Verzögerung des Zwei-Transistor-Wechselrichters, wenn er in einem IC implementiert ist? Sind es nicht Pikosekunden?
Können Sie beispielsweise 3 Inverter für den invertierenden Pfad und 4 für den nicht invertierenden Pfad verwenden? Können Sie einige von ihnen mit einer kapazitiveren Last belasten, um sie zu verlangsamen? Oder verwenden Sie FETs ohne Mindestabmessung für einige und nicht für andere?
@mkeith: oh! Sie haben mir eine Frage gestellt, die mir tatsächlich geholfen hat, die richtige Antwort zu bekommen! Die Antwort auf Ihre Frage lautet, dass dies von der Länge und Breite des Transistors abhängt. Aber dann wird mir klar, dass ich eine Lösung sehe: Wählen Sie kleine Transistoren für einen Puffer und einen größeren für einen einzelnen Wechselrichter. In diesem Fall ist die Ausbreitungsverzögerung dieselbe.
@Ehsan, es wäre wirklich hilfreich, wenn du deine Antwort irgendwann aufschreibst und hier deine eigene Frage beantwortest. Das ist völlig legal und wünschenswert und wird die Seite für andere Leute, die später kommen, besser machen. Sie müssen keine proprietären Details preisgeben, sondern nur ein bisschen mehr, um der nächsten Person zu helfen.
Achtung: Genau die gleiche Verzögerung durch Dimensionierung zu erreichen, ist schwieriger als es klingt. Anstiegs- und Abfallverzögerungen sind unterschiedlich. Die Verzögerung ist abhängig von Temperatur und Ausgangslast. Aus diesem Grund verwendet das asynchrone Design tendenziell andere Strukturen wie das Muller C-Element.

Antworten (3)

Eine übliche Lösung besteht darin, zwei Pfade zu haben, wie in der Abbildung unten gezeigt. Der erste Pfad ist eine Inverterkette, um das Signal zu puffern, oder es könnte ein einzelner Inverter sein, wenn die Last niedrig ist. Der zweite Pfad ist fast identisch mit dem ersten, aber ein Inverter wird durch eine Übertragungsgatter-ähnliche Struktur ersetzt.

Mit einem Simulator sollte es möglich sein, die Verzögerungen auszugleichen.

(Bitte beachten Sie, dass der Bulk an Masse und vdd für NMOS bzw. PMOS gebunden werden sollte. Er ist nicht korrekt gezeichnet.)

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Wenn an den Geräteeigenschaften herumgefummelt werden muss, um die Verzögerungen genau anzupassen, ist es dann möglich, einfach einen wirklich langsamen Wechselrichter zu bauen, der zum oberen Paar passt?
Natürlich gibt es verschiedene Möglichkeiten, um das gleiche Ergebnis zu erzielen. Die Skalierung eines Wechselrichters könnte auch funktionieren.
Ich habe die obige Schaltung simuliert, es gibt immer noch eine Abweichung von etwa 85 ps. Gemessen bei 50 % Signalpegel.

Ich würde ein Exklusiv-Oder-Gatter vorschlagen. Wenn Sie einen Eingang hoch binden, haben Sie einen Inverter. Wenn Sie einen Eingang niedrig binden, haben Sie einen Puffer. Die Laufzeit sollte gleich sein.

Ich weiß nicht genug über die Innereien, um zu wissen, ob die Antwort richtig ist, aber +1 für die Idee!
Nicht CMOS, aber das gute alte TTL-Datenbuch hat zwei Tabellen mit Laufzeitverzögerungen (Tplh, Tphl), eine für "anderer Eingang hoch", die andere für "anderer Eingang niedrig". Werte unterscheiden sich um ca. 20-30% also, zumindest in TTL, nicht ganz gleich. Also mit Vorsicht verwenden.
Diese Idee ist cool, aber aufgrund der Tatsache, dass der xor 8 Transistoren verwendet, ineffizient. @Marios Antwort ist eigentlich die gleiche wie Ihre Antwort. Ich denke, der effizienteste Weg besteht darin, den Wechselrichter auf Transistorebene zu skalieren.

Ein Ansatz besteht darin, sowohl gepufferte als auch invertierte Signale über dieselbe Stufe zu erzeugen, und es gibt zwei klassische analoge Ansätze für das Problem.

Ich werde sie nicht in CMOS übersetzen, da ich kein Fachwissen auf oder unterhalb der Zellbibliotheksebene habe. Sie können vor oder nach der Stufe selbst angepasste Stufen für die Spannungspegelwandlung erfordern.

Der erste ist der klassische Phasenteiler: Basierend auf einem Common-Source-Verstärker beträgt seine Verstärkung ungefähr -R1/R2 oder -1 bei Widerständen mit gleichem Wert. (Komponentenwerte sind ansonsten unsinnig). In dieser Form ist es eindeutig kein CMOS, obwohl angepasste aktive Lasten die Widerstände ersetzen würden. Ein Nachteil ist, dass sein maximaler Spannungshub nur die Hälfte der Versorgungsschiene beträgt und der DC-Pegel an jedem Ausgang unterschiedlich ist.

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Das zweite ist das langschwänzige Paar, das die Strömung von einem Bein zum anderen lenkt. Dieselben Bemerkungen gelten für das Ersetzen von Widerständen durch aktive Lasten und unsinnige Komponentenwerte.

Ich bin nicht davon überzeugt, dass es eine so gute Balance der Ausbreitungsverzögerungen erreichen wird, aber zumindest können die Ausgänge die gleichen Spannungspegel haben und sind nicht auf die Hälfte der Versorgung beschränkt.

schematisch

Simulieren Sie diese Schaltung

Ich denke, Ihr erster Satz ist hier vielleicht der beste Vorschlag. Wenn das Signal beispielsweise von einem UND-Gatter erzeugt wird, können Sie es mit einem NAND-Gatter replizieren, das an dieselben Eingänge gebunden ist, und das sollte (AFAICS) dieselbe Laufzeitverzögerung haben.
NAND ist normalerweise schneller als AND, dessen Implementierung normalerweise ein NAND ist, gefolgt von einem Inverter.