DE102021116231A1 - Störimpuls-freier multiplexer - Google Patents

Störimpuls-freier multiplexer Download PDF

Info

Publication number
DE102021116231A1
DE102021116231A1 DE102021116231.9A DE102021116231A DE102021116231A1 DE 102021116231 A1 DE102021116231 A1 DE 102021116231A1 DE 102021116231 A DE102021116231 A DE 102021116231A DE 102021116231 A1 DE102021116231 A1 DE 102021116231A1
Authority
DE
Germany
Prior art keywords
signal
activated
ready
data input
signals
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE102021116231.9A
Other languages
English (en)
Inventor
William James Dally
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nvidia Corp
Original Assignee
Nvidia Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nvidia Corp filed Critical Nvidia Corp
Publication of DE102021116231A1 publication Critical patent/DE102021116231A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03KPULSE TECHNIQUE
    • H03K19/00Logic circuits, i.e. having at least two inputs acting on one output; Inverting circuits
    • H03K19/003Modifications for increasing the reliability for protection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • G06N3/065Analogue means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Abstract

Wenn ein Signal Störimpulse aufweist, kann sich die Logik, die das Signal empfängt, in Reaktion darauf ändern, wodurch Knoten innerhalb der Logik geladen und/oder entladen werden und Energie verbraucht wird. Die Bereitstellung eines Störimpuls-freien Signals kann die Anzahl der Lade- und/oder Entladevorgänge der Knoten reduzieren, wodurch die Verlustleistung verringert wird. Ein Vorgehen zur Eliminierung von Störimpulsen bzw. Störungen in einem Signal besteht darin, ein Speicherelement einzufügen, das das Signal abtastet, nachdem es sich geändert hat, um ein störungsfreies Ausgangssignal zu erzeugen. Das Speicherelement wird durch ein „Bereitschafts“-Signal mit einer Verzögerung aktiviert, die der Verzögerung der Schaltung entspricht, die das Signal erzeugt. Das Vorgehen verhindert, dass sich das Ausgangssignal ändert, bis der endgültige Wert des Signals erreicht ist. Das Ausgangssignal ändert sich nur einmal, wodurch typischerweise die Anzahl der Lade- und/oder Entladevorgänge von Knoten in der Logik, die das Signal empfängt, reduziert wird, so dass auch die Verlustleistung verringert wird.

Description

  • TECHNISCHES GEBIET
  • Die vorliegende Offenbarung bezieht sich auf die Verhinderung der Ausbreitung von Störimpulsen in Schaltungen. Insbesondere bezieht sich die Offenbarung auf die Eliminierung von Glitches bzw. Störimpulsen in einem Signal durch Einfügen eines Speicherelements, das das Signal abtastet, um ein Störimplusfreies Ausgangssignal zu erzeugen.
  • HINTERGRUND
  • Herkömmliche sequentielle Schaltungen weisen eine kombinatorische Logik auf, deren Eingänge von synchronen Registern oder Flip-Flops angesteuert werden. „Kombinatorische Logik“ bezieht sich auf eine Logik, die eine oder mehrere Eingaben empfängt, die kombiniert werden, um eine Ausgabe zu erzeugen, ohne einen Zustand für die Eingaben, die Ausgabe oder irgendwelche Zwischenwerte zu speichern. Mit anderen Worten: Eine kombinatorische Logik ist „zustandslos“ und kann asynchron (nicht durch ein Taktsignal gesteuert) sein. Im Gegensatz dazu speichern die Register bei sequentiellen Schaltungen (sequentieller Logik) den Zustand.
  • Bei der steigenden Flanke eines Taktsignals ändern sich die Ausgaben der Register genau einmal. Mehrere Pfade durch die kombinatorische Logik können jedoch dazu führen, dass sich die von der kombinatorischen Logik ausgegebenen Signale mehrfach ändern, bevor sie ihren endgültigen Wert erreichen. Die Signale können Dateneingaben für einen Multiplexer und ein Auswahlsignal sein, das den Multiplexer veranlasst, einen der Dateneingaben für die Ausgabe auszuwählen. Die Ausgabe des Multiplexers kann sich als Reaktion auf die sich ändernden Daten- und Auswahleingaben mehrmals ändern, bevor sie sich auf einen endgültigen Zustand einpendelt. Die Änderungen bei der Ausgabe des Multiplexers werden als Störimpulse (Glitches) betrachtet, und eine zusätzliche kombinatorische Logik, die die Ausgabe empfängt, kann darauf mit dem Laden und/oder Entladen von Knoten und der Vergeudung von Leistung reagieren. Die Bereitstellung eines Störungsimpuls-freien Ausgangssignals kann die Anzahl der Lade- und/oder Entladevorgänge der Knoten reduzieren, wodurch die von der zusätzlichen kombinatorischen Logik verbrauchte Leistung verringert wird. Es besteht die Notwendigkeit, diese Probleme und/oder andere Probleme, die mit dem Stand der Technik verbunden sind, zu lösen.
  • ZUSAMMENFASSUNG
  • Wenn ein Signal einen Störimpuls aufweist, kann sich die Logik, die das Signal empfängt, in Reaktion darauf ändern, wodurch Knoten innerhalb der Logik aufgeladen und/oder entladen werden und Leistung vergeudet wird. Im Kontext der folgenden Beschreibung ist ein Störimpuls bzw. Glitch mindestens ein High- oder Low-Puls von mindestens einem Bit eines Signals innerhalb eines Taktzyklus. Genauer gesagt ist der Puls ein High-Low-High-Übergang oder ein Low-High-Low-Übergang. Die Bereitstellung eines Störimpuls-freien Signals kann die Anzahl der Lade- und/oder Entladevorgänge der Knoten reduzieren, wodurch die Verlustleistung verringert wird. Ein Verfahren zur Beseitigung von Störimpulsen in einem Signal besteht darin, ein Speicherelement einzufügen, das das Signal abtastet, nachdem seine Änderungen aufgehört haben, um ein Störimpuls-freies Ausgangssignal zu erzeugen. Das Speicherelement wird durch ein „Bereit“-Signal bzw. Bereitschaftssignal mit einer Verzögerung freigegeben bzw. aktiviert, die der Verzögerung der Schaltung entspricht, die das Signal erzeugt. Das mittels bereit aktivierte Speicherelement verhindert, dass sich das Ausgangssignal ändert, bis der endgültige Wert des Signals erreicht ist. Das Ausgangssignal ändert sich nur einmal, wobei es von Low zu High- oder von High zu Low übergeht, wodurch typischerweise die Anzahl der Lade- und/oder Entladevorgänge von Knoten in der Logik, die das Signal empfangen, reduziert wird, so dass auch die Verlustleistung reduziert wird.
  • Ein Verfahren, ein computerlesbares Medium und ein System werden zur Verhinderung der Ausbreitung von Störimpulsen offenbart. In einer Ausführungsform ist eine Decoderschaltung ausgestaltet, die ein Auswahl-Bereitschafts-Signal empfängt, das negiert ist, bis sich ein von einer kombinatorischen Logik erzeugtes Auswahlsignal nicht mehr ändert, und das aktiviert wird, nachdem sich das Auswahlsignal nicht mehr ändert. Die Decoderschaltung erzeugt entsprechend dem Auswahlsignal mindestens ein Abtast-Freigabesignal, das einem Satz von Dateneingabesignalen entspricht, wobei das mindestens eine Abtast-Freigabesignal negiert ist, während das Auswahl-Bereitschaftssignal negiert ist, und als Reaktion auf die Aktivierung des Auswahl-Bereitschaftssignals aktiviert wird. Die Decoderschaltung erzeugt ein Haltesignal, das aktiviert ist, während das mindestens eine Abtast-Freigabesignal negiert ist, und das als Reaktion auf die Aktivierung des mindestens einen Abtast-Freigabesignals aktiviert wird. Eine Abtastschaltung ist so ausgestaltet, dass sie ein Ausgabesignal unverändert hält, während das Haltesignal aktiviert ist, und eines der Dateneingabesignale gemäß dem mindestens einen Abtast-Freigabesignal abtastet, während das Haltesignal negiert ist, um einen Wert des abgetasteten Dateneingabesignals auf das Ausgabesignal zu übertragen.
  • Figurenliste
    • 1A stellt ein Blockdiagramm einer Störimpuls-freien Abtastschaltung und einer kombinatorischen Logik gemäß einer Ausführungsform dar.
    • 1B stellt ein Zeitdiagramm für die in 1A gezeigte Schaltung gemäß einer Ausführungsform dar.
    • 1C stellt ein Flussdiagramm eines Verfahrens zum Erzeugen eines Störimpuls-freien Signals gemäß einer Ausführungsform dar.
    • 1D stellt eine Schaltung zur Störimpuls-freien Abtastung gemäß einer Ausführungsform dar.
    • 1E stellt eine überlappende Inverterschaltung gemäß einer Ausführungsform dar.
    • 1F stellt eine weitere Störimpuls-freie Abtastschaltung gemäß einer Ausführungsform dar.
    • 1G stellt eine asymmetrische Bereitschaftssignal-Erzeugungsschaltung gemäß einer Ausführungsform dar.
    • 1H stellt ein Zeitdiagramm für die asymmetrische Bereitschaftssignal-Erzeugungsschaltung von 1G gemäß einer Ausführungsform dar.
    • 2A stellt ein Blockdiagramm eines Störimpuls-freien N-zu-1-Multiplexers gemäß einer Ausführungsform dar.
    • 2B stellt ein Zeitdiagramm für den Störimpuls-freien N-zu-1-Multiplexer aus 2A gemäß einer Ausführungsform dar.
    • 2C stellt ein Blockdiagramm des zeitgesteuerten Decoders von 2A gemäß einer Ausführungsform dar.
    • 2D stellt ein Flussdiagramm eines Verfahrens zum Erzeugen eines Ausgabesignals eines Störimpuls-freien Multiplexers gemäß einer Ausführungsform dar.
    • 2E stellt eine Schaltung zur Erzeugung eines gestreckten Bereitschaftssignals gemäß einer Ausführungsform dar.
    • 2F stellt ein Zeitdiagramm für die Schaltung zur Erzeugung des gestreckten Bereitschaftssignals aus 2E gemäß einer Ausführungsform dar.
    • 2G stellt eine Schaltung zur schnellen Rückführung gemäß einer Ausführungsform dar.
    • 2H stellt ein Zeitdiagramm für die Schaltung zur schnellen Rückführung von 2G gemäß einer Ausführungsform dar.
    • 3 stellt eine Parallelverarbeitungseinheit gemäß einer Ausführungsform dar.
    • 4A stellt einen allgemeinen Verarbeitungscluster innerhalb der Parallelverarbeitungseinheit von 3 gemäß einer Ausführungsform dar.
    • 4B stellt eine Speicherpartitionseinheit der Parallelverarbeitungseinheit von 3 gemäß einer Ausführungsform dar.
    • 5A stellt den Streaming-Multiprozessor von 4A gemäß einer Ausführungsform dar.
    • 5B ist ein konzeptionelles Diagramm eines Verarbeitungssystems, das unter Verwendung der PPU von 3 gemäß einer Ausführungsform implementiert ist.
    • 5C veranschaulicht ein beispielhaftes System, in dem die verschiedenen Architekturen und/oder Funktionen der verschiedenen vorherigen Ausführungsformen implementiert sein können.
  • DETAILIERTE BESCHREIBUNG
  • Eine Ausgabe eines Multiplexers kann sich als Reaktion auf sich ändernde Daten- und Auswahl-Eingaben mehrmals ändern, bevor sie sich auf einen Endzustand einpendelt. Im Kontext der folgenden Beschreibung ist eine Änderung ein Übergang in einem Spannungsniveau bzw. Spannungspegel, was als ein anderer Zustand erkannt wird. Zum Beispiel eine Änderung, die als ein bestätigter Zustand im Vergleich zu einem negierten oder nicht bestätigten Zustand erkannt wird. In einem anderen Beispiel ist eine Änderung ein Übergang von einem hohen Niveau zu einem niedrigen Niveau oder von einem niedrigen Niveau zu einem hohen Niveau. Im Kontext der folgenden Beschreibung kann ein stabiles oder konstantes Niveau variieren, während es innerhalb eines Bereichs von Spannungswerten bleibt, der als derselbe Zustand erkannt wird (z. B. logisch wahr oder logisch falsch).
  • Mehrfache Änderungen an dem Ausgang bzw. der Ausgabe des Multiplexers werden als Glitches bzw. Störimpulse betrachtet, und die kombinatorische Logik, die die Ausgabe empfängt, kann darauf reagieren, indem sie Knoten innerhalb der kombinatorischen Logik lädt und/oder entlädt und Leistung verbraucht. Störimpulse können durch Einfügen zusätzlicher Register verhindert werden, um den Leistungsverbrauch zu reduzieren. Beispielsweise können die Daten- und Auswahl-Eingaben durch Einfügen von Flip-Flops an den Eingängen des Multiplexers registriert werden. Die Register fügen eine Pipelinestufe hinzu und verhindern Störimpulse an den Eingängen des Multiplexers, da sich jeder Eingang nur einmal bei der Taktflanke ändert (oder konstant bleibt). Allerdings sind die Register teuer in Bezug auf die Verlustleistung, die Latenzzeit und die Chipfläche. Alternativ kann die Ausgabe des Multiplexers mit einem verzögerten Takt registriert werden, der sicherstellt, dass alle Eingänge des Multiplexers ihren Endzustand erreichen und die Ausgabe des Multiplexers sich nicht mehr ändert, bevor die Ausgabe des Multiplexers registriert wird. Ein Einfügen des Registers an dem Ausgang des Multiplexers reduziert die Verlustleistung des Multiplexers und der zusätzlichen kombinatorischen Logik. Das Register ist jedoch eine teure Lösung.
  • Ein anderes Verfahren zur Eliminierung von Störimpulsen in einem Signal besteht darin, ein Speicherelement einzufügen, das das Signal abtastet, nachdem es sich geändert hat, um ein störungsfreies Ausgangssignal innerhalb des Taktzyklus zu erzeugen. Das Speicherelement wird durch ein „Ready“- bzw. „Bereitschafts“-Signal mit einer Verzögerung aktiviert, die an die Verzögerung der Schaltung, die das Signal erzeugt, angepasst ist. Das Verfahren verhindert, dass sich das Ausgangssignal ändert, bis der endgültige Wert des Signals erreicht ist. Die Bereitstellung eines störungsfreien Signals kann die Anzahl der Lade- und/oder Entladevorgänge der Knoten in der Logik, die das Signal empfängt, reduzieren, wodurch die von der Logik verbrauchte Leistung verringert wird.
  • Zum Beispiel kann ein Multiplexer verwendet werden, um nur Nicht-Null-Aktivierungen und/oder -Gewichte für Faltungsoperationen in einem faltenden neuronalen Netz auszuwählen. Wenn das Auswahlsignal für den Multiplexer einen Störimpuls aufweist, können die Eingaben zu einem Multiplizierer einen Störimpuls aufweisen, was dazu führt, dass der Multiplizierer mehrere verschiedene Produkte auswertet, was zu einer mehrfach höheren Verlustleistung im Vergleich zur Auswertung eines einzigen Produkts führt. Die Bereitstellung eines störungsfreien Auswahlsignals zur Auswahl störungsfreier Nicht-Null-Werte, wie es hier weiter beschrieben ist, kann die Verlustleistung reduzieren. Im Rahmen der folgenden Beschreibung werden sich ändernde Signale ignoriert, bis das Signal stabil ist, und zu diesem Zeitpunkt kann das Signal abgetastet werden, so dass die kombinatorische Logik, die das Signal empfängt, nur einmal auswertet.
  • 1A zeigt ein Blockdiagramm 100 einer Störimpuls-freien Abtastschaltung 110 und einer kombinatorischen Logik 103 und 113 gemäß einer Ausführungsform. Ein Register gibt das Signal A in Reaktion auf eine steigende Flanke eines Taktsignals aus. Der Pegel bzw. das Niveau des Eingangssignals A kann sich abhängig von einer Eingabe (nicht explizit dargestellt) in das Register 101 bei jeder steigenden Flanke des Taktsignals ändern oder gleich bleiben und ist zwischen den steigenden Flanken des Taktsignals stabil (konstant). Die kombinatorische Logik 103 empfängt das Eingangssignal A und erzeugt das Ausgangssignal B. Die kombinatorische Logik 103 kann auch eine oder mehrere zusätzliche Eingaben empfangen und eine oder mehrere zusätzliche Ausgaben erzeugen (nicht explizit dargestellt). Aufgrund der unterschiedlichen Zeitpfade in der kombinatorischen Logik 103 kann das Ausgangssignal B mehrere Zwischenzustände durchlaufen, bevor es sich auf einen Endwert einpendelt. Wenn das einen Störimpuls aufweisende Ausgangssignal B direkt in die kombinatorische Logik 113, wie z. B. eine komplexe arithmetische Schaltung, eingegeben würde, kann der Störimpuls zu einer hohen Verlustleistung führen.
  • Eine Verzögerungsschaltung 105 ist so ausgestaltet, dass sie eine Ausbreitungsverzögerung für einen Übergang von Signal A zu einer gültigen Ausgabe für Signal B anpasst. In einer Ausführungsform ist die Ausbreitungsverzögerung gleich oder größer als eine Ausbreitungsverzögerung im ungünstigsten Fall. In einer Ausführungsform ist die Ausbreitungsverzögerung größer als die Ausbreitungsverzögerung im ungünstigsten Fall. In einer Ausführungsform umfasst die Verzögerungsschaltung 105 eine gerade Anzahl von in Reihe geschalteten Invertern. Die Verzögerungsschaltung 105 empfängt den Takt als Eingabe und gibt das Signal BR (B betriebsbereit bzw. Ready) aus, das anzeigt, wann das Signal B stabil (störungsfrei) ist und abgetastet werden sollte.
  • Die Abtastschaltung 110 ist ein Latch-Speicherelement, das so ausgestaltet ist, dass es einen Eingang D abtastet, wenn ein Freigabeeingang E aktiviert ist, und den Pegel des abgetasteten Eingangssignals B an einen Ausgang Q weiterleitet, um ein Ausgangssignal BX zu erzeugen. Die Abtastschaltung 110 ist durchlässig bzw. transparent, während das Signal BR aktiviert ist, und das Ausgangssignal BX „folgt“ dem Eingangssignal B. Das Ausgangssignal BX ist ein Eingangssignal für die kombinatorische Logik 113. Während das mit dem Freigabeeingang E gekoppelte Signal BR negiert ist, ist die Abtastschaltung 110 undurchlässig bzw. nicht transparent, das Eingangssignal B wird nicht abgetastet und das Signal BX wird stabil gehalten. Da das Eingangssignal B jedoch störungsfrei ist, während das Signal BR aktiviert ist, ändert sich das Ausgangssignal BX höchstens einmal - als Reaktion auf den Übergang des Signals BR von negiert zu aktiviert. Mit anderen Worten, der Pegel von B wird nach Erreichen eines stabilen Zustands und als Reaktion auf die Aktivierung des Signals BR abgetastet.
  • 1B zeigt ein Zeitdiagramm für die in 1A dargestellte Abtastschaltung 110 gemäß einer Ausführungsform. Kurz nach einer steigenden Flanke des Taktsignals ist das Signal A gültig und stabil. Signal A breitet sich durch die kombinatorische Logik 103 aus und Signal B weist Störimpulse auf, wechselt zwischen hohen und niedrigen Pegeln, bevor es schließlich einen stabilen Pegel erreicht. Das Taktsignal wird um eine angepasste Verzögerung Δ verzögert, die von der Verzögerungsschaltung 105 bereitgestellt wird, um die steigende Flanke für BR zu erzeugen. Die angepasste Verzögerung, die zur Erzeugung des Signals BR verwendet wird, ist lang genug, um sicherzustellen, dass das Signal B seine Änderung beendet hat und stabil ist. Wenn das Signal BR aktiviert wird, wird das Signal B abgetastet und an das Signal BX weitergegeben. Wenn das Signal BR negiert wird, wird die Abtastung des Signals B beendet und der Pegel des Signals BX wird gehalten. Wichtig ist, dass sich das störungsfreie Signal BX bei jedem Taktzyklus nur einmal ändert oder einfach konstant bleibt (wenn das Signal B im Vergleich zum vorherigen Taktzyklus unverändert ist). Die Abtastschaltung 110 filtert effektiv Störimpulse aus, so dass die kombinatorische Logik 113 nur einmal ausgewertet wird, wodurch die Verlustleistung minimiert wird.
  • In einer anderen Ausführungsform ist das Signal A bei der fallenden Flanke des Taktsignals gültig und stabil, anstatt bei der steigenden Flanke des Taktsignals. Bei dieser anderen Ausführungsform wird, wenn das Signal BR negiert wird, das Signal B abgetastet und auf das Signal BX übertragen, und wenn das Signal BR aktiviert wird, wird das Abtasten des Signals B beendet und der Pegel des Signals BX gehalten. Der Fachmann versteht, dass jede Logik, die die Operationen des Blockdiagramms 100 und die entsprechenden Wellenformen, die in 1B dargestellt sind, ausführt, innerhalb des Umfangs und des Geistes der Ausführungsformen der vorliegenden Offenbarung liegt.
  • Weitere illustrative Informationen werden nun in Bezug auf verschiedene optionale Architekturen und Merkmale dargelegt, mit denen der vorab beschriebene Rahmen nach den Wünschen des Benutzers implementiert werden kann. Es sei dringend darauf hingewiesen, dass die folgenden Informationen zu illustrativen Zwecken dargelegt werden und nicht als Einschränkung in irgendeiner Weise auszulegen sind. Jedes der folgenden Merkmale kann optional mit oder ohne den Ausschluss anderer beschriebener Merkmale vorhanden sein.
  • 1C zeigt ein Flussdiagramm eines Verfahrens 115 zur Erzeugung eines störungsfreien Signals gemäß einer Ausführungsform. Das Verfahren 115 wird im Zusammenhang mit einer Logik oder Schaltung beschrieben und kann auch innerhalb eines Prozessors ausgeführt werden. Beispielsweise kann das Verfahren 115 von einer GPU (Grafikverarbeitungseinheit), CPU (Zentraleinheit) oder einem beliebigen Prozessor ausgeführt werden, der in der Lage ist, das störungsfreie Signal zu erzeugen. Darüber hinaus versteht der Fachmann, dass jedes System, das das Verfahren 115 ausführt, innerhalb des Umfangs und des Geistes der Ausführungsformen der vorliegenden Offenbarung liegt.
  • In Schritt 120 wird ein Bereitschaftssignal erzeugt, das bei einem ersten Übergang eines Taktsignals negiert ist und nach einer ersten Verzögerung relativ zu dem ersten Übergang bestätigt wird, wobei die erste Verzögerung durch eine Verzögerungsschaltung erzeugt wird, die so ausgestaltet ist, dass sie an eine zweite Verzögerung angepasst ist. In einer Ausführungsform ist die erste Verzögerung an die zweite Verzögerung angepasst, wenn die erste Verzögerung gleich der zweiten Verzögerung ist. In einer Ausführungsform ist die erste Verzögerung an die zweite Verzögerung angepasst, wenn die erste Verzögerung gleich der zweiten Verzögerung oder größer als diese ist. In einer Ausführungsform ist die erste Verzögerung größer als die zweite Verzögerung und liegt innerhalb des gleichen Taktzyklus. In einer Ausführungsform ist das Bereitschaftssignal BR, die erste Verzögerung wird von der Verzögerungsschaltung 105 erzeugt, und die zweite Verzögerung ist die Ausbreitungsverzögerung durch die kombinatorische Logik 103. In einer Ausführungsform invertiert die Verzögerungsschaltung 105 das Taktsignal, um das Bereitschaftssignal zu erzeugen. In einer Ausführungsform umfasst die Verzögerungsschaltung 105 eine Kette von in Reihe geschalteten Invertern.
  • In Schritt 125 wird ein von einer kombinatorischen Logik erzeugtes Eingangssignal empfangen, und nach dem ersten Übergang des Taktsignals bewirkt eine Änderung eines ersten Signals eine entsprechende Änderung des Eingangssignals mit der zweiten Verzögerung. In einer Ausführungsform wird das von der kombinatorischen Logik 103 erzeugte Eingangssignal B an der Abtastschaltung 110 empfangen, und eine Änderung des Signals A bewirkt eine entsprechende Änderung des Eingangssignals B bei der angepassten Verzögerung. In einer Ausführungsform ist die Änderung des ersten Signals ein fallender Übergang von einem hohen zu einem niedrigen Pegel. In einer anderen Ausführungsform ist die Änderung des ersten Signals ein ansteigender Übergang von einem niedrigen zu einem hohen Pegel.
  • In Schritt 130 wird das Eingangssignal abgetastet, während das Bereitschaftssignal aktiviert ist, um einen Pegel des Eingangssignals an ein Ausgangssignal zu übertragen, wobei das Eingangssignal von der zweiten Verzögerung bis zu der Abtastung unverändert ist. In einer Ausführungsform wird das Eingangssignal B von der Abtastschaltung 110 abgetastet, um den Pegel des Eingangssignals B an das Ausgangssignal BX zu übertragen. In einer Ausführungsform ist die Abtastschaltung 110 so ausgestaltet, dass sie das Ausgangssignal BX ab dem ersten Übergang des Taktsignals bis zu der Abtastung des Eingangssignals B auf einem konstanten Pegel hält. In einer Ausführungsform ändert sich das Eingangssignal B mindestens einmal bzw. weist mindestens einen Störimpuls auf nach dem ersten Übergang des Taktsignals und vor der zweiten Verzögerung.
  • In einer Ausführungsform ist die Verzögerungsschaltung darüber hinaus so ausgestaltet, dass das Bereitschaftssignal nach einer dritten Verzögerung relativ zu der ersten Verzögerung negiert wird, wobei das Bereitschaftssignal vor der nächsten Taktperiode negiert wird. In einer Ausführungsform ist die Abtastschaltung darüber hinaus so ausgestaltet, dass sie ein Ausgangs-Bereitschaftssignal erzeugt, das für die erste Verzögerung negiert ist und aktiviert wird, sobald der Pegel des Eingangssignals an das Ausgangssignal übertragen ist. In einer Ausführungsform wird das Bereitschaftssignal in Reaktion auf die Bestätigung bzw. Aktivierung des Ausgangs-Bereitschaftssignals negiert.
  • 1D veranschaulicht die Störimpuls-freie Abtastschaltung 110 gemäß einer Ausführungsform. Die Abtastschaltung 110 weist zwei UND-Gatter 122 und 124, ein ODER-Gatter 126 und einen Freigabe-Inverter 118 auf. Wenn die Freigabeeingänge E und D beide hoch (aktiviert) sind, ist der Ausgang des UND-Gatters 122 hoch, und infolgedessen ist der Ausgang Q des ODER-Gatters 126 aktiviert. Andernfalls ist der Ausgang des Gatters 122 niedrig (negiert).
  • Der Ausgang Q des ODER-Gatters 126 wird innerhalb der Abtastschaltung 110 zurückgekoppelt und dem UND-Gatter 124 zugeführt. Das Freigabesignal E wird durch den Freigabe-Inverter 118 invertiert, um das Signal NE (nicht freigegeben) zu erzeugen, das dem UND-Gatter 124 zugeführt wird. Wenn das Freigabesignal hoch ist, wird daher der Rückkopplungspfad durch das UND-Gatter 124 effektiv deaktiviert. Wenn das Freigabesignal niedrig ist (NE ist hoch), wird der Rückkopplungspfad durch das UND-Gatter 124 freigegeben und überträgt den Pegel des Ausgangs Q an das ODER-Gatter 126, um den Pegel am Ausgang Q stabil zu halten, bis das Freigabesignal aktiviert wird. Mit anderen Worten, der Freigabe-Inverter 118 ist so ausgestaltet, dass er den Rückkopplungspfad freigibt, um das Ausgangssignal Q konstant zu halten, bis das Eingangssignal D abgetastet wird. Der Freigabe-Inverter 118 stellt sicher, dass, wenn das Freigabesignal E von niedrig auf hoch übergeht, das NE-Signal hoch bleibt, so dass der Rückkopplungspfad durch das UND-Gatter 124 freigegeben bleibt, bis das Freigabesignal ansteigt und der Eingang D zu dem Ausgang Q durchgeschaltet wird, wodurch sichergestellt wird, dass Q nicht kurzzeitig auf niedrig schaltet, wenn das Freigabesignal E aktiviert wird, wenn D aktiviert ist. Wenn beispielsweise das NE-Signal auf einen niedrigen Pegel übergeht und den Ausgang des UND-Gatters 124 auf einen niedrigen Pegel treibt, bevor ein hoher Pegel von D durch das UND-Gatter 122 übertragen wird, wenn E auf einen hohen Pegel übergeht, wären beide Eingänge des ODER-Gatters 126 gleichzeitig auf einem niedrigen Pegel, was dazu führt, dass der Ausgang Q kurzzeitig auf einen niedrigen Pegel übergeht, bevor der Ausgang des UND-Gatters 122 den Ausgang Q auf einen hohen Pegel treibt.
  • In einer Ausführungsform wird ein Ausgangs-Bereitschaftssignal erzeugt, das anzeigt, wann der Ausgang Q bereit ist, von der empfangenden Logik abgetastet zu werden. In einer Ausführungsform wird das Ausgangs-Bereitschaftssignal während der von der Verzögerungsschaltung 105 bereitgestellten Verzögerung negiert und aktiviert, sobald der Pegel des Eingangssignals D an das Ausgangssignal Q übertragen ist. In einer Ausführungsform wird das Freigabesignal E als Reaktion auf eine Aktivierung des Ausgangs-Bereitschaftssignals negiert. In einer Ausführungsform wird eine Verzögerungsschaltung, die der Laufzeitverzögerung von dem Freigabesignal E zu dem Ausgangssignal Q entspricht, zur Verzögerung des Freigabesignals E verwendet, um das Ausgangs-Bereitschaftssignal zu erzeugen. In einer Ausführungsform verzögert eine gerade Anzahl von in Reihe geschalteten Invertern das Freigabesignal E, um das Ausgangs-Bereitschaftssignal zu erzeugen.
  • 1E zeigt eine Inverterschaltung 119 gemäß einer Ausführungsform. Die Inverterschaltung 119 weist zwei über Kreuz gekoppelte Logikgatter auf, die EO (Freigabeausgang) und NE erzeugen. Die über Kreuz gekoppelten Logikgatter sind ein ODER-Gatter 132 mit einem invertierten Eingang zur Erzeugung von EO und ein NAND-Gatter 134 zur Erzeugung von NE. Der Freigabeeingang E liegt an beiden Logikgattern an. Wenn die Freigabe E von Low auf High übergeht, treibt das ODER-Gatter 132 EO von niedrig auf hoch. Wenn die steigende Flanke von EO an dem NAND-Gatter 134 empfangen wird, geht der NE-Ausgang in den niedrigen Zustand über. Die Ausbreitungsverzögerung durch das NAND-Gatter 134 stellt sicher, dass EO und NE gleichzeitig auf hoch sind, wodurch die Überlappungszeit entsteht. Wenn die Freigabe E von hoch auf niedrig übergeht, treibt das NAND-Gatter 134 NE von niedrig auf hoch. Wenn die steigende Flanke von NE an dem ODER-Gatter 132 empfangen wird, wird EO von hoch auf niedrig getrieben und die Laufzeitverzögerung durch das ODER-Gatter 132 stellt sicher, dass EO und NE gleichzeitig hoch sind, wodurch die Überlappungszeit entsteht. Es wird deutlich, dass die Inverterschaltung 119 den Freigabe-Inverter 118 in der Abtastschaltung 110 ersetzen kann, wobei EO zum UND-Gatter 122 und NE zum UND-Gatter 124 geleitet wird.
  • 1F zeigt eine weitere Störimpuls-freie Abtastschaltung 140 gemäß einer Ausführungsform. Die Störimpuls-freie Abtastschaltung 110 kann durch die Störimpuls-freie Abtastschaltung 140 ersetzt werden. Ein ODER-Gatter 138 empfängt Zwischensignale, die von den UND-Gattern 135, 136 und 137 erzeugt werden, wobei das UND-Gatter 137 einen Eingang hat, der invertiert ist. Das UND-Gatter 135 gibt den Eingang D an das ODER-Gatter 138 weiter, um den Ausgang Q auf hoch zu treiben, wenn der Eingang D und die Freigabe E beide auf hoch sind. Das UND-Gatter 137 stellt einen Rückkopplungspfad bereit, um den Ausgang Q hoch zu halten, wenn die Freigabe E niedrig ist. Das UND-Gatter 136 stellt einen Rückkopplungspfad bereit, um den Ausgang Q hoch zu halten, wenn der Eingang D hoch ist, unabhängig von dem Pegel der Freigabe E, wodurch verhindert wird, dass der Ausgang Q während einer steigenden Flanke der Freigabe E niedrig wird, wenn der Eingang D hoch ist. Der Ausgang Q wird niedrig gehalten, wenn der Eingang D niedrig ist und die Freigabe E hoch ist oder wenn die Freigabe E niedrig ist und der Ausgang Q niedrig ist.
  • Um zum Blockdiagramm 100 der 1A zurückzukehren, kann es in Fällen, in denen das Signal B in einem großen Umfang verzögert ist - mehr als ein halber Takt - wünschenswert sein, ein „asymmetrisches“ Bereitschaftssignal BRA zu haben, das für eine längere Zeit hoch ist als es niedrig ist. In einer Ausführungsform ist das asymmetrische Bereitschaftssignal BRA am Ende des Taktzyklus auf niedrig.
  • 1G illustriert eine Erzeugungsschaltung 145 für ein asymmetrisches Bereitschaftssignal gemäß einer Ausführungsform. Die Erzeugungsschaltung 145 für das asymmetrische Bereitschaftssignal kann die Verzögerungsschaltung 105 im Blockschaltbild 100 ersetzen. Das Bereitschaftssignal BRA ist um D1 gegenüber der steigenden Flanke des Taktsignals verzögert und weist eine Breite gleich D2 auf. Eine erste Verzögerungsschaltung 147 stellt eine Verzögerung D1 bereit, und eine zweite Verzögerungsschaltung 146 stellt eine Verzögerung D2 bereit. Ein UND-Gatter 148 mit einem invertierten Eingang erzeugt die Ausgabe BRA. In einer Ausführungsform sind die erste und zweite Verzögerungsschaltung 147 bzw. 146 unter Verwendung einer Kette von in Reihe geschalteten Invertern implementiert, wobei ein Zwischenausgang in der Kette die Verzögerung D1 und ein weiter verzögerter Ausgang der Kette die Verzögerung D2 bereitstellt.
  • 1H zeigt ein Zeitdiagramm für die Erzeugungsschaltung für das asymmetrische Bereitschaftssignal von 1G gemäß einer Ausführungsform. Die erste Verzögerungsschaltung 147 bewirkt, dass die ansteigende Flanke des BRA zum Zeitpunkt D1 nach der ansteigenden Flanke des Taktes auftritt. Die zweite Verzögerungsschaltung 146 setzt die Pulsbreite des Signals BRA auf D2. Das asymmetrische Bereitschaftssignal BRA steigt an, während das Taktsignal niedrig ist und fällt vor dem Beginn der nächsten Taktperiode ab.
  • Die Störimpuls-freie Abtastschaltung 110 ist ein Speicherelement, das verwendet werden kann, um Störimpulse in einem Signal zu beseitigen, indem das Signal abgetastet wird, nachdem das Signal seine Pegel geändert hat und stabil ist. Das Bereitschaftssignal hat eine Verzögerung, die mit der Verzögerung der Schaltung, die das Signal erzeugt, übereinstimmt und es der Abtastung ermöglicht, den stabilen Pegel des Signals auf eine Störimpuls-freie Weise an einen Ausgang zu übertragen. Die Abtastung auf Basis des Bereitschaftssignals erzeugt ein Störimpuls-freies Ausgangssignal. Jegliche Änderungen des Signals, bevor das Signal abgetastet wird, werden von der Störimpuls-freien Abtastschaltung 110 herausgefiltert, wodurch die Anzahl der Lade- und Entladevorgänge von Knoten innerhalb der Logik, die das Ausgangssignal empfangen, reduziert wird. Dadurch wird die Leistungsaufnahme der Logik, die das Ausgangssignal empfängt, im Vergleich zum direkten Empfang des sich ändernden Signals reduziert.
  • Störimpuls-freier Multiplexer
  • Um das Laden und Entladen von Knoten innerhalb der kombinatorischen Logik, die das Ausgangssignal eines Multiplexers empfängt, zu minimieren, sollte das Ausgangssignal eines Multiplexers idealerweise unverändert gehalten werden, bis alle Eingänge, einschließlich des Auswahlsignals, ihren Endzustand erreicht haben, und dann sollte sich das Ausgangssignal genau einmal ändern (oder gleich bleiben). Störimpuls-freies (glitch-free) Multiplexen kann durch die Verwendung einer „gebündelten“ zeitlich selbst bestimmten Signalisierung erreicht werden. Insbesondere kann ein „Bereitschafts“-Signal bzw. „Ready“-Signal jedem Logiksignal (z. B. Dateneingang und Auswahl), welches möglichweise mehrere Bits aufweist, zugeordnet sein. Das Bereitschaftssignal wird nur dann aktiviert, wenn das zugehörige Logiksignal einen Endzustand innerhalb des Taktzyklus erreicht hat und sich nicht mehr ändert (z. B. Störimpuls-frei ist).
  • Ein Signal „BR“ zeigt z. B. an, wenn das Signal „B“ bereit ist. Wie es zuvor beschrieben ist, können die Bereitschaftssignale aus dem Taktsignal durch eine Verzögerungsschaltung mit einer Verzögerung erzeugt werden, die an einen kombinatorischen Logikblock angepasst ist, der das Signal B erzeugt. In einer Ausführungsform, wie sie in 1G dargestellt ist, wird ein UND-Gatter verwendet, um Verzögerungen für ein asymmetrisches Ansteigen und Abfallen bereitzustellen. In einer Ausführungsform wird eine invertierte Version des Taktsignals direkt als Bereitschaftssignal verwendet.
  • 2A zeigt ein Blockdiagramm eines Störimpuls-freien 4-zu-1-Multiplexers 200 gemäß einer Ausführungsform. Auf einer hohen Ebene ist ein Multiplexer eine logische Komponente, die mehrere (N) Dateneingangssignale und ein Auswahlsignal empfängt und dann eines der Dateneingangssignale basierend auf dem Wert des Auswahlsignals an das Ausgangssignal überträgt. Beispielsweise kann ein Multiplexer mit den Eingängen a, b und select und dem Ausgang c so ausgestaltet sein, dass c = a ist, wenn select = 0 ist, und c = b, wenn select = 1 ist. Da jedoch die Eingänge a, b und select Störimpulse aufweisen, werden die Störimpulse an den Ausgang c weitergeleitet. Ein Verringern der Störimpulse des Ausgangs bzw. der Ausgabe c verringert den Leistungsverbrauch einer kombinatorischen Logik, die die Ausgabe c als eine Eingabe empfängt.
  • Das zuvor beschriebene Störimplus-freie Verfahren kann verwendet werden, um den Störimpuls-freien 4-zu-1-Multiplexer 200 zu implementieren, bei dem die Dateneingangssignale A, ..., D sind. Die Eingangs-Bereitschaftssignale AR, ... DR sind bezüglich ihrer Verzögerung an die jeweiligen Eingangssignale angepasst. Ein Auswahlsignal „Sel“ wählt einen der abzutastenden Eingänge aus, und der abgetastete Eingang wird an das Ausgangssignal X übertragen. Die Rückkopplung von X verhindert Störimpulse an dem Ausgang, indem der vorherige Pegel an X gehalten wird, wenn „Hold“ aktiviert ist.
  • Der Multiplexer 200 umfasst einen zeitgesteuerten Decoder 210 und eine Ausgangsstufe 215, die jeweils Signalanschlüsse aufweisen, die Eingaben und Ausgaben zu und von der Schaltung führen. Störimpuls-freies Multiplexen wird erreicht, indem jedem Eingangssignal, möglicherweise mit mehreren Bits, (Sei und die Dateneingangssignale) ein Bereitschaftssignal zugeordnet wird. Das Bereitschaftssignal geht auf hoch, wenn das zugehörige Eingangssignal einen stabilen Zustand (z. B. einen konstanten oder Störimpuls-freien Wert) für den aktuellen Taktzyklus erreicht hat. Das Signal AR zeigt z. B. an, wenn das Eingangssignal A stabil ist. Die Bereitschaftssignale können aus dem Schaltungstaktsignal durch Ketten von Invertern erzeugt werden, die bezüglich ihrer Verzögerung an den kombinatorischen Logikblock angepasst sind, der jedes Eingangssignal erzeugt. In einigen Fällen kann ein UND-Gatter in der Kette verwendet werden, um asymmetrische Verzögerungen für Ansteigen und Abfallen zu erzeugen, wie es zuvor in Verbindung mit den 1G und 1H beschrieben ist. In anderen Fällen kann die positive oder negative Version des Taktes direkt als Bereitschaftssignal verwendet werden.
  • Der zeitgesteuerte Decoder 210 empfängt als Eingaben das Auswahlsignal (Sel), ein Auswahl-Bereitschaftssignal (SelR) und mehrere Eingangs-Bereitschaftssignale (AR, ... DR). Der zeitgesteuerte Decoder 210 erzeugt Abtast-Freigabesignale (AS, ... DS), wobei jedes Signal aktiviert wird, um die Abtastung des jeweiligen Dateneingangssignals durch die Ausgangsstufe 215 zu ermöglichen. Der zeitgesteuerte Decoder 210 erzeugt auch das Haltesignal. Im Zusammenhang mit der folgenden Beschreibung können die Abtast-Freigabesignale als ein mehrere Bit umfassendes Abtast-Freigabesignal (z. B. ein One-Hot-Abtast-Freigabesignal bzw. Abtast-Freigabesignal, bei welchem nur ein Bit hoch ist) betrachtet werden, wobei jedes Bit einem anderen der Dateneingangssignale und dem jeweiligen Bereitschaftssignal entspricht. In einer Ausführungsform kann das Timing der verschiedenen Abtast-Freigabesignale basierend auf dem SelR und den Eingangs-Bereitschaftssignalen variieren.
  • Im Allgemeinen kann jedes Dateneingangssignal ein Mehrbitsignal sein, und das entsprechende Bereitschaftssignal zeigt an, dass alle Bits des Dateneingangssignals Störimpuls-frei sind. In einer Ausführungsform kann das Abtast-Freigabesignal für jeden Dateneingang verwendet werden, um alle Bits des Mehrbit-Dateneingangssignals abzutasten, und die Ausgangsstufe 215 wird für jedes Bit repliziert, um das Mehrbit-Ausgangssignal X zu erzeugen.
  • Die Ausgangsstufe 215 nimmt die Dateneingangssignale, die Abtast-Freigabesignale und ein Haltesignal als Eingänge entgegen. Die Ausgangsstufe 215 erzeugt zumindest ein Ausgangssignal. Das Ausgangssignal kann an die Ausgangsstufe 215 zur Verwendung als Halte-Rückkopplungseingang zurückgeführt werden. Der zeitgesteuerte Decoder 210 ist mit der Ausgangsstufe 215 gekoppelt, um die Abtast-Freigabesignale der Ausgangsstufe 215 bereitzustellen. Die Abtast-Freigabesignale sind zeitlich so bestimmt, dass sie die Ausgangsstufe 215 in die Lage versetzen, eines der Dateneingangssignale entsprechend dem Auswahleingang abzutasten, nachdem jedes Eingangssignal in jedem Taktzyklus einen Endwert erreicht hat. Das abgetastete Signal wird an das mindestens eine Ausgangssignal weitergeleitet, wie es weiter in 2B dargestellt ist.
  • Das Auswahl-Bereitschaftssignal und die Eingabe-Bereitschaftssignale ermöglichen es dem Multiplexer 200 in Verbindung mit dem Haltesignal, das Ausgangssignal konstant (unverändert) zu halten, bis alle Auswahl- und Dateneingangssignale bereit sind, d. h. auf den endgültig eingepegelten Werten für das Taktintervall liegen, wie es durch die jeweiligen Bereitschaftssignale angezeigt ist. Zeitliche Differenzen zwischen den verschiedenen Signalen, die ihren eigenen Bereitschaftszustand erreichen, können durch die unterschiedlichen Logikpfade und die kombinatorische Logik entstehen, die jedes Dateneingangssignal und das Auswahlsignal erzeugen. Die einzelnen Bereitschaftssignale können so eingestellt sein, dass sie eine geeignete Verzögerung auf der Grundlage der logischen Pfade, die von den entsprechenden Dateneingangssignalen durchlaufen werden, ergeben. Sobald das Auswahl-Bereitschaftssignal und das Bereitschaftssignal, das dem ausgewählten Dateneingang entspricht, anzeigen, dass der Dateneingang und das Auswahlsignal einen Störimpuls-freien und stabilen Zustand erreicht haben, gibt der Multiplexer 200 den ausgewählten Dateneingang an das Ausgangssignal weiter.
  • Die in 2A dargestellte Ausgangsstufe 215 weist ein Auswahlgatter 206 für jedes Dateneingangssignal (A bis D) sowie ein Auswahlgatter 205 für das Haltesignal auf. Die Ausgangsstufe 215 weist auch ein Ausgangsgatter 212 auf. „Gatter“ bezieht sich auf jede Logik, die so ausgestaltet ist, dass sie einen oder mehrere Eingaben gemäß einer logischen Gleichung oder Wahrheitstabelle kombiniert. Zum Beispiel ist ein UND-Gatter eine Logik, die mehrere Eingänge gemäß einer booleschen UND-Verknüpfung kombiniert. Ein Gatter impliziert keine bestimmte Anordnung von Transistoren, und ein Gatter kann in einigen Fällen unter Verwendung von Kombinationen verschiedener Boolescher Operationen implementiert sein und eignet sich für die Implementierung.
  • Jedes Auswahlgatter 205 und 206 kann logisch als ein UND-Gatter mit zwei Eingängen funktionieren. Die Auswahlgatter 206 erhalten jeweils ein Dateneingangssignal und das jeweilige Abtast-Freigabesignal (A und AS, B und BS...) als Eingang. Wenn das Abtast-Freigabesignal eine logische „1“ ist, stimmt der Ausgang des Auswahlgatters mit dem (anderen) Eingang überein. Wenn das Auswahlsignal eine logische „0“ ist, ist der Ausgang des Auswahlgatters eine logische „0“. In einer Ausführungsform ist der zeitgesteuerte Decoder 210 als ein One-Hot-Ausgangsgenerator ausgestaltet, so dass nicht mehr als ein Abtast-Freigabesignal zu einem bestimmten Zeitpunkt hoch (eine logische „1“) ist.
  • Die Ausgänge der Auswahlgatter 206 sind mit den Eingängen des Ausgangsgatters 212 gekoppelt. Das Ausgangsgatter 212 kann als ein ODER-Gatter mit mehreren Eingängen fungieren. Auf diese Weise kann das wie zuvor beschrieben an den Auswahlgattern 206 abgetastete Signal über das Ausgangsgatter 212 zu dem Ausgangssignal X weitergeleitet werden. In einer Ausführungsform wird das Ausgangssignal X auch als Eingabe für das Auswahlgatter 205 zurückgeführt. Das Auswahlgatter 205 ist als Rückkopplungseingang für das Ausgangsgatter 212 ausgestaltet, um das Ausgangssignal X hoch zu halten, während das Haltesignal hoch ist. Auf diese Weise wird das Ausgangssignal, wenn das Haltesignal hoch ist, als nächster Eingang ausgewählt, der durch das Ausgangsgatter 212 weitergegeben wird, wodurch das Ausgangssignal für das Taktintervall konstant gehalten wird. Mit anderen Worten: Wenn das Haltesignal aktiviert ist (und alle Abtastfreigabesignale niedrig sind), behält das Ausgangssignal X seinen aktuellen Zustand bei.
  • Das Haltesignal muss so lange aktiviert bleiben, bis eines der Abtast-Freigabesignale (AS...DS) aktiviert ist, um Störimpulse an dem Ausgang zu verhindern, wenn das ausgewählte Eingangssignal abgetastet wird. Wenn das Ausgangssignal X aktiviert (hoch bzw. High) ist und das ausgewählte Eingangssignal (A...D) High ist, stellt die Überlappung des Haltesignals und des Abtast-Freigabesignals sicher, dass das Ausgangssignal X nicht auf niedrig bzw. Low wechselt (z. B. wenn das Ausgangssignal X High ist, geht es nicht innerhalb eines Taktzyklus auf Low und wieder auf High). Wenn die Überlappung nicht verwendet wird, kann ein Störimpuls nach Low auftreten, der durch eine Wettlaufsituation (Race Condition) beim Übergang des Haltesignals auf Low verursacht wird. Der Störimpuls nach Low kann auftreten, wenn ein Eingangssignal einen Wert High aufweist und der Ausgang des Auswahlgatters 205 auf Low übergeht, bevor das Abtast-Freigabesignal am Eingang des Auswahlgatters 206 auf High übergeht, wodurch alle Eingänge des Ausgangsgatters 212 gleichzeitig auf Low sind.
  • Der Rückkopplungspfad ist kostengünstig in Bezug auf Transistoren und Leistung - entspricht den Kosten für ein einzelnes NAND-Gatter, das typischerweise vier bis sechs Transistoren umfasst. Die zusätzlichen Ressourcenkosten sind vergleichbar mit dem Hinzufügen eines zusätzlichen Eingangs zum Multiplexer 200 und weniger teuer als das Hinzufügen eines Flipflops. Der Rückkopplungspfad, zusammen mit einer geeigneten Sequenzierung des Haltesignals und der Abtast-Freigabesignale, verhindert einen Störimpuls des Ausgangssignals X des Multiplexers 200.
  • Fachleute werden leicht erkennen, dass die Ausgangsstufe 215 zusätzliche oder etwas andere Elemente umfassen kann, die nicht dargestellt sind und für diese Beschreibung unnötig sind. Zur Darstellung der Auswahlgatter 205 und 206 werden UND-Gatter und zur Darstellung des Ausgangsgatters 212 ein ODER-Gatter verwendet, weil diese Symbole die Funktion der zugrundeliegenden Logik zur Erzeugung des Ausgangssignals auf der Grundlage der Eingänge angeben. Es können jedoch auch andere Kombinationen von Logik implementiert werden, um die angegebene Funktionalität zu erreichen. Fünf NAND-Gatter mit zwei Eingängen können beispielsweise ein einzelnes NAND-Gatter mit fünf Eingängen speisen. Alternativ können drei AND-OR-INVERTs (AOIs) ein NAND-Gatter mit drei Eingängen speisen. Es können zahlreiche Schaltungen verwendet werden, um das gleiche logische Ergebnis zu erzielen, wobei die Anzahl der verwendeten Transistoren, die entstehende Verzögerung und die verbrauchte Leistung Auswirkungen auf das gewünschte logische Ergebnis haben. Fachleute werden leicht erkennen, dass der Multiplexer 200 zusätzliche oder etwas andere Elemente umfassen kann, die nicht abgebildet und für diese Beschreibung unnötig sind.
  • Der Multiplexer 200 stellt einen zuverlässig gleichbleibenden Ausgangssignalwert bereit, auch wenn die eingegebenen Daten und/oder die Auswahlsignale ihre Werte mehrfach und/oder zu unterschiedlichen Zeiten ändern. Daher sind für den Multiplexer 200 der Stromverbrauch und das Rauschen im Zusammenhang mit der Ausbildung von Störimpulsen und unnötigem Umschalten des Ausgangssignals reduziert, ebenso wie der unnötigen Arbeit, die von Schaltungen geleistet wird, die ein potenziell instabiles Signal als Eingangssignal erhalten.
  • 2B zeigt ein Zeitdiagramm für den Störimpuls-freien 4-zu-1-Multiplexer 200 aus 2A gemäß einer Ausführungsform. Das Zeitdiagramm zeigt die Zeitablauffolge für die Abtast-Freigabesignale, die von dem zeitgesteuerten Decoder 210 erzeugt werden, um ein Störimpuls-freies Multiplexen zu ermöglichen, wobei Pfeile die Kausalität anzeigen. Das Signal SelR wird aktiviert, um anzuzeigen, dass das Auswahlsignal Sei bereit ist. Bevor das Signal SelR aktiviert ist, kann Sei ein oder mehrere Male einen Störimpuls aufweisen, wobei es zwischen Werten wechselt (wie es durch die mit „Störimpulse“ bezeichneten Übergänge gezeigt ist), bis es einen stabilen Zustand erreicht, nach dem SelR aktiviert wird. In diesem Beispiel wählt das Auswahlsignal das Dateneingangssignal A aus, und das Eingangs-Bereitschaftssignal AR wird aktiviert, bevor SelR aktiviert wird, was anzeigt, dass das Dateneingangssignal A bereit ist. Als Reaktion darauf, dass sowohl AR als auch SelR aktiviert sind, aktiviert der zeitgesteuerte Decoder 210 das Abtast-Freigabesignal AS, um das Dateneingangssignal A abzutasten und den abgetasteten Wert an das Ausgangssignal X des Multiplexers 200 weiterzuleiten.
  • Wenn das Signal AR nicht bereits aktiviert ist, wenn SelR aktiviert ist, wartet der zeitgesteuerte Decoder 210 darauf, dass das Signal AR aktiviert wird, bevor er das Signal AS aktiviert. Nach einer kurzen Überlappungsverzögerung (t0), die auf die Aktivierung des Signals AS folgt, wird das Haltesignal deaktiviert (negiert). Die Überlappung der Aktivierung des Signals AS und des Haltesignals während der Zeit to ist für die Situation, in der ein Bit des Ausgangssignals X und das Dateneingangssignal A beide aktiviert sind. Die Überlappung stellt sicher, dass dieses Bit des Ausgangssignals X zwischen dem Zeitpunkt, an dem der Ausgang des Gatters 205 mit dem Haltesignal in der Ausgangsstufe 215 deaktiviert wird und der Ausgang des Auswahlgatters 206 für Eingang A in der Ausgangsstufe 215 aktiviert wird, nicht in einen deaktivierten Zustand übergeht. Um den Multiplexer 200 für den nächsten Taktzyklus zurückzusetzen, wird, nachdem das Signal SelR und das Signal AR beide deaktiviert sind, das Haltesignal aktiviert und nach einer Überlappungsverzögerung (t1) wird das Signal AS deaktiviert. Die Zeitdauern der Verzögerungen t0 und t1 können gleich oder unterschiedlich sein. In einer Ausführungsform entsprechen die Zeitdauern der Verzögerungen t0 und t1 annähernd der Verzögerung eines logischen Gatters. Eine invertierte Version des Haltesignals - möglicherweise mit einer hinzugefügten Verzögerung - kann in einigen Implementierungen als „Ausgangs-Bereitschaftssignal“ XR verwendet werden.
  • 2C zeigt ein Blockdiagramm des zeitgesteuerten Decoders 210 aus 2A, gemäß einer Ausführungsform. Sequentielle Logik ist hinzugefügt, um das Haltesignal und die Abtast-Freigabesignale AS, ..., DS zu sequenzieren, um Störimpulse zu vermeiden. Wenn die Signaleingabe Sei bereits in One-Hot-Form (nur ein Bit aktiv) vorliegt, kann der One-Hot-Decoder 220 weggelassen werden.
  • Jedes One-Hot-Signal ad,...,dd wird in der Bereitschaftssignal-Logik 221 durch das Auswahl-Bereitschaftssignal SelR und das entsprechende Eingangs-Bereitschaftssignal qualifiziert, z. B. AR für das Eingangssignal A usw. Die UND-Gatter der Bereitschaftssignal-Logik 221, die die Qualifizierung durchführen, können je nach Implementierung innerhalb des One-Hot-Decoders 220 oder durch Erweiterung der UND-Gatter in der Abtast-Freigabesignal-Logik 216 und der Haltesignal-Logik 218 implementiert sein.
  • Die resultierenden dekodierten Bereitschaftssignale adr, ..., ddr, die von der Bereitschaftssignal-Logik 221 ausgegeben werden, werden zur Ansteuerung eines Satzes von Reset/Set (RS)-Flipflops oder -Latches verwendet, die in der dargestellten Ausführungsform als UND-ODER-Gatter implementiert sind, um die Abtast-Freigabesignale AS, ..., DS und das Haltesignal zu erzeugen. Die kombinatorische Logik, die die Blöcke Abtast-Freigabe-Logik 216 und Haltesignal-Logik 218 umfasst, wird von der Bereitschaftssignal-Logik 221 angesteuert, um die Abtast-Freigabesignale und das Haltesignal zu erzeugen.
  • Wenn ein dekodiertes Eingangs-Bereitschaftssignal, wie z. B. adr, aktiviert wird, setzt es den Ausgang eines Latchs, das durch die entsprechende Abtast-Freigabesignal-Logik 216 implementiert ist, wie z. B. das Signal AS. Wenn eines der Abtast-Freigabesignale, wie z. B. AS, aktiviert ist, setzt es das in der Haltesignal-Logik 218 implementierte Flip-Flop zurück, wodurch das Haltesignal abfällt. Wenn für einen zuverlässigen Betrieb eine zusätzliche Überlappung erforderlich ist, können Verzögerungsschaltungen in den Rücksetzpfad eingefügt sein. Die Verzögerung des RS-Flipflops in der Abtastsignal-Logik 216 selbst kann jedoch in vielen Fällen ausreichen, um einen Deaktivierungs-Störimpuls zu vermeiden, wenn das gehaltene Ausgangssignal X und das neu ausgewählte Eingangssignal beide aktiviert sind.
  • Bei einem Multi-Bit-Multiplexer (der in der Lage ist, Multi-Bit-Eingangssignale für ein Multi-Bit-Ausgangssignal auszuwählen) führt jeder Block der Abtast-Freigabelogik 216 (z. B. eine UND-ODER-Gatterkonfiguration) eine Operation eines RS-Flipflops oder Latchs für alle Bits für ein Multi-Bit-Eingangssignal durch.
  • Andere Konfigurationen mit geringer Gatteranzahl für das RS/SR-Flipflop-Verhalten können ebenfalls verwendet werden.
  • Um den zeitgesteuerten Decoder 210 zurückzusetzen und für den nächsten Taktzyklus vorzubereiten, wird das in der Haltesignal-Logik 218 implementierte Halte-RS-Flipflop gesetzt, wenn ein Freigabesignal, wie z. B. adr, auf Low geht. Da jeweils nur ein Freigabesignal aktiviert ist, wird dieser Zustand in der Haltesignal-Logik 218 durch ein NOR-Gatter (z. B. ein UND-Gatter mit invertierten Eingängen) erkannt, das so ausgestaltet ist, dass es erkennt, wenn alle Freigabesignale deaktiviert sind. Das Haltesignal, das aktiviert wird, setzt dann das ausgewählte RS-Flip-Flop in der Abtastfreigabe-Logik 216 zurück. Eine Verzögerung kann in den Haltesignal-zu-Abtast-Freigabesignal-Rücksetzpfad eingefügt werden, falls es erforderlich ist, um die Überlappungsperiode zu verlängern.
  • 2D zeigt ein Flussdiagramm eines Verfahrens 225 zur Erzeugung eines Störimpuls-freien Multiplexer-Ausgangssignals gemäß einer Ausführungsform. Das Verfahren 225 kann durch eine Logikschaltung oder eine benutzerdefinierte Schaltung ausgeführt werden. Beispielsweise kann das Verfahren 225 von einer GPU, CPU oder einem beliebigen Prozessor ausgeführt werden, der in der Lage ist, das Störimpuls-freie Signal zu erzeugen. Darüber hinaus versteht der Fachmann, dass jedes System, das das Verfahren 225 ausführt, innerhalb des Umfangs und des Geistes der Ausführungsformen der vorliegenden Offenbarung liegt.
  • In Schritt 230 wird ein Auswahl-Bereitschaftssignal an dem zeitgesteuerten Decoder 210 empfangen. Das Auswahl-Bereitschaftssignal ist negiert, bis ein von der kombinatorischen Logik erzeugtes Auswahlsignal unveränderlich (Störimpuls-frei) ist, und wird aktiviert, nachdem das Auswahlsignal unveränderlich ist. In Schritt 235 erzeugt der zeitgesteuerte Decoder 210 mindestens ein Abtast-Freigabesignal entsprechend dem Auswahlsignal, wobei das mindestens eine Abtast-Freigabesignal mit einem Satz von Dateneingangssignalen korrespondiert. Das mindestens eine Abtast-Freigabesignal ist negiert, während das Auswahl-Bereitschaftssignal negiert ist, und wird aktiviert, wenn das Auswahl-Bereitschaftssignal und das entsprechende Daten-Bereitschaftssignal beide aktiviert sind.
  • In einer Ausführungsform umfasst das Auswahlsignal ein Multi-Bit-Signal, und jedes Bit im Auswahlsignal ist einem anderen der Dateneingangssignale in dem Satz von Dateneingangssignalen zugeordnet, und nur ein Bit ist zu einem Zeitpunkt aktiviert. Zum Beispiel kann das Auswahlsignal durch den Ein-Hot-Decoder 220 derart kodiert sein, dass nur ein Bit aktiviert ist, um adr,...,ddr zu erzeugen. In einer Ausführungsform wird jedes einzelne der Bits in dem Auswahlsignal verwendet, um das zugehörige Dateneingangssignal abzutasten. Zum Beispiel wird das Multi-Bit-Auswahlsignal verwendet, um die Abtast-Freigabesignale zu erzeugen, die jeweils einem anderen der Dateneingangssignale zugeordnet sind. In einer Ausführungsform kann das Auswahlsignal binär kodiert sein, wobei jedes binäre Muster eines der Dateneingangssignale auswählt.
  • In einer Ausführungsform empfängt der zeitgesteuerte Decoder 210 einen Satz von Bereitschaftssignalen, wobei jedes Bereitschaftssignal in dem Satz einem anderen der Dateneingangssignale in dem Satz von Dateneingangssignalen zugeordnet ist. Darüber hinaus ist jedes Bereitschaftssignal negiert, bis das zugehörige Dateneingangssignal unveränderlich ist, und jedes Bereitschaftssignal wird aktiviert, sobald das zugehörige Dateneingangssignal unveränderlich ist.
  • In einer Ausführungsform ist der zeitgesteuerte Decoder 210 darüber hinaus ausgestaltet, um einen Satz von Freigabesignalen, wie adr, ..., ddr, zu erzeugen, wobei jedes Freigabesignal in dem Satz einem anderen der Dateneingangssignale in dem Satz von Dateneingangssignalen zugeordnet ist. Ferner ist jedes der Freigabesignale negiert, während das zugehörige Bereitschaftssignal negiert ist, und jedes der Freigabesignale wird als Reaktion auf die Aktivierung des zugehörigen Bereitschaftssignals aktiviert, wenn das zugehörige Dateneingangssignal aktiviert ist.
  • In Schritt 240 erzeugt der zeitgesteuerte Decoder 210 ein Haltesignal, das aktiviert ist, während das mindestens eine Abtast-Freigabesignal negiert ist, und das als Reaktion auf die Aktivierung des mindestens einen Abtast-Freigabesignals negiert wird. In einer Ausführungsform ist der zeitgesteuerte Decoder 210 so ausgestaltet, dass er das Haltesignal aktiviert, während das Haltesignal aktiviert ist und das mindestens eine Abtast-Freigabesignal negiert ist. In einer Ausführungsform werden das Haltesignal und das mindestens eine Abtast-Freigabesignal beide für eine erste Zeitdauer (z. B. to und/oder t1) aktiviert. In einer Ausführungsform wird das Haltesignal invertiert, um ein dem Ausgangssignal zugeordnetes Ausgangs-Bereitschaftssignal zu erzeugen.
  • In Schritt 245 hält eine Abtastschaltung, wie z. B. die Ausgangsstufe 215, ein Ausgangssignal unverändert, während das Haltesignal aktiviert ist. In Schritt 250 wird eines der Dateneingangssignale gemäß dem mindestens einen Abtast-Freigabesignal abgetastet, während das Haltesignal negiert ist, um einen Wert des abgetasteten Dateneingangssignals an das Ausgangssignal zu übertragen.
  • In einer Ausführungsform weist der Satz von Eingangsdatensignalen drei Eingangsdatensignale auf, und das Auswahlsignal ist so gestaltet, dass es eines der drei Eingangsdatensignale auswählt, um das Ausgangssignal zu erzeugen. In einer Ausführungsform weist der Satz von Eingangsdatensignalen vier Eingangsdatensignale auf, und das Auswahlsignal ist so ausgestaltet, dass es zwei der vier Eingangsdatensignale auswählt, um das Ausgangssignal und ein zusätzliches Ausgangssignal zu erzeugen.
  • Eine besondere Ausführungsform eines störimpuls-freien Multiplexers ist ein 4-2-Multiplexer, der gleichzeitig zwei von vier Eingängen a0 bis a3 auswählt, um sie an zwei Ausgangssignale q0 und q1 weiterzuleiten. Unter Beibehaltung der Reihenfolge gibt es sechs Möglichkeiten, die durch ein Drei-Bit-Auswahlsignal für einen solchen Multiplexer kodiert werden, wie es in Tabelle 1 dargestellt ist: Tabelle 1
    se1 q0 q1
    0 a0 a1
    1 a0 a2
    2 a0 a3
    3 a1 a2
    4 a1 a3
    5 a2 a3
  • Der Datenpfad des 4-2-Multiplexers kann als zwei 3-1-Multiplexer implementiert sein, wobei die entsprechenden dekodierten Eingangs-Bereitschaftssignale aus dem 3-6-Dekodierschema abgeleitet werden, wie es in den folgenden Gleichungen angegeben ist:
  • Für den 3-1-Multiplexer, der q0 erzeugt: a 00 dr = ( s 0 s 1 s 2 ) selr a 0 r a 01 dr = ( s 3 s 4 ) selr a 1 r a 02 dr = s 5 selr a 2 r
    Figure DE102021116231A1_0001
  • Für den 3-1-Multiplexer, der q1 erzeugt: a 11 dr = s 0 selr a 1 r a 12 dr = ( s 1 s 3 ) selr a 2 r a 13 dr = ( s 2 s 4 s 5 ) selr a 3 r
    Figure DE102021116231A1_0002
  • Hier bedeutet sx (wobei x einen Wert von 0-5 aufweist), dass das Auswahlsignal x heißt; auvdr ist das dekodierte Eingangs-Bereitschaftssignal, das das Eingangssignal av mit dem Ausgangssignal qu verknüpft. Diese Signale werden zur Ansteuerung von vier RS-Latches für jeden 3-1-Multiplexer des 4-2-Multiplexers verwendet. Für den q0-Multiplexer erzeugen drei RS-Latches die Signale a00s, a01s und a02s - sie geben den Pfad von den Eingängen a0, a1 bzw. a2 zu q0 frei. Das letzte RS-Latch hält q0. Ein ähnlicher Satz von vier RS-Latches steuert den Multiplexer q1. Die Gleichung für das RS-Latch a00s lautet zum Beispiel: a00s = a00dr v (a00s Λ (hold0)').
  • 2E zeigt eine Schaltung zur Erzeugung eines gestreckten Bereitschaftssignals 255 gemäß einer Ausführungsform. Ein RS-Flipflop, das ein UND-Gatter 256 und ein ODER-Gatter 257 umfasst, wird verwendet, um das Auswahl-Bereitschaftssignal zu strecken, um eine Überlappung mit dem Eingangs-Bereitschaftssignal zu gewährleisten. Damit ein Störimpuls-freier Multiplexer korrekt funktioniert, überlappen sich das Auswahl-Bereitschaftssignal (SelR) und das Eingangs-Bereitschaftssignal (XR) um genügend Zeit, um das ausgewählte RS-Flipflop in der Abtast-Freigabesignal-Logik 216 des zeitgesteuerten Decoders 210 zu setzen. Wenn das Eingangs-Bereitschaftssignal um viel mehr als das Auswahl-Bereitschaftssignal verzögert ist, kann die Überlappung nicht auftreten. Dieses Problem kann durch die Verwendung eines zusätzlichen RS-Flipflops zur Dehnung bzw. Streckung des Auswahl-Bereitschaftssignals behoben werden. Das gestreckte Signal (SeIXR) wird gesetzt, wenn SelR auf High geht, und wird auf Low zurückgesetzt, wenn das entsprechende Abtast-Freigabesignal (XS) auf High geht. Der zeitgesteuerte Decoder 210 kann so modifiziert werden, dass er das zusätzliche RS-Flipflop für jedes Eingangsdatensignal aufweist. Insbesondere kann die Schaltung zur Erzeugung des gestreckten Bereitschaftssignals 255 eingefügt werden, um den Eingang SelR zu jedem UND-Gatter innerhalb der Bereitschafts-signal-Logik 221 zu ersetzen.
  • 2F zeigt ein Zeitdiagramm für die Schaltung zur Erzeugung des getreckten Bereitschaftssignals 255 aus 2E gemäß einer Ausführungsform. Da es eine unzureichende Überlappungszeit gibt, wenn sowohl SelR als auch XR aktiviert sind, wird das Signal SelR zum Signal SelXR gestreckt und verwendet, um XS zu erzeugen. SelXR wird als Reaktion auf die Aktivierung von XS zurückgesetzt. SelXR wird als Reaktion auf das Aktivieren von SelR gesetzt.
  • In einigen Fällen bestehen die Eingangs-Bereitschaftssignale länger als nötig und können das Zurücksetzen des Störimpuls-freien N-zu-1-Multiplexers 200 unnötig verzögern, um ihn auf den nächsten Satz von Eingaben vorzubereiten. Eine rasch zurückkehrende Schaltung bzw. Quick-Return-Schaltung kann für das Eingangs-Bereitschaftssignal implementiert sein. Die Quick-Return-Schaltung setzt das Eingangs-Bereitschaftssignal in einen nicht-aktivierten Zustand zurück, kurz nachdem das Ausgangs-Bereitschaftssignal erfasst wurde.
  • 2G veranschaulicht eine Quick-Return-Schaltung 260 gemäß einer Ausführungsform. Die logischen Gleichungen für diese Schaltung sind: ARq = AR S
    Figure DE102021116231A1_0003
    S = ( AR S ) ( ARq OR )
    Figure DE102021116231A1_0004
  • Dabei ist AR das Eingangsdaten-Bereitschaftssignal, ARq ist die Quick-Return-Version des Eingangsdaten-Bereitschaftssignals, OR ist das Ausgangs-Bereitschaftssignal - eine verzögerte Version von AS, S ist eine Zustandsvariable und S' ist das Komplementsignal von S.
  • 2H zeigt ein Zeitdiagramm für die Quick-Return-Schaltung 260 aus 2G gemäß einer Ausführungsform. Das Signal ARq steigt an, wenn das Eingangs-Bereitschaftssignal AR ansteigt, fällt aber ab, sobald das Ausgangs-Bereitschaftssignal OR auf High geht. Das Signal AR geht auf High und bleibt für eine gewisse Zeit auf High. Damit der störungsfreie N-zu-1-Multiplexer 200 früher zurückgesetzt werden kann, erzeugt die Quick-Return-Schaltung 260 das Signal ARq, das mit einer geringen Latenzzeit auf Null zurückkehrt, nachdem OR auf High gegangen ist. Das Quick-Return-Verhalten wird durch Setzen des Zustandssignals S aktiviert, das von einem RS-Flipflop erzeugt wird. Das RS-Flip-Flop wird gesetzt, wenn OR auf High geht, während ARq auf High ist. Das RS-Flip-Flop hält S auf High, bis es durch AR auf Low zurückgesetzt wird.
  • In anderen Fällen kann das Ausgangs-Bereitschaftssignal (OR) so lange verlängert werden, bis alle Ausgänge, mit denen es kombiniert wird, ebenfalls bereit sind und die Kombination von der nachfolgenden Schaltung akzeptiert wird. Dieses Ereignis kann durch ein Signal ack signalisiert werden (das auch das Ausgangs-Bereitschaftssignal der nachfolgenden Schaltung sein kann). In diesen Fällen kann die Verwendung des komplementären Haltesignals als OR nicht lange genug dauern, um die Zeitvorgaben der Implementierung zu erfüllen. Ein verlängertes Ausgangs-Bereitschaftssignal kann mit Hilfe eines RS-Flipflops erzeugt werden, das gesetzt ist, wenn hold deaktiviert ist, und zurückgesetzt wird, wenn ack aktiviert wird: OR = hol d ( ac k OR )
    Figure DE102021116231A1_0005
  • In diesem Fall kann die Haltesignal-Logik 218 der 2C modifiziert werden, um zu verhindern, dass dass das Haltesignal wieder deaktiviert wird, bis ack aktiviertwird.
  • Das Störimpuls-freie Vorgehen kann verwendet werden, um den Stromverbrauch der Multiplexerlogik zu reduzieren. Wenn verhindert wird, dass sich das Ausgangssignal ändert, bis ein Störimpuls-freier Wert an das Ausgangssignal weitergegeben werden kann, führt dies dazu, dass sich das Ausgangssignal nur einmal pro Taktzyklus ändert (oder konstant bleibt). Wenn das Ausgangssignal einen Störimpuls aufweist, kann sich die Logik, die das Signal empfängt, als Reaktion darauf ändern, wodurch Knoten innerhalb der Logik geladen und/oder entladen werden und Strom verbraucht wird. Die Bereitstellung eines Störimpuls-freien Signals kann die Anzahl der Lade- und/oder Entladevorgänge der Knoten reduzieren, wodurch die von der Logik verbrauchte Leistung verringert wird.
  • Das Störimpuls-freie Vorgehen verknüpft ein Bereitschaftssignal mit jedem Eingang für den Störimpuls-freien Multiplexer, um die Abtastung des ausgewählten Eingangs zu steuern, sobald die Eingänge stabil und störungsfrei sind. Ausführungsformen eines Abtastelements weisen ein transparentes Latch oder einen Multiplexer mit Rückkopplung auf. Die Bereitschaftssignale sind jeweils bezüglich ihrer Verzögerung an einen zugeordneten Eingang angepasst und können verlängert sein, ein asymmetrischer Puls sein oder rasch zurückgesetzt werden. Innerhalb des Multiplexers wird ein Haltesignal erzeugt, um das Ausgangssignal über einen Rückkopplungspfad stabil zu halten, bis der abgetastete Signalwert weitergegeben ist. Das Haltesignal kann auch dazu verwendet werden, um ein Ausgangs-Bereitschaftssignal zu erzeugen.
  • Das störungsfreie Vorgehen kann in jeder Schaltung implementiert werden, die kombinatorische und sequentielle Logik umfasst. Zum Beispiel kann das störungsfreie Vorgehen in einem oder mehreren Logikblöcken innerhalb eines Prozessors und für die Eingabe in den oder die Ausgabe aus dem Prozessor verwendet werden. Insbesondere kann ein Störimpuls-freier Multiplexer verwendet werden, um nur Nicht-Null-Aktivierungen (non-zero activations) und/oder Nicht-Null-Gewichte für Faltungsoperationen auszuwählen. In einer Ausführungsform kann das störungsfreie Vorgehen in einer parallelen Verarbeitungsarchitektur implementiert sein, wie es hier im Folgenden beschrieben ist.
  • Parallelverarbeitungsarchitektur
  • 3 illustriert eine Parallelverarbeitungseinheit (PPU) 300 gemäß einer Ausführungsform. In einer Ausführungsform ist die PPU 300 ein Multi-Thread-Prozessor, der auf einer oder mehreren integrierten Schaltungseinrichtungen implementiert ist. Die PPU 300 ist eine latenzverbergende Architektur, die dafür ausgelegt ist, viele Threads parallel zu verarbeiten. Ein Thread (z. B. ein Ausführungs-Thread) ist eine Instanziierung eines Satzes von Anweisungen, die zur Ausführung durch die PPU 300 ausgestaltet sind. In einer Ausführungsform ist die PPU 300 eine Grafikverarbeitungseinheit (GPU), die so ausgestaltet ist, dass sie eine Grafik-Rendering-Pipeline für die Verarbeitung dreidimensionaler (3D) Grafikdaten implementiert, um zweidimensionale (2D) Bilddaten für die Anzeige auf einer Anzeigeeinrichtung, wie z. B. einer Flüssigkristallanzeige (LCD), zu erzeugen. Bei anderen Ausführungen kann die PPU 300 für die Durchführung von Allzweckberechnungen verwendet werden. Während ein beispielhafter Parallelprozessor hier zu Veranschaulichungszwecken bereitgestellt wird, sei nachdrücklich darauf hingewiesen, dass ein solcher Prozessor nur zu Veranschaulichungszwecken dargelegt ist und dass jeder beliebige Prozessor zur Ergänzung und/oder zum Ersatz desselben verwendet werden kann.
  • Eine oder mehrere PPUs 300 können so ausgestaltet sein, dass sie Tausende von High Performance Computing (HPC)-, Rechenzentrums- und Machine Learning-Anwendungen beschleunigen. Die PPU 300 kann so ausgestaltet sein, dass sie zahlreiche Deep-Learning-Systeme und -Anwendungen beschleunigt, darunter Plattformen für ein autonomes Fahrzeug, Deep Learning, hochpräzise Sprach-, Bild- und Texterkennungssysteme, intelligente Videoanalyse, molekulare Simulationen, Arzneimittelentdeckung, Krankheitsdiagnose, Wettervorhersage, Big-Data-Analytik, Astronomie, Molekulardynamiksimulation, Finanzmodellierung, Robotik, Fabrikautomatisierung, Echtzeit-Sprachübersetzung, Online-Suchoptimierung und personalisierte Benutzerempfehlungen und dergleichen.
  • Wie es in 3 dargestellt ist, weist die PPU 300 eine Input/Output (I/O)-Einheit 305, eine Front-End-Einheit 315, eine Scheduler-Einheit 320, eine Arbeitsverteilungseinheit 325, einen Hub 330, ein Koppelfeld bzw. eine Crossbar (Xbar) 370, einen oder mehrere General Processing Cluster (GPCs) 350 und eine oder mehrere Speicherpartitionseinheiten 380 auf. Die PPU 300 kann mit einem Host-Prozessor oder anderen PPUs 300 über eine oder mehrere Hochgeschwindigkeits-NVLink 310-Verbindungen verbunden sein. Die PPU 300 kann mit einem Host-Prozessor oder anderen peripheren Einrichtungen über eine Verbindung 302 verbunden sein. Die PPU 300 kann auch mit einem lokalen Speicher 304 verbunden sein, der eine Reihe von Speichereinrichtungen umfasst. In einer Ausführungsform kann der lokale Speicher eine Anzahl von DRAM-Einrichtungen (Dynamic Random Access Memory) umfassen. Die DRAM-Einrichtungen können als HBM-Subsystem (High-Bandwidth Memory) ausgestaltet sein, wobei mehrere DRAM-Dies in jeder Einrichtung übereinander angeordnet sind.
  • Die Verbindung NVLink 310 ermöglicht die Skalierung von Systemen und weist eine oder mehrere PPUs 300 in Kombination mit einer oder mehreren CPUs auf, unterstützt die Cache-Kohärenz zwischen den PPUs 300 und den CPUs sowie das CPU-Mastering. Daten und/oder Befehle können über den NVLink 310 durch den Hub 330 zu/von anderen Einheiten der PPU 300 übertragen werden, wie z. B. einer oder mehreren Kopiermaschinen, einem Video-Encoder, einem Video-Decoder, einer Power-Management-Einheit usw. (nicht explizit dargestellt). Der NVLink 310 wird in Verbindung mit 5B ausführlicher beschrieben.
  • Die I/O-Einheit 305 ist ausgestaltet, um Kommunikationen (z. B. Befehle, Daten usw.) von einem Host-Prozessor (nicht dargestellt) über die Verbindung 302 zu senden und zu empfangen. Die I/O-Einheit 305 kann mit dem Host-Prozessor direkt über die Verbindung 302 oder über eine oder mehrere zwischengeschaltete Einrichtungen, wie z. B. eine Speicherbrücke, kommunizieren. Bei einer Ausführungsform kann die I/O-Einheit 305 mit einem oder mehreren anderen Prozessoren, wie z. B. einer oder mehreren PPUs 300, über die Verbindung 302 kommunizieren. In einer Ausführungsform implementiert die I/O-Einheit 305 eine Peripheral Component Interconnect Express (PCIe)-Schnittstelle für die Kommunikation über einen PCIe-Bus, und die Verbindung 302 ist ein PCIe-Bus. Bei anderen Ausführungen kann die I/O-Einheit 305 andere Arten von bekannten Schnittstellen für die Kommunikation mit externen Einrichtungen implementieren.
  • Die I/O-Einheit 305 dekodiert Pakete, die über die Verbindung 302 empfangen werden. In einer Ausführungsform stellen die Pakete Befehle dar, die so ausgestaltet sind, dass sie die PPU 300 veranlassen, verschiedene Operationen durchzuführen. Die I/O-Einheit 305 überträgt die dekodierten Befehle an verschiedene andere Einheiten der PPU 300, wie es die Befehle vorgeben können. Zum Beispiel können einige Befehle an die Front-End-Einheit 315 übertragen werden. Andere Befehle können an den Hub 330 oder andere Einheiten der PPU 300 übertragen werden, wie z. B. eine oder mehrere Kopiermaschinen, einen Video-Encoder, einen Video-Decoder, eine Power-Management-Einheit usw. (nicht explizit dargestellt). Mit anderen Worten, die I/O-Einheit 305 ist so ausgestaltet, dass sie die Kommunikation zwischen und unter den verschiedenen logischen Einheiten der PPU 300 routen.
  • In einer Ausführungsform kodiert ein von dem Host-Prozessor ausgeführtes Programm einen Befehlsstrom in einen Puffer, der der PPU 300 Arbeiten zur Verarbeitung bereitstellt. Eine Arbeit (Workload) kann mehrere Befehle und Daten, die von diesen Befehlen verarbeitet werden sollen, umfassen. Der Puffer ist ein Bereich in einem Speicher, auf den sowohl der Host-Prozessor als auch die PPU 300 zugreifen (z. B. lesen/schreiben) können. Beispielsweise kann die I/O-Einheit 305 so ausgestaltet sein, dass sie über Speicheranforderungen, die über die Verbindung 302 übertragen werden, auf den Puffer in einem mit der Verbindung 302 verbundenen Systemspeicher zugreift. In einer Ausführungsform schreibt der Host-Prozessor den Befehlsstrom in den Puffer und überträgt dann einen Zeiger auf den Anfang des Befehlsstroms an die PPU 300. Die Frontend-Einheit 315 empfängt Zeiger auf einen oder mehrere Befehlsströme. Die Frontend-Einheit 315 verwaltet den einen oder die mehreren Ströme, liest Befehle aus den Strömen und leitet Befehle an die verschiedenen Einheiten der PPU 300 weiter.
  • Die Frontend-Einheit 315 ist mit einer Scheduler-Einheit 320 gekoppelt, die die verschiedenen GPCs 350 so ausgestaltet, dass sie Tasks verarbeiten, die durch den einen oder die mehreren Ströme definiert sind. Die Scheduler-Einheit 320 ist so ausgestaltet, dass sie Zustandsinformationen in Bezug auf die verschiedenen, von der Scheduler-Einheit 320 verwalteten Tasks verfolgt. Der Zustand kann anzeigen, welchem GPC 350 eine Task zugewiesen ist, ob die Task aktiv oder inaktiv ist, eine Prioritätsstufe, die mit der Task verbunden ist, und so weiter. Die Scheduler-Einheit 320 verwaltet die Ausführung einer Vielzahl von Tasks auf dem einen oder mehreren GPCs 350.
  • Die Scheduler-Einheit 320 ist mit einer Arbeitsverteilungseinheit 325 gekoppelt, die ausgestaltet ist, um Tasks zur Ausführung auf den GPCs 350 zu verteilen.
  • Die Arbeitsverteilungseinheit 325 kann eine Anzahl von geplanten Tasks verfolgen, die von der Scheduler-Einheit 320 empfangen wurden. In einer Ausführungsform verwaltet die Arbeitsverteilungseinheit 325 einen Pool ausstehender Tasks und einen Pool aktiver Tasks für jeden der GPCs 350. Der Pool ausstehender Tasks kann eine Anzahl von Slots (z. B. 32 Slots) umfassen, die Tasks enthalten, die zur Bearbeitung durch einen bestimmten GPC 350 zugewiesen sind. Der Pool aktiver Tasks kann eine Anzahl von Slots (z. B. 4 Slots) für Tasks umfassen, die aktiv von den GPCs 350 bearbeitet werden. Wenn ein GPC 350 die Ausführung einer Task beendet, wird diese Task aus dem Pool aktiver Tasks für den GPC 350 entfernt und eine der anderen Tasks aus dem Pool ausstehender Tasks wird ausgewählt und für die Ausführung auf dem GPC 350 eingeplant. Wenn eine aktive Task auf dem GPC 350 im Leerlauf war, z. B. während des Wartens auf die Auflösung einer Datenabhängigkeit, dann kann die aktive Task aus dem GPC 350 entfernt und in den Pool ausstehender Tasks zurückgeführt werden, während eine andere Task im Pool ausstehender Tasks ausgewählt und zur Ausführung auf dem GPC 350 eingeplant wird.
  • Die Arbeitsverteilungseinheit 325 kommuniziert mit dem einen oder mehreren GPCs 350 über die XBar 370. Die XBar 370 ist ein Verbindungsnetzwerk, das viele der Einheiten der PPU 300 mit anderen Einheiten der PPU 300 koppelt. Beispielsweise kann die XBar 370 so ausgestaltet sein, dass sie die Arbeitsverteilungseinheit 325 mit einem bestimmten GPC 350 koppelt. Obwohl es nicht explizit dargestellt ist, können auch eine oder mehrere andere Einheiten der PPU 300 über den Hub 330 mit der XBar 370 verbunden sein.
  • Die Tasks werden von der Scheduler-Einheit 320 verwaltet und von der Arbeitsverteilungseinheit 325 an einen GPC 350 weitergeleitet. Der GPC 350 ist so ausgestaltet, dass er die Task verarbeitet und Ergebnisse erzeugt. Die Ergebnisse können von anderen Tasks innerhalb des GPC 350 aufgenommen, über die XBar 370 an einen anderen GPC 350 weitergeleitet oder im Speicher 304 abgelegt werden. Die Ergebnisse können über die Speicherpartitionseinheiten 380 in den Speicher 304 geschrieben werden, die eine Speicherschnittstelle zum Lesen und Schreiben von Daten in/aus dem Speicher 304 implementieren. Die Ergebnisse können über den NVLink 310 an eine andere PPU 300 oder CPU übertragen werden. In einer Ausführungsform weist die PPU 300 eine Anzahl U von Speicherpartitionseinheiten 380 auf, die der Anzahl von separaten und unterschiedlichen Speichereinrichtungen des mit der PPU 300 gekoppelten Speichers 304 entspricht.
  • Eine Speicherpartitionseinheit 380 wird weiter unten in Verbindung mit 4B näher beschrieben.
  • In einer Ausführungsform führt ein Host-Prozessor einen Treiberkern aus, der eine Anwendungsprogrammierschnittstelle (API) implementiert, die es einer oder mehreren auf dem Host-Prozessor ausgeführten Anwendungen ermöglicht, Operationen zur Ausführung auf der PPU 300 einzuplanen. In einer Ausführungsform werden mehrere Rechenanwendungen gleichzeitig von der PPU 300 ausgeführt und die PPU 300 bietet Isolierung, Dienstgüte (QoS) und unabhängige Adressräume für die mehreren Rechenanwendungen. Eine Anwendung kann Anweisungen (z. B. API-Aufrufe) generieren, die den Treiberkern veranlassen, eine oder mehrere Tasks zur Ausführung durch die PPU 300 zu generieren. Der Treiberkern gibt Tasks an einen oder mehrere Streams aus, die von der PPU 300 verarbeitet werden. Jede Task kann eine oder mehrere Gruppen von zusammenhängenden Threads umfassen, die hier als Warp bezeichnet werden. In einer Ausführungsform umfasst ein Warp 32 zusammengehörige Threads, die parallel ausgeführt werden können. Kooperierende Threads können sich auf eine Vielzahl von Threads beziehen, die Anweisungen zur Ausführung der Task aufweisen und Daten über einen gemeinsamen Speicher austauschen können. Threads und kooperierende Threads werden in Verbindung mit 5A ausführlicher beschrieben.
  • 4A zeigt einen GPC 350 der PPU 300 aus 3 gemäß einer Ausführungsform. Wie es in 4A gezeigt ist, weist jeder GPC 350 eine Anzahl von Hardwareeinheiten zur Verarbeitung von Tasks auf. In einer Ausführungsform weist jeder GPC 350 einen Pipeline-Manager 410, eine Pre-Raster Operations Unit (PROP) 415, eine Raster-Engine 425, eine Work Distribution Crossbar (WDX) 480, eine Memory Management Unit (MMU) 490 und einen oder mehrere Data Processing Clusters (DPCs) 420 auf. Es ist klar, dass der GPC 350 der 4A andere Hardwareeinheiten anstelle der in 4A gezeigten Einheiten oder zusätzlich zu diesen aufweisen kann.
  • In einer Ausführungsform wird der Betrieb des GPC 350 durch den Pipeline-Manager 410 gesteuert. Der Pipeline-Manager 410 verwaltet die Konfiguration des einen oder der mehreren DPCs 420 für die Verarbeitung von Tasks, die dem GPC 350 zugewiesen sind. Bei einer Ausführungsform kann der Pipeline-Manager 410 mindestens einen des einen oder der mehreren DPCs 420 so konfigurieren, dass er mindestens einen Abschnitt einer Grafik-Rendering-Pipeline implementiert. Zum Beispiel kann ein DPC 420 so ausgestaltet sein, dass er ein Vertex-Shader-Programm auf dem programmierbaren Streaming-Multiprozessor (SM) 440 ausführt. Der Pipeline-Manager 410 kann auch so ausgestaltet sein, dass er von der Arbeitsverteilungseinheit 325 empfangene Pakete an die entsprechenden logischen Einheiten innerhalb des GPC 350 weiterleitet. Beispielsweise können einige Pakete an Hardwareeinheiten mit fester Funktion in der PROP 415 und/oder in der Raster-Engine 425 weitergeleitet werden, während andere Pakete an die DPCs 420 zur Verarbeitung durch die Primitiv-Engine 435 oder den SM 440 weitergeleitet werden können. Bei einer Ausführungsform kann der Pipeline-Manager 410 mindestens einen des einen oder der mehreren DPCs 420 konfigurieren, um ein neuronales Netzwerkmodell und/oder eine Rechenpipeline zu implementieren.
  • Die PROP-Einheit 415 ist so ausgestaltet, dass sie die von der Raster-Engine 425 und den DPCs 420 erzeugten Daten an eine Raster Operations (ROP)-Einheit weiterleitet, die in Verbindung mit 4B näher beschrieben wird. Die PROP-Einheit 415 kann auch so ausgestaltet sein, dass sie Optimierungen für die Farbmischung durchführt, Pixeldaten organisiert, Adressübersetzungen durchführt und dergleichen.
  • Die Raster-Engine 425 weist eine Reihe von Hardwareeinheiten mit fester Funktion auf, die so ausgestaltet sind, dass sie verschiedene Rasteroperationen durchführen. In einer Ausführungsform weist die Raster-Engine 425 eine Setup-Engine, eine Grobraster-Engine, eine Culling-Engine, eine Clipping-Engine, eine Feinraster-Engine und eine Tile Coalescing-Engine auf. Die Setup-Engine empfängt transformierte Vertices und erzeugt Ebenengleichungen, die mit dem durch die Vertices definierten geometrischen Primitiv verbunden sind. Die Ebenengleichungen werden an die Grobraster-Engine übertragen, um Abdeckungsinformationen (z. B. eine x,y-Abdeckungsmaske für eine Kachel) für das Primitiv zu erzeugen. Die Ausgabe der Grobraster-Engine wird an die Culling-Engine weitergeleitet, wo Fragmente, die mit dem Primitiv verbunden sind und einen z-Test nicht bestehen, aussortiert werden, und an eine Clipping-Engine weitergeleitet, wo Fragmente, die außerhalb eines Sichtkegels liegen, abgeschnitten werden. Die Fragmente, die das Beschneiden und Aussortieren überstehen, können an die Feinraster-Engine weitergeleitet werden, um Attribute für die Pixelfragmente auf der Grundlage der von der Setup-Engine erzeugten Ebenengleichungen zu generieren. Die Ausgabe der Raster-Engine 425 umfasst Fragmente, die z. B. von einem in einem DPC 420 implementierten Fragment-Shader verarbeitet werden.
  • Jeder in dem GPC 350 enthaltene DPC 420 weist eine M-Pipe-Steuerung (MPC) 430, eine Primitiv-Engine 435 und einen oder mehrere SMs 440 auf. Der MPC 430 steuert den Betrieb des DPC 420 und leitet die von dem Pipeline-Manager 410 empfangenen Pakete an die entsprechenden Einheiten in dem DPC 420 weiter. Beispielsweise können Pakete, die einem Vertex zugeordnet sind, an die Primitiv-Engine 435 weitergeleitet werden, die so ausgestaltet ist, dass sie Vertexattribute, die dem Vertex zugeordnet sind, aus dem Speicher 304 abruft. Im Gegensatz dazu können Pakete, die mit einem Shader-Programm assoziiert sind, an den SM 440 übertragen werden.
  • Der SM 440 umfasst einen programmierbaren Streaming-Prozessor, der so ausgestaltet ist, dass er Tasks verarbeitet, die durch eine Anzahl von Threads repräsentiert werden. Jeder SM 440 ist multi-threaded und so ausgestaltet, dass er eine Vielzahl von Threads (z. B. 32 Threads) aus einer bestimmten Gruppe von Threads gleichzeitig ausführt. In einer Ausführungsform implementiert der SM 440 eine SIMD-Architektur (Single-Instruction, Multiple-Data), bei der jeder Thread in einer Gruppe von Threads (z. B. ein Warp) so ausgestaltet ist, dass er einen anderen Satz von Daten auf der Grundlage desselben Satzes von Anweisungen verarbeitet. Alle Threads in der Gruppe von Threads führen die gleichen Anweisungen aus. In einer anderen Ausführungsform implementiert der SM 440 eine SIMT-Architektur (Single-Instruction, Multiple Thread), bei der jeder Thread in einer Gruppe von Threads so ausgestaltet ist, dass er einen anderen Datensatz auf der Grundlage desselben Befehlssatzes verarbeitet, wobei jedoch einzelne Threads in der Gruppe von Threads während der Ausführung divergieren dürfen. In einer Ausführungsform werden ein Programmzähler, ein Aufrufstack und ein Ausführungsstatus für jeden Warp gehalten, was Gleichzeitigkeit zwischen Warps und serielle Ausführung innerhalb von Warps ermöglicht, wenn Threads innerhalb des Warps divergieren. In einer anderen Ausführungsform werden ein Programmzähler, ein Aufrufstack und ein Ausführungsstatus für jeden einzelnen Thread gehalten, was gleiche Gleichzeitigkeit zwischen allen Threads innerhalb und zwischen Warps ermöglicht. Wenn der Ausführungsstatus für jeden einzelnen Thread gehalten wird, können Threads, die dieselben Anweisungen ausführen, zusammengeführt und parallel ausgeführt werden, um maximale Effizienz zu erzielen. Der SM 440 wird weiter unten in Verbindung mit 5A ausführlicher beschrieben.
  • Die MMU 490 stellt eine Schnittstelle zwischen dem GPC 350 und der Speicherpartitionseinheit 380 bereit. Die MMU 490 kann die Übersetzung von virtuellen Adressen in physikalische Adressen, den Speicherschutz und die Arbitrierung von Speicheranforderungen bereitstellen. In einer Ausführungsform stellt die MMU 490 einen oder mehrere Übersetzungs-Lookaside-Puffer (TLBs) bereit, um die Übersetzung von virtuellen Adressen in physikalische Adressen im Speicher 304 durchzuführen.
  • 4B veranschaulicht eine Speicherpartitionseinheit 380 der PPU 300 von 3 gemäß einer Ausführungsform. Wie es in 4B gezeigt ist, weist die Speicherpartitionseinheit 380 eine Raster Operations (ROP)-Einheit 450, einen Level Zwei (L2)-Cache 460 und eine Speicherschnittstelle 470 auf. Die Speicherschnittstelle 470 ist mit dem Speicher 304 gekoppelt. Die Speicherschnittstelle 470 kann 32-, 64-, 128-, 1024-Bit-Datenbusse oder Ähnliches für die Hochgeschwindigkeitsdatenübertragung implementieren. In einer Ausführungsform weist die PPU 300 U Speicherschnittstellen 470 auf, eine Speicherschnittstelle 470 pro Paar von Speicherpartitionseinheiten 380, wobei jedes Paar von Speicherpartitionseinheiten 380 mit einer entsprechenden Einrichtung des Speichers 304 verbunden ist. Beispielsweise kann die PPU 300 mit bis zu Y Speichereinrichtungen verbunden sein, wie z. B. Speicherstacks mit hoher Bandbreite oder Grafikspeicher mit doppelter Datenrate, Version 5, synchroner dynamischer Direktzugriffsspeicher oder andere Arten von persistenten Speichern.
  • In einer Ausführungsform implementiert die Speicherschnittstelle 470 eine HBM2-Speicherschnittstelle und Y ist gleich der Hälfte von U. In einer Ausführungsform befinden sich die HBM2-Speicherstacks auf demselben physischen Gehäuse wie die PPU 300, was im Vergleich zu herkömmlichen GDDR5-SDRAM-Systemen erhebliche Energie- und Flächeneinsparungen ermöglicht. In einer Ausführungsform weist jeder HBM2-Stack vier Speicherchips auf und Y ist gleich 4, wobei der HBM2-Stack zwei 128-Bit-Kanäle pro Chip für insgesamt 8 Kanäle und eine Datenbusbreite von 1024 Bit aufweist.
  • In einer Ausführungsform unterstützt der Speicher 304 den Single-Error Correcting Double-Error Detecting (SECDED) Error Correction Code (ECC) zum Schutz der Daten. Der ECC bietet eine höhere Zuverlässigkeit für Rechenanwendungen, die empfindlich auf eine Datenverfälschung reagieren. Zuverlässigkeit ist besonders wichtig in großen Cluster-Rechen-Umgebungen, in denen PPUs 300 sehr große Datensätze verarbeiten und/oder Anwendungen über längere Zeiträume laufen lassen.
  • In einer Ausführungsform implementiert die PPU 300 eine mehrstufige Speicherhierarchie. In einer Ausführungsform unterstützt die Speicherpartitionierungseinheit 380 einen vereinheitlichten Speicher, um einen einzigen vereinheitlichten virtuellen Adressraum für den CPU- und PPU 300-Speicher bereitzustellen, was die gemeinsame Nutzung von Daten zwischen virtuellen Speichersystemen ermöglicht. In einer Ausführungsform wird die Häufigkeit von Zugriffen einer PPU 300 auf einen Speicher, der sich auf anderen Prozessoren befindet, verfolgt, um sicherzustellen, dass Speicherseiten in den physischen Speicher der PPU 300 verschoben werden, die häufiger auf die Seiten zugreift. In einer Ausführungsform unterstützt der NVLink 310 Adressübersetzungsdienste, die es der PPU 300 ermöglichen, direkt auf die Seitentabellen einer CPU zuzugreifen, und die der PPU 300 vollen Zugriff auf den CPU-Speicher ermöglichen.
  • In einer Ausführungsform übertragen Kopiermaschinen Daten zwischen mehreren PPUs 300 oder zwischen PPUs 300 und CPUs. Die Kopiermaschinen können Seitenfehler für Adressen erzeugen, die nicht in den Seitentabellen abgebildet sind. Die Speicherpartitionierungseinheit 380 kann dann die Seitenfehler bearbeiten und die Adressen in der Seitentabelle abbilden, woraufhin die Kopiermaschine die Übertragung durchführen kann. In einem herkömmlichen System wird der Speicher für mehrere Kopiervorgänge zwischen mehreren Prozessoren gepinnt (ist z. B. nicht auslagerbar), wodurch der verfügbare Speicher erheblich reduziert wird. Mit Hardware Page Faulting können Adressen an die Kopiermaschinen weitergegeben werden, ohne dass man sich Gedanken darüber machen muss, ob die Speicherseiten resident sind, und der Kopiervorgang ist transparent.
  • Daten aus dem Speicher 304 oder einem anderen Systemspeicher können von der Speicherpartitionseinheit 380 abgerufen und im L2-Cache 460 gespeichert werden, der sich auf dem Chip befindet und von den verschiedenen GPCs 350 gemeinsam genutzt wird. Wie es dargestellt ist, weist jede Speicherpartitionseinheit 380 einen Abschnitt des L2-Cache 460 auf, der einem entsprechenden Speicher 304 zugeordnet ist. Caches der unteren Ebene können dann in verschiedenen Einheiten innerhalb der GPCs 350 implementiert sein. Zum Beispiel kann jeder der SMs 440 einen Cache der Ebene eins (L1) implementieren. Der L1-Cache ist ein privater Speicher, der für einen bestimmten SM 440 bestimmt ist. Daten aus dem L2-Cache 460 können abgerufen und in jedem der L1-Caches zur Verarbeitung in den Funktionseinheiten der SMs 440 gespeichert werden. Der L2-Cache 460 ist mit der Speicherschnittstelle 470 und der XBar 370 gekoppelt.
  • Die ROP-Einheit 450 führt Grafikrasteroperationen durch, die sich auf die Pixelfarbe beziehen, wie z. B. Farbkomprimierung, Pixelüberblendung und Ähnliches. Die ROP-Einheit 450 implementiert auch eine Tiefenprüfung in Verbindung mit der Raster-Engine 425, wobei sie eine Tiefe für eine Sample-Position, die einem Pixelfragment zugeordnet ist, von der Culling-Engine der Raster-Engine 425 empfängt. Die Tiefe wird gegen eine entsprechende Tiefe in einem Tiefenpuffer für eine dem Fragment zugeordnete Sample-Position getestet. Wenn das Fragment den Tiefentest für die Sample-Position besteht, aktualisiert die ROP-Einheit 450 den Tiefenpuffer und überträgt ein Ergebnis des Tiefentests an die Raster-Engine 425. Es ist klar, dass die Anzahl der Speicherpartitionseinheiten 380 von der Anzahl der GPCs 350 abweichen kann und daher jede ROP-Einheit 450 mit jedem der GPCs 350 gekoppelt sein kann. Die ROP-Einheit 450 verfolgt die von den verschiedenen GPCs 350 empfangenen Pakete und bestimmt, an welchen GPC 350 ein von der ROP-Einheit 450 erzeugtes Ergebnis über die Xbar 370 weitergeleitet wird. Obwohl die ROP-Einheit 450 in 4B innerhalb der Speicherpartitionseinheit 380 vorhanden ist, kann sie sich bei anderen Ausführungen auch außerhalb der Speicherpartitionseinheit 380 befinden. Beispielsweise kann sich die ROP-Einheit 450 in dem GPC 350 oder einer anderen Einheit befinden.
  • 5A zeigt den Streaming-Multiprozessor 440 aus 4A gemäß einer Ausführungsform. Wie es in 5A gezeigt ist, weist der SM 440 einen Befehls-Cache 505, eine oder mehrere Scheduler-Einheiten 510, eine Registerdatei 520, einen oder mehrere Verarbeitungskerne 550, eine oder mehrere Spezialfunktionseinheiten (SFUs) 552, eine oder mehrere Lade-/Speichereinheiten (LSUs) 554, ein Verbindungsnetzwerk 580 und einen gemeinsamen Speicher/L1-Cache 570 auf.
  • Wie es vorab beschrieben ist, verteilt die Arbeitsverteilungseinheit 325 Tasks zur Ausführung auf den GPCs 350 der PPU 300. Die Tasks werden einem bestimmten DPC 420 innerhalb eines GPCs 350 zugewiesen, und wenn die Task mit einem Shader-Programm verbunden ist, kann die Task einem SM 440 zugewiesen werden. Die Scheduler-Einheit 510 empfängt die Tasks von der Arbeitsverteilungseinheit 325 und verwaltet die Befehlsplanung für einen oder mehrere Thread-Blöcke, die dem SM 440 zugewiesen sind. Die Scheduler-Einheit 510 plant Thread-Blöcke für die Ausführung als Warps von parallelen Threads ein, wobei jedem Thread-Block mindestens ein Warp zugewiesen ist. In einer Ausführungsform führt jeder Warp 32 Threads aus. Die Scheduler-Einheit 510 kann eine Vielzahl verschiedener Thread-Blöcke verwalten, indem sie die Warps den verschiedenen Thread-Blöcken zuweist und dann während jedes Taktzyklus Anweisungen aus der Vielzahl verschiedener kooperativer Gruppen an die verschiedenen Funktionseinheiten (z. B. Kerne 550, SFUs 552 und LSUs 554) verteilt.
  • Kooperative Gruppen ist ein Programmiermodell zum Organisieren von Gruppen kommunizierender Threads, das es Entwicklern ermöglicht, die Granularität auszudrücken, mit der Threads kommunizieren, und so den Ausdruck reichhaltigerer, effizienterer paralleler Dekompositionen ermöglicht. APIs für den kooperativen Start unterstützen die Synchronisierung zwischen Thread-Blöcken für die Ausführung paralleler Algorithmen. Konventionelle Programmiermodelle stellen ein einziges, einfaches Konstrukt für die Synchronisierung kooperierender Threads bereit: eine Sperre über alle Threads eines Thread-Blocks (z. B. die Funktion syncthreads( )). Programmierer möchten jedoch oft Gruppen von Threads mit einer kleineren Granularität als Thread-Blöcke definieren und innerhalb der definierten Gruppen synchronisieren, um eine höhere Leistung, Designflexibilität und Software-Wiederverwendung in Form von kollektiven gruppenweiten Funktionsschnittstellen zu ermöglichen.
  • Kooperative Gruppen ermöglichen es Programmierern, Gruppen von Threads explizit auf Sub-Block- (z. B. so klein wie ein einzelner Thread) und Multi-Block-Granularität zu definieren und kollektive Operationen wie eine Synchronisation auf den Threads in einer kooperativen Gruppe durchzuführen. Das Programmiermodell unterstützt eine saubere Komposition über Software-Grenzen hinweg, so dass Bibliotheken und Utility-Funktionen innerhalb ihres lokalen Kontexts sicher synchronisieren können, ohne Annahmen über eine Konvergenz treffen zu müssen. Die Primitive für kooperative Gruppen ermöglichen neue Muster kooperativer Parallelität, einschließlich Producer-Consumer-Parallelität, opportunistischer Parallelität und globaler Synchronisierung über ein gesamtes Gitter von Thread-Blöcken.
  • Eine Dispatch-Einheit 515 ist ausgestaltet, um Anweisungen an eine oder mehrere der Funktionseinheiten zu übertragen. In der Ausführungsform weist die Scheduler-Einheit 510 zwei Dispatch-Einheiten 515 auf, die es ermöglichen, dass zwei verschiedene Anweisungen aus demselben Warp während jedes Taktzyklus abgefertigt werden. In alternativen Ausführungsformen kann jede Scheduler-Einheit 510 eine einzelne Dispatch-Einheit 515 oder zusätzliche Dispatch-Einheiten 515 aufweisen.
  • Jeder SM 440 weist eine Registerdatei 520 auf, die einen Satz von Registern für die Funktionseinheiten des SM 440 bereitstellt. In einer Ausführungsform ist die Registerdatei 520 zwischen den einzelnen Funktionseinheiten aufgeteilt, so dass jeder Funktionseinheit ein eigener Abschnitt der Registerdatei 520 zugewiesen ist. In einer anderen Ausführungsform wird die Registerdatei 520 zwischen den verschiedenen Warps aufgeteilt, die von dem SM 440 ausgeführt werden. Die Registerdatei 520 stellt einen temporären Speicher für Operanden, die mit den Datenpfaden der Funktionseinheiten verbunden sind, bereit.
  • Jeder SM 440 umfasst L Verarbeitungskerne 550. In einer Ausführungsform weist der SM 440 eine große Anzahl (z. B. 128 usw.) von verschiedenen Verarbeitungskernen 550 auf. Jeder Kern 550 kann eine Verarbeitungseinheit mit einfacher Genauigkeit, doppelter Genauigkeit und/oder gemischter Genauigkeit aufweisen, die vollständig hintereinander arbeitet und eine arithmetische Gleitkomma-Logikeinheit und eine arithmetische Ganzzahl-Logikeinheit umfasst. In einer Ausführungsform implementieren die arithmetischen Fließkomma-Logikeinheiten den Standard IEEE 754-2008 für Fließkomma-Arithmetik. In einer Ausführungsform weisen die Kerne 550 64 Gleitkomma-Kerne mit einfacher Genauigkeit (32 Bit), 64 Ganzzahl-Kerne, 32 Gleitkomma-Kerne mit doppelter Genauigkeit (64 Bit) und 8 Tensor-Kerne auf.
  • Tensorkerne sind zur Durchführung von Matrixoperationen ausgestaltet, und in einer Ausführungsform sind ein oder mehrere Tensorkerne in den Kernen 550 vorhanden. Insbesondere sind die Tensorkerne ausgestaltet, um eine Deep-Learning-Matrixarithmetik durchzuführen, wie z. B. Faltungsoperationen für das Training und Inferencing von neuronalen Netzen. In einer Ausführungsform arbeitet jeder Tensorkern mit einer 4x4-Matrix und führt eine Matrixmultiplikations- und Akkumulationsoperation D=AB+C durch, wobei A, B, C und D 4x4-Matrizen sind.
  • In einer Ausführungsform sind die Matrixmultiplikationseingaben A und B 16-Bit-Gleitkommamatrizen, während die Akkumulationsmatrizen C und D 16-Bit-Gleitkomma- oder 32-Bit-Gleitkommamatrizen sein können. Tensorkerne arbeiten mit 16-Bit-Gleitkomma-Eingangsdaten mit 32-Bit-Gleitkomma-Summation. Die 16-Bit-Gleitkommamultiplikation erfordert 64 Operationen und ergibt ein Produkt mit voller Genauigkeit, das dann mit 32-Bit-Gleitkommaaddition mit den anderen Zwischenprodukten für eine 4x4x4-Matrixmultiplikation summiert wird. In der Praxis werden Tensorkerne verwendet, um viel größere zweidimensionale oder höherdimensionale Matrixoperationen durchzuführen, die aus diesen kleineren Elementen aufgebaut sind. Eine API, wie z.B. die CUDA 9 C++ API, stellt spezialisierte Matrix-Lade-, Matrix-Multiplikations- und Summations- und Matrix-Speicher-Operationen zur Verfügung, um Tensorkerne von einem CUDA-C++ Programm aus effizient zu nutzen. Auf CUDA-Ebene geht die Schnittstelle auf Warp-Ebene von Matrizen der Größe 16x16 aus, die sich über alle 32 Threads des Warps erstrecken.
  • Jeder SM 440 umfasst auch M SFUs 552, die spezielle Funktionen ausführen (z. B. Attributauswertung, reziproke Quadratwurzel und dergleichen). In einer Ausführungsform können die SFUs 552 eine Baumdurchquerungseinheit bzw. Tree Traversal Unit aufweisen, die so ausgestaltet ist, dass sie eine hierarchische Baumdatenstruktur durchläuft. In einer Ausführungsform können die SFUs 552 eine Textureinheit aufweisen, die so ausgestaltet ist, dass sie Filteroperationen für die Texturabbildung durchführt. In einer Ausführungsform sind die Textureinheiten so ausgestaltet, dass sie Texturkarten (z. B. ein 2D-Array von Texeln) aus dem Speicher 304 laden und die Texturkarten abtasten, um abgetastete Texturwerte zur Verwendung in von der SM 440 ausgeführten Shader-Programmen zu erzeugen. In einer Ausführungsform werden die Texturkarten in dem gemeinsamen Speicher/L1-Cache 470 gespeichert. Die Textureinheiten implementieren Texturoperationen, wie z. B. Filteroperationen unter Verwendung von Mip-Maps (z. B. Texturkarten mit unterschiedlichen Detailstufen). In einer Ausführungsform weist jeder SM 340 zwei Textureinheiten auf.
  • Jeder SM 440 umfasst auch N LSUs 554, die Lade- und Speicheroperationen zwischen dem gemeinsamen Speicher/L1-Cache 570 und der Registerdatei 520 implementieren. Jeder SM 440 weist ein Verbindungsnetzwerk 580 auf, das jede der Funktionseinheiten mit der Registerdatei 520 und die LSU 554 mit der Registerdatei 520 und dem gemeinsam genutzten Speicher/L1-Cache 570 verbindet. In einer Ausführungsform ist das Verbindungsnetzwerk 580 ein Koppelfeld, das so ausgestaltet sein kann, dass es jede der Funktionseinheiten mit jedem der Register in der Registerdatei 520 verbindet und die LSUs 554 mit der Registerdatei und Speicherplätzen in dem gemeinsam genutzten Speicher/L1 -Cache 570 verbindet.
  • Der gemeinsam genutzte Speicher/L1 -Cache 570 ist ein Array von On-Chip-Speicher, der die Datenspeicherung und Kommunikation zwischen dem SM 440 und der Primitiv-Engine 435 sowie zwischen Threads in dem SM 440 ermöglicht. In einer Ausführungsform umfasst der gemeinsame Speicher/L1 -Cache 570 128 KB Speicherkapazität und befindet sich im Pfad von dem SM 440 zu der Speicherpartitionseinheit 380. Der gemeinsame Speicher/L1-Cache 570 kann zum Cachen von Lese- und Schreibvorgängen verwendet werden. Einer oder mehrere des gemeinsamen Speichers/L1-Cache 570, des L2-Cache 460 und des Speichers 304 sind Backing-Stores.
  • Die Kombination von Daten-Cache und Funktionalität eines gemeinsamen Speichers in einem einzigen Speicherblock bietet die beste Gesamtleistung für beide Arten von Speicherzugriffen. Die Kapazität ist als Cache für Programme nutzbar, die keinen gemeinsamen Speicher verwenden. Wenn z. B. der gemeinsame Speicher so ausgestaltet ist, dass die Hälfte der Kapazität genutzt wird, können Textur- und Lade-/Speicheroperationen die verbleibende Kapazität nutzen. Durch die Integration in den gemeinsam genutzten Speicher/L1-Cache 570 kann der gemeinsam genutzte Speicher/L1-Cache 570 als durchsatzstarke Leitung für Streaming-Daten fungieren und gleichzeitig Zugriff mit hoher Bandbreite und niedriger Latenz auf häufig wiederverwendete Daten bereitstellen.
  • Wenn sie für allgemeine parallele Berechnungen ausgestaltet sind, kann eine einfachere Konfiguration im Vergleich zur Grafikverarbeitung verwendet werden. Insbesondere werden die in 3 gezeigten Grafikverarbeitungseinheiten mit festen Funktionen umgangen, wodurch ein viel einfacheres Programmiermodell entsteht. In der Konfiguration für allgemeine parallele Berechnungen weist die Arbeitsverteilungseinheit 325 Blöcke von Threads zu und verteilt sie direkt an die DPCs 420. Die Threads in einem Block führen dasselbe Programm aus, wobei eine eindeutige Thread-ID in der Berechnung verwendet wird, um sicherzustellen, dass jeder Thread eindeutige Ergebnisse erzeugt, wobei der SM 440 zur Ausführung des Programms und zur Durchführung von Berechnungen, der gemeinsame Speicher/L1-Cache 570 zur Kommunikation zwischen den Threads und die LSU 554 zum Lesen und Schreiben des globalen Speichers über den gemeinsamen Speicher/L1-Cache 570 und die Speicherpartitionseinheit 380 verwendet werden. Wenn er für allgemeine parallele Berechnungen ausgestaltet ist, kann der SM 440 auch Befehle schreiben, die die Scheduler-Einheit 320 verwenden kann, um eine neue Arbeit auf den DPCs 420 zu starten.
  • Die PPU 300 kann in einem Desktop-Computer, einem Laptop-Computer, einem Tablet-Computer, Servern, Supercomputern, einem Smartphone (z. B. einer drahtlosen, handgehaltenen Einrichtung), einem persönlichen digitalen Assistenten (PDA), einer Digitalkamera, einem Fahrzeug, einem Head Mounted Display, einer in der Hand gehaltenen elektronischen Einrichtung und dergleichen vorhanden sein. In einer Ausführungsform ist die PPU 300 auf einem einzigen Halbleitersubstrat ausgeführt. Bei einer anderen Ausführungsform ist die PPU 300 in einem System-on-a-Chip (SoC) zusammen mit einer oder mehreren anderen Einrichtungen wie zusätzlichen PPUs 300, dem Speicher 304, einer RISC-CPU (Reduced Instruction Set Computer), einer MMU (Memory Management Unit), einem DAC (Digital-Analog-Wandler) und dergleichen vorhanden.
  • In einer Ausführungsform kann die PPU 300 auf einer Grafikkarte vorhanden sein, die eine oder mehrere Speichereinrichtungen enthält. Die Grafikkarte kann so ausgestaltet sein, dass sie mit einem PCIe-Steckplatz auf einem Motherboard eines Desktop-Computers verbunden sein kann. In einer anderen Ausführungsform kann die PPU 300 eine integrierte Grafikverarbeitungseinheit (iGPU) oder ein Parallelprozessor sein, der im Chipsatz der Hauptplatine vorhanden ist.
  • Beispielhaftes Rechensystem
  • Systeme mit mehreren GPUs und CPUs werden in einer Vielzahl von Branchen verwendet, da Entwickler mehr Parallelität in Anwendungen wie künstlicher Intelligenz aufdecken und ausnutzen. Leistungsstarke GPU-beschleunigte Systeme mit zehn bis vielen tausend Rechenknoten werden in Rechenzentren, Forschungseinrichtungen und Supercomputern eingesetzt, um immer größere Probleme zu lösen. Da die Anzahl der verarbeitenden Einrichtungen innerhalb der Hochleistungssysteme steigt, müssen die Kommunikations- und Datenübertragungsmechanismen skaliert werden, um die erhöhte Bandbreite zu unterstützen.
  • 5B ist ein konzeptionelles Diagramm eines Verarbeitungssystems 500, das unter Verwendung der PPU 300 aus 3 gemäß einer Ausführungsform implementiert ist. Das beispielhafte System 565 kann ausgestaltet sein, um das in 1C gezeigte Verfahren 115 und/oder das in 2D gezeigte Verfahren 225 zu implementieren. Das Verarbeitungssystem 500 weist eine CPU 530, einen Switch 510 und mehrere PPUs 300 sowie entsprechende Speicher 304 auf.
  • Der NVLink 310 stellt Hochgeschwindigkeitskommunikationsverbindungen zwischen jeder der PPUs 300 bereit. Obwohl in 5B eine bestimmte Anzahl von NVLink 310- und Interconnect 302-Verbindungen dargestellt ist, kann die Anzahl der Verbindungen zu jeder PPU 300 und der CPU 530 variieren. Der Switch 510 bildet die Schnittstelle zwischen der Verbindung 302 und der CPU 530. Die PPUs 300, die Speicher 304 und die NVLinks 310 können auf einer einzigen Halbleiterplattform angeordnet sein, um ein Parallelverarbeitungsmodul 525 zu bilden. In einer Ausführungsform unterstützt der Switch 510 zwei oder mehr Protokolle, um zwischen verschiedenen Verbindungen und/oder Links zu vermitteln.
  • In einer anderen Ausführungsform (nicht dargestellt) stellt der NVLink 310 eine oder mehrere Hochgeschwindigkeits-Kommunikationsverbindungen zwischen jeder der PPUs 300 und der CPU 530 bereit, und der Switch 510 bildet eine Schnittstelle zwischen der Verbindung 302 und jeder der PPUs 300. Die PPUs 300, die Speicher 304 und die Verbindung 302 können auf einer einzigen Halbleiterplattform angeordnet sein, um ein Parallelverarbeitungsmodul 525 zu bilden. In einer weiteren Ausführungsform (nicht dargestellt) stellt die Verbindung 302 eine oder mehrere Kommunikationsverbindungen zwischen jeder der PPUs 300 und der CPU 530 bereit, und der Switch 510 bildet eine Schnittstelle zwischen jeder der PPUs 300 unter Verwendung des NVLink 310, um eine oder mehrere Hochgeschwindigkeits-Kommunikationsverbindungen zwischen den PPUs 300 bereitzustellen. In einer anderen Ausführungsform (nicht dargestellt) stellt der NVLink 310 eine oder mehrere Hochgeschwindigkeits-Kommunikationsverbindungen zwischen den PPUs 300 und der CPU 530 über den Switch 510 bereit. In einer weiteren Ausführungsform (nicht dargestellt) stellt die Verbindung 302 eine oder mehrere Kommunikationsverbindungen zwischen den einzelnen PPUs 300 direkt bereit. Eine oder mehrere der NVLink 310-Hochgeschwindigkeits-Kommunikationsverbindungen können als physische NVLink-Verbindung oder entweder als On-Chip- oder On-Die-Verbindung implementiert sein, die das gleiche Protokoll wie der NVLink 310 verwendet.
  • Im Zusammenhang mit der vorliegenden Beschreibung kann sich eine Einzel-Halbleiterplattform auf eine einzige einheitliche halbleiterbasierte integrierte Schaltung beziehen, die auf einem Die oder Chip hergestellt ist. Es ist klar, dass sich der Begriff Einzel-Halbleiterplattform auch auf Multi-Chip-Module mit erhöhter Konnektivität beziehen kann, die den On-Chip-Betrieb simulieren und wesentliche Verbesserungen gegenüber der Verwendung einer herkömmlichen Bus-Implementierung aufweisen. Natürlich können die verschiedenen Schaltungen oder Einrichtungen auch separat oder in verschiedenen Kombinationen von Halbleiterplattformen nach den Wünschen des Anwenders angeordnet sein. Alternativ kann das Parallelverarbeitungsmodul 525 als Leiterplattensubstrat implementiert sein und jede der PPUs 300 und/oder Speicher 304 können Einrichtungen mit Gehäuse sein. In einer Ausführungsform befinden sich die CPU 530, der Switch 510 und das Parallelverarbeitungsmodul 525 auf einer einzigen Halbleiterplattform.
  • In einer Ausführungsform beträgt die Signalisierungsrate jedes NVLink 310 20 bis 25 Gigabit/Sekunde und jede PPU 300 weist sechs NVLink 310-Schnittstellen auf (wie es in 5B gezeigt ist, sind fünf NVLink 310-Schnittstellen für jede PPU 300 vorhanden). Jeder NVLink 310 stellt eine Datenübertragungsrate von 25 Gigabyte/Sekunde in jeder Richtung bereit, wobei sechs Links 300 Gigabyte/Sekunde bereitstellen. Die NVLinks 310 können ausschließlich für die PPU-zu-PPU-Kommunikation verwendet werden, wie es in 5B gezeigt ist, oder für eine Kombination aus PPU-zu-PPU und PPU-zu-CPU, wenn die CPU 530 auch eine oder mehrere NVLink 310-Schnittstellen aufweist.
  • In einer Ausführungsform ermöglicht der NVLink 310 das direkte Laden bzw. Speichern bzw. den direkten atomaren Zugriff von der CPU 530 auf den Speicher 304 jeder PPU 300. In einer Ausführungsform unterstützt der NVLink 310 Kohärenzoperationen, wodurch aus den Speichern 304 gelesene Daten in der Cache-Hierarchie der CPU 530 gespeichert werden können, wodurch die Cache-Zugriffslatenz für die CPU 530 reduziert wird. In einer Ausführungsform weist der NVLink 310 Unterstützung für Adressübersetzungsdienste (ATS) auf, wodurch die PPU 300 direkt auf Seitentabellen innerhalb der CPU 530 zugreifen kann. Einer oder mehrere der NVLinks 310 können auch so ausgestaltet sein, dass sie in einem stromsparenden Modus arbeiten.
  • 5C zeigt ein beispielhaftes System 565, in dem die verschiedenen Architekturen und/oder Funktionen der verschiedenen vorherigen Ausführungsformen implementiert sein können. Das beispielhafte System 565 kann ausgestaltet sein, um das in 1C gezeigte Verfahren 115 und/oder das in 2D gezeigte Verfahren 225 zu implementieren.
  • Wie dargestellt ist, ist ein System 565 vorgesehen, das mindestens eine zentrale Verarbeitungseinheit 530 aufweist, die mit einem Kommunikationsbus 575 verbunden ist. Der Kommunikationsbus 575 kann unter Verwendung jedes geeigneten Protokolls implementiert sein, wie z. B. PCI (Peripheral Component Interconnect), PCI-Express, AGP (Accelerated Graphics Port), HyperTransport oder jedem anderen Bus- oder Punkt-zu-Punkt-Kommunikationsprotokoll. Das System 565 weist auch einen Hauptspeicher 540 auf. Steuerlogik (Software) und Daten sind im Hauptspeicher 540 gespeichert, der die Form eines Direktzugriffsspeichers (RAM) aufweisen kann.
  • Das System 565 weist auch Eingabeeinrichtungen 560, das Parallelverarbeitungssystem 525 und Anzeigeeinrichtungen 545 auf, z. B. eine herkömmliche CRT (Kathodenstrahlröhre), LCD (Flüssigkristallanzeige), LED (lichtemittierende Diode), Plasmadisplay oder ähnliches. Benutzereingaben können von den Eingabeeinrichtungen 560 empfangen werden, z. B. Tastatur, Maus, Touchpad, Mikrofon und dergleichen. Jedes der vorgenannten Module und/oder Einrichtungen kann sogar auf einer einzigen Halbleiterplattform angeordnet sein, um das System 565 auszubilden. Alternativ können die verschiedenen Module auch separat oder in verschiedenen Kombinationen von Halbleiterplattformen angeordnet sein, je nach den Wünschen des Benutzers.
  • Darüber hinaus kann das System 565 über eine Netzwerkschnittstelle 535 zu Kommunikationszwecken mit einem Netzwerk (z. B. einem Telekommunikationsnetzwerk, einem lokalen Netzwerk (LAN), einem drahtlosen Netzwerk, einem Weitverkehrsnetzwerk (WAN) wie dem Internet, einem Peer-to-Peer-Netzwerk, einem Kabelnetzwerk oder Ähnlichem) verbunden sein.
  • Das System 565 kann auch einen Sekundärspeicher (nicht dargestellt) aufweisen. Der Sekundärspeicher 610 weist beispielsweise ein Festplattenlaufwerk und/oder ein Wechselspeicherlaufwerk auf, das ein Diskettenlaufwerk, ein Magnetbandlaufwerk, ein Compact-Disk-Laufwerk, ein DVD-Laufwerk (Digital Versatile Disk), eine Aufnahmeeinrichtung oder einen USB-Flash-Speicher (Universal Serial Bus) darstellt. Das Wechselspeicherlaufwerk liest in bekannter Weise von und/oder schreibt auf einen Wechselspeicher.
  • Computerprogramme oder Computersteuerungslogik-Algorithmen können im Hauptspeicher 540 und/oder im Sekundärspeicher gespeichert sein. Solche Computerprogramme ermöglichen dem System 565, wenn sie ausgeführt werden, verschiedene Funktionen auszuführen. Der Speicher 540, der Sekundärspeicher und/oder jeder andere Speicher sind mögliche Beispiele für von einem Computer lesbaren Medien.
  • Die Architektur und/oder Funktionalität der verschiedenen vorhergehenden Figuren kann im Rahmen eines allgemeinen Computersystems, eines Leiterplattensystems, eines für Unterhaltungszwecke bestimmten Spielkonsolensystems, eines anwendungsspezifischen Systems und/oder eines beliebigen anderen gewünschten Systems implementiert sein. Beispielsweise kann das System 565 in Form eines Desktop-Computers, eines Laptop-Computers, eines Tablet-Computers, von Servern, Supercomputern, eines Smartphones (z. B. einer drahtlosen, handgehaltenen Einrichtung), eines persönlichen digitalen Assistenten (PDA), einer Digitalkamera, eines Fahrzeugs, eines Head-Mounted-Displays, einer handgehaltenen elektronischen Einrichtung, einer Mobiltelefoneinrichtung, eines Fernsehers, einer Workstation, von Spielkonsolen, eines eingebetteten Systems und/oder jeder anderen Art von Logik vorhanden sein.
  • Während verschiedene Ausführungsformen oben beschrieben wurden, ist klar, dass sie nur als Beispiel und nicht als Einschränkung dargestellt werden. Daher wird die Breite und der Umfang einer bevorzugten Ausführungsform nicht durch eine der oben beschriebenen beispielhaften Ausführungsformen begrenzt, sondern sind nur in Übereinstimmung mit den folgenden Ansprüchen und deren Äquivalenten definiert.
  • Grafikverarbeitungs-Pipeline
  • In einer Ausführungsform umfasst die PPU 300 eine Grafikverarbeitungseinheit (GPU). Die PPU 300 ist so ausgestaltet, dass sie Befehle empfängt, die Shader-Programme zur Verarbeitung von Grafikdaten spezifizieren. Grafikdaten können als ein Satz von Primitive wie Punkte, Linien, Dreiecke, Quads, Dreieckstreifen und dergleichen definiert sein. Typischerweise weist ein Primitiv Daten auf, die eine Anzahl von Vertices für das Primitiv (z. B. in einem Modellraum-Koordinatensystem) sowie Attribute, die jedem Vertex des Primitivs zugeordnet sind, spezifizieren. Die PPU 300 kann so ausgestaltet sein, dass sie die Grafikprimitive verarbeitet, um einen Bildpuffer zu erzeugen (z. B. Pixeldaten für jedes der Pixel der Anzeige).
  • Eine Anwendung schreibt Modelldaten für eine Szene (z. B. eine Sammlung von Vertices und Attributen) in einen Speicher, wie z. B. einen Systemspeicher oder Speicher 304. Die Modelldaten definieren jedes der Objekte, die auf einer Anzeige sichtbar sein können. Die Anwendung tätigt dann einen API-Aufruf an den Treiberkern, der die Modelldaten zum Rendern und Anzeigen anfordert. Der Treiberkern liest die Modelldaten und schreibt Befehle in den einen oder mehrere Streams, um Operationen zur Verarbeitung der Modelldaten durchzuführen. Die Befehle können auf verschiedene Shader-Programme verweisen, die auf den SMs 440 der PPU 300 implementiert sind, die einen oder mehrere Vertex-Shader, Hull-Shader, Domain-Shader, Geometrie-Shader und einen Pixel-Shader aufweisen. Beispielsweise kann einer oder können mehrere der SMs 440 so ausgestaltet sein, dass sie ein Vertex-Shader-Programm ausführen, das eine durch die Modelldaten definierte Anzahl von Vertices verarbeitet. In einer Ausführungsform können die verschiedenen SMs 440 so ausgestaltet sein, dass sie verschiedene Shader-Programme gleichzeitig ausführen. Beispielsweise kann eine erste Teilmenge von SMs 440 so ausgestaltet sein, dass sie ein Vertex-Shader-Programm ausführt, während eine zweite Teilmenge von SMs 440 so ausgestaltet sein kann, dass sie ein Pixel-Shader-Programm ausführt. Die erste Untergruppe von SMs 440 verarbeitet Vertexdaten, um verarbeitete Vertexdaten zu erzeugen, und schreibt die verarbeiteten Vertexdaten in den L2-Cache 460 und/oder den Speicher 304. Nachdem die verarbeiteten Vertexdaten gerastert (z. B. von dreidimensionalen Daten in zweidimensionale Daten im Screenspace transformiert) wurden, um Fragmentdaten zu erzeugen, führt die zweite Teilmenge von SMs 440 einen Pixel-Shader aus, um verarbeitete Fragmentdaten zu erzeugen, die dann mit anderen verarbeiteten Fragmentdaten gemischt und in den Frame-Puffer im Speicher 304 geschrieben werden. Das Vertex-Shader-Programm und das Pixel-Shader-Programm können gleichzeitig ausgeführt werden und verschiedene Daten aus derselben Szene in einer Pipeline verarbeiten, bis alle Modelldaten für die Szene in den Bildpuffer gerendert wurden. Dann wird der Inhalt des Bildpuffers an eine Steuerung zur Anzeige auf einer Einrichtung übertragen.
  • Bilder, die unter Anwendung einer oder mehrerer der hier offengelegten Vorgehen erzeugt wurden, können auf einem Monitor oder einer anderen Anzeigeeinrichtung angezeigt werden. Bei einigen Ausführungsformen kann die Anzeigeeinrichtung direkt mit dem System oder Prozessor gekoppelt sein, das bzw. der die Bilder erzeugt oder rendert. Bei anderen Ausführungsformen kann die Anzeigeeinrichtung indirekt mit dem System oder Prozessor gekoppelt sein, z. B. über ein Netzwerk. Beispiele für solche Netzwerke umfassen das Internet, mobile Telekommunikationsnetzwerke, ein WIFI-Netzwerk sowie jedes andere drahtgebundene und/oder drahtlose Netzwerksystem. Wenn die Anzeigeeinrichtung indirekt gekoppelt ist, können die von dem System oder Prozessor erzeugten Bilder über das Netzwerk an die Anzeigeeinrichtung gestreamt werden. Durch ein solches Streaming können z. B. Videospiele oder andere Anwendungen, die Bilder rendern, auf einem Server oder in einem Rechenzentrum ausgeführt und die gerenderten Bilder auf eine oder mehrere Benutzereinrichtungen (wie z. B. einen Computer, eine Videospielkonsole, ein Smartphone, ein anderes mobiles Gerät usw.) übertragen und angezeigt werden, die physisch vom Server oder Rechenzentrum getrennt sind. Daher können die hier offengelegten Vorgehen angewendet werden, um die gestreamten Bilder zu verbessern und um Dienste zu verbessern, die Bilder streamen, wie NVIDIA GeForce Now (GFN), Google Stadia und dergleichen.
  • Maschinelles Lernen
  • Tiefe neuronale Netzwerke (DNNs), die auf Prozessoren wie der PPU 300 entwickelt wurden, werden für verschiedene Anwendungsfälle eingesetzt, von selbstfahrenden Autos bis zur schnelleren Medikamentenentwicklung, von der automatischen Bildunterschrift in Online-Bilddatenbanken bis zur intelligenten Echtzeit-Sprachübersetzung in Video-Chat-Anwendungen. Tiefes Lernen bzw. Deep Learning ist eine Technik, die den neuronalen Lernprozess des menschlichen Gehirns modelliert und dabei kontinuierlich lernt, immer intelligenter wird und mit der Zeit immer genauere Ergebnisse liefert. Ein Kind lernt anfangs von einem Erwachsenen, verschiedene Formen richtig zu identifizieren und zu klassifizieren, und ist schließlich in der Lage, Formen ohne Nachhilfe zu erkennen. In ähnlicher Weise muss ein Deep-Learning- oder neuronales Lernsystem in der Objekterkennung und -klassifizierung trainiert werden, damit es intelligenter und effizienter bei der Identifizierung von Basisobjekten, verdeckten Objekten usw. wird, während es gleichzeitig Objekten einen Kontext zuordnet.
  • Auf der einfachsten Ebene betrachten Neuronen im menschlichen Gehirn verschiedene Eingaben, die empfangen werden, wobei jedem dieser Eingaben Wichtigkeitsstufen zugewiesen werden, und wobei die Ausgabe an andere Neuronen weitergeleitet wird, um darauf zu reagieren. Ein künstliches Neuron ist das einfachste Modell eines neuronalen Netzes. In einem Beispiel kann ein Neuron eine oder mehrere Eingaben erhalten, die verschiedene Merkmale eines Objekts darstellen, für dessen Erkennung und Klassifizierung das Neuron trainiert wird, und jedem dieser Merkmale wird eine bestimmte Gewichtung zugewiesen, die auf der Wichtigkeit dieses Merkmals bei der Definition der Form eines Objekts basiert.
  • Ein Modell eines tiefen neuronalen Netzes (DNN) weist mehrere Schichten mit vielen verbundenen Knoten auf (z. B. Neuronen, Boltzmann-Maschinen, Radialbasisfunktionen, Faltungsschichten usw.), die mit enormen Mengen von Eingabedaten trainiert werden können, um komplexe Probleme schnell und mit hoher Genauigkeit zu lösen. In einem Beispiel zerlegt eine erste Schicht des DNN-Modells ein Eingabebild eines Autos in verschiedene Abschnitte und sucht nach grundlegenden Mustern wie Linien und Winkeln. Die zweite Schicht setzt die Linien zusammen, um nach Mustern auf höherer Ebene wie Rädern, Windschutzscheiben und Spiegeln zu suchen. Die nächste Schicht identifiziert den Fahrzeugtyp, und die letzten paar Schichten erzeugen ein Kennzeichen für das Eingabebild, das das Modell einer bestimmten Automarke identifiziert.
  • Sobald das DNN trainiert ist, kann das DNN eingesetzt und verwendet werden, um Objekte oder Muster in einem Prozess zu identifizieren und zu klassifizieren, der als Inferenz bezeichnet wird. Beispiele für Inferenz (der Prozess, durch den ein DNN nützliche Informationen aus einer gegebenen Eingabe extrahiert) weisen die Identifizierung handgeschriebener Zahlen auf Schecks auf, die in Geldautomaten eingezahlt wurden, die Identifizierung von Bildern von Freunden in Fotos, die Bereitstellung von Filmempfehlungen für über fünfzig Millionen Benutzer, die Identifizierung und Klassifizierung verschiedener Arten von Autos, Fußgängern und Straßengefahren in fahrerlosen Autos oder die Übersetzung menschlicher Sprache in Echtzeit.
  • Während des Trainings fließen die Daten in einer Vorwärtspropagationsphase durch das DNN, bis eine Vorhersage erzeugt wird, die ein der Eingabe entsprechendes Kennzeichen anzeigt. Wenn das neuronale Netz die Eingabe nicht korrekt kennzeichnet, werden Fehler zwischen dem korrekten Kennzeichen und dem vorhergesagten Kennzeichen analysiert, und die Gewichte werden für jedes Merkmal während einer Rückwärtspropagierungsphase angepasst, bis das DNN die Eingabe und andere Eingaben in einem Trainingsdatensatz korrekt kennzeichnet. Das Training komplexer neuronaler Netze erfordert enorme Mengen an paralleler Rechenleistung, die Fließkommamultiplikationen und -additionen aufweisen, die von der PPU 300 unterstützt werden. Inferencing ist weniger rechenintensiv als das Training, da es sich um einen latenzabhängigen Prozess handelt, bei dem ein trainiertes neuronales Netz auf neue Eingaben angewendet wird, die es zuvor nicht gesehen hat, um Bilder zu klassifizieren, Sprache zu übersetzen und allgemein neue Informationen abzuleiten.
  • Neuronale Netze sind in hohem Maße auf mathematische Matrixoperationen angewiesen, und komplexe mehrschichtige Netze erfordern enorme Mengen an Fließkomma-Leistung und Bandbreite, um sowohl effizient als auch schnell zu sein. Mit Tausenden von Rechenkernen, die für Matrix-Mathematik-Operationen optimiert sind und Dutzende bis Hunderte von TFLOPS an Leistung liefern, ist die PPU 300 eine Rechenplattform, die die für tiefe, auf neuronalen Netzen basierende Anwendungen der künstlichen Intelligenz und des maschinellen Lernens erforderliche Leistung bereitstellen kann.
  • Darüber hinaus können Bilder, die unter Anwendung einer oder mehrerer der hier offenbarten Vorgehen erzeugt wurden, zum Trainieren, Testen oder Zertifizieren von DNNs verwendet werden, die zur Erkennung von Objekten und Umgebungen in der realen Welt eingesetzt werden. Solche Bilder können Szenen von Straßen, Fabriken, Gebäuden, städtischen Umgebungen, ländlichen Umgebungen, Menschen, Tieren und anderen physischen Objekten oder Umgebungen der realen Welt aufweisen. Solche Bilder können verwendet werden, um DNNs zu trainieren, zu testen oder zu zertifizieren, die in Maschinen oder Robotern eingesetzt werden, um physische Objekte in der realen Welt zu manipulieren, zu handhaben oder zu verändern. Außerdem können solche Bilder verwendet werden, um DNNs zu trainieren, zu testen oder zu zertifizieren, die in autonomen Fahrzeugen eingesetzt werden, um die Fahrzeuge durch die reale Welt zu navigieren und zu bewegen. Darüber hinaus können Bilder, die unter Anwendung einer oder mehrerer der hierin offenbarten Techniken erzeugt wurden, verwendet werden, um den Benutzern solcher Maschinen, Roboter und Fahrzeuge Informationen zu vermitteln.
  • Es wird darauf hingewiesen, dass die hier beschriebenen Vorgehen in ausführbaren Anweisungen ausgestaltet sein können, die in einem von einem Computer lesbaren Medium zur Verwendung durch oder in Verbindung mit einer prozessorbasierten Befehlsausführungsmaschine, einem System, einem Apparat oder einer Einrichtung gespeichert sind. Fachleute wissen, dass bei einigen Ausführungsformen verschiedene Arten von von einem Computer lesbaren Medien zum Speichern von Daten vorhanden sein können. Wie es hier beschrieben ist, weist ein „computerlesbares Medium“ ein oder mehrere geeignete Medien zum Speichern der ausführbaren Befehle eines Computerprogramms auf, so dass die Befehlsausführungsmaschine, das System, der Apparat oder die Einrichtung die Befehle von dem von einem Computer lesbaren Medium lesen (oder abrufen) und die Befehle zur Ausführung der beschriebenen Ausführungsformen ausführen kann. Geeignete Speicherformate weisen eines oder mehrere der folgenden Formate auf: elektronisch, magnetisch, optisch und elektromagnetisch. Eine nicht abschließende Liste konventioneller, beispielhafter von einem Computer lesbarer Medien weist auf: eine tragbare Computerdiskette; einen Direktzugriffsspeicher (RAM); einen Festwertspeicher (ROM); einen löschbaren programmierbaren Festwertspeicher (EPROM); eine Flash-Speichereinrichtung; und optische Speichereinrichtungen, einschließlich einer tragbaren Compact Disc (CD), einer tragbaren digitalen Videodisk (DVD) und dergleichen.
  • Es ist klar, dass die in den beigefügten Figuren dargestellte Anordnung der Komponenten nur der Veranschaulichung dient und dass andere Anordnungen möglich sind. Zum Beispiel kann eines oder können mehrere der hier beschriebenen Elemente ganz oder teilweise als elektronische Hardwarekomponente realisiert sein. Andere Elemente können in Software, Hardware oder einer Kombination aus Software und Hardware realisiert sein. Darüber hinaus können einige oder alle dieser anderen Elemente kombiniert werden, einige können ganz weggelassen werden, und zusätzliche Komponenten können hinzugefügt werden, während immer noch die hier beschriebene Funktionalität erreicht wird. Somit kann der hier beschriebene Gegenstand in vielen verschiedenen Ausführungsformen ausgestaltet sein, und alle derartigen Variationen werden als innerhalb des Umfangs der Ansprüche liegend betrachtet.
  • Um das Verständnis des hier beschriebenen Gegenstands zu erleichtern, werden viele Aspekte in Form von Handlungsabläufen beschrieben. Der Fachmann wird erkennen, dass die verschiedenen Aktionen durch spezialisierte Schaltungen oder Schaltkreise, durch Programmbefehle, die von einem oder mehreren Prozessoren ausgeführt werden, oder durch eine Kombination aus beidem ausgeführt werden können. Die hier beschriebene Abfolge von Aktionen soll nicht bedeuten, dass die spezifische Reihenfolge, die für die Ausführung dieser Abfolge beschrieben wird, eingehalten werden muss. Alle Verfahren, die hier beschrieben sind, können in jeder geeigneten Reihenfolge ausgeführt werden, sofern hier nichts anderes angegeben ist oder der Kontext dem nicht eindeutig widerspricht.
  • Die Verwendung der Begriffe „ein“, „eine“ und „eines“ sowie „der“, „die“ und „das“ und ähnlicher Verweise im Zusammenhang mit der Beschreibung des Gegenstands (insbesondere im Zusammenhang mit den folgenden Ansprüchen) ist so auszulegen, dass sie sowohl den Singular als auch den Plural umfasst, sofern es hier nicht anders angegeben oder durch den Kontext eindeutig widerlegt wird. Die Verwendung des Begriffs „mindestens eines“, gefolgt von einer Aufzählung von einem oder mehreren Gegenständen (z. B. „mindestens eines von A und B“) ist so auszulegen, dass damit ein aus den aufgelisteten Gegenständen (A oder B) ausgewählter Gegenstand oder eine beliebige Kombination von zwei oder mehreren der aufgelisteten Gegenstände (A und B) gemeint ist, sofern es hier nicht anders angegeben oder durch den Kontext eindeutig widerlegt ist. Darüber hinaus dient die vorstehende Beschreibung nur der Veranschaulichung und nicht der Einschränkung, da der angestrebte Schutzumfang durch die nachstehend aufgeführten Ansprüche sowie deren Äquivalente definiert ist. Die Verwendung von Beispielen oder beispielhaften Formulierungen (z. B. „wie“) dient lediglich der besseren Veranschaulichung des Gegenstands und stellt keine Einschränkung des Umfangs des Gegenstands dar, sofern kein anderer Anspruch geltend gemacht wird. Die Verwendung des Begriffs „basierend auf“ und anderer ähnlicher Ausdrücke, die eine Bedingung für das Herbeiführen eines Ergebnisses angeben, sowohl in den Ansprüchen als auch in der schriftlichen Beschreibung, soll keine anderen Bedingungen ausschließen, die dieses Ergebnis herbeiführen. Keine Formulierung in der Beschreibung sollte so ausgelegt werden, dass ein nicht beanspruchtes Element als wesentlich für die Ausführung der beanspruchten Erfindung angesehen wird.

Claims (20)

  1. Schaltung umfassend: eine Decoderschaltung, die ausgestaltet ist, um: ein Auswahl-Bereitschaftssignal zu empfangen, das negiert ist, bis sich ein von einer kombinatorischen Logik erzeugtes Auswahlsignal nicht mehr ändert, und das aktiviert wird, nachdem sich das Auswahlsignal nicht mehr ändert; entsprechend dem Auswahlsignal mindestens ein Abtast-Freigabesignal zu erzeugen, das mit einem Satz von Dateneingangssignalen korrespondiert, wobei das mindestens eine Abtast-Freigabesignal negiert ist, während das Auswahl-Bereitschaftssignal negiert ist, und als Reaktion auf die Aktivierung des Auswahl-Bereitschaftssignals aktiviert wird; und ein Haltesignal zu erzeugen, das aktiviert ist, während das mindestens eine Abtast-Freigabesignal negiert ist, und das als Reaktion auf die Aktivierung des mindestens einen Abtast-Freigabesignals negiert wird; und eine Abtastschaltung, die ausgestaltet ist, um ein Ausgangssignal unverändert zu halten, während das Haltesignal aktiviert ist; und um eines der Dateneingangssignale gemäß dem mindestens einen Abtast-Freigabesignal abzutasten, während das Haltesignal negiert ist, um einen Pegel des abgetasteten Dateneingangssignals an das Ausgangssignal zu übertragen.
  2. Schaltung nach Anspruch 1, wobei das Auswahlsignal ein Mehrbitsignal umfasst und jedes Bit in dem Auswahlsignal einem anderen der Dateneingangssignale in dem Satz von Dateneingangssignalen zugeordnet ist und nur ein Bit zu einem Zeitpunkt aktiviert ist.
  3. Schaltung nach Anspruch 2, wobei jedes der Bits in dem Auswahlsignal verwendet wird, um das zugehörige Dateneingangssignal abzutasten
  4. Schaltung nach Anspruch 2 oder 3, wobei die Decoderschaltung darüber hinaus ausgestaltet ist, um: einen Satz von Bereitschaftssignalen zu empfangen, wobei jedes Bereitschaftssignal in dem Satz einem anderen der Dateneingangssignale in dem Satz von Dateneingangssignalen zugeordnet ist, wobei jedes Bereitschaftssignal negiert ist, bis sich das zugehörige Dateneingangssignal nicht mehr ändert, und wobei jedes Bereitschaftssignal aktiviert wird, nachdem sich das zugehörige Dateneingangssignal nicht mehr ändert.
  5. Schaltung nach Anspruch 4, wobei der Decoder darüber hinaus ausgestaltet ist, um einen Satz von Freigabesignalen zu erzeugen, wobei jedes Freigabesignal in dem Satz einem anderen der Dateneingangssignale in dem Satz von Dateneingangssignalen zugeordnet ist, wobei jedes der Freigabesignale negiert ist, während das zugehörige Bereitschaftssignal negiert ist; und wobei eines der Freigabesignale in Reaktion auf die Aktivierung des zugehörigen Bereitschaftssignals jeweils aktiviert wird, wenn das zugehörige Dateneingangssignal aktiviert ist.
  6. Schaltung nach einem der vorhergehenden Ansprüche, wobei der Decoder darüber hinaus ausgestaltet ist, um einen Satz von Bereitschaftssignalen zu empfangen, wobei jedes Bereitschaftssignal in dem Satz einem anderen der Dateneingangssignale in dem Satz von Dateneingangssignalen zugeordnet ist, wobei jedes Bereitschaftssignal negiert ist, bis sich das zugehörige Dateneingangssignal nicht mehr ändert, und wobei jedes Bereitschaftssignal aktiviert wird, nachdem sich das zugehörige Dateneingangssignal nicht mehr ändert.
  7. Schaltung nach einem der vorhergehenden Ansprüche, wobei die Decoderschaltung darüber hinaus ausgestaltet ist, um das Haltesignal zu aktivieren, wenn das Haltesignal aktiviert ist und das mindestens eine Abtast-Freigabesignal negiert ist.
  8. Schaltung nach einem der vorhergehenden Ansprüche, wobei die Abtastschaltung eine Rückkopplungsschleife umfasst, die so ausgestaltet ist, dass sie das Ausgangssignal aktiviert, wenn das Haltesignal aktiviert ist und das Ausgangssignal aktiviert ist.
  9. Schaltung nach einem der vorhergehenden Ansprüche, wobei das Haltesignal und das mindestens eine Abtast-Freigabesignal beide für eine erste Zeitdauer aktiviert sind.
  10. Schaltung nach einem der vorhergehenden Ansprüche, wobei das Haltesignal invertiert wird, um ein Ausgangs-Bereitschaftssignal zu erzeugen.
  11. Schaltung nach einem der vorhergehenden Ansprüche, wobei der Satz von Eingangsdatensignalen drei Eingangsdatensignale aufweist und das Auswahlsignal so ausgestaltet ist, dass es eines der drei Eingangsdatensignale auswählt, um das Ausgangssignal zu erzeugen.
  12. Schaltung nach einem der vorhergehenden Ansprüche, wobei der Satz von Eingangsdatensignalen vier Eingangsdatensignale aufweist und das Auswahlsignal so ausgestaltet ist, dass es zwei der vier Eingangsdatensignale auswählt, um das Ausgangssignal und ein zusätzliches Ausgangssignal zu erzeugen.
  13. Schaltung nach einem der vorhergehenden Ansprüche, wobei die Schaltung in einem Prozessor vorhanden ist, der so ausgestaltet ist, dass er ein Bild erzeugt, und wobei der Prozessor ein Teil eines Servers oder eines Datenzentrums ist, und das Bild zu einer Benutzereinrichtung gestreamt wird.
  14. Schaltung nach einem der vorhergehenden Ansprüche, wobei die Schaltung in einem Prozessor vorhanden ist, der zum Trainieren, Testen oder Zertifizieren eines neuronalen Netzes ausgestaltet ist, das in einer Maschine, einem Roboter oder einem autonomen Fahrzeug eingesetzt ist.
  15. Schaltung nach einem der vorhergehenden Ansprüche, wobei die Schaltung in einem Prozessor vorhanden ist, der zum Implementieren eines neuronalen Netzwerkmodells ausgestaltet ist.
  16. Verfahren umfassend: Empfangen eines Auswahl-Bereitschaftssignals, das negiert ist, bis sich ein von einer kombinatorischen Logik erzeugtes Auswahlsignal nicht mehr ändert, und das aktiviert wird, nachdem sich das Auswahlsignal nicht mehr ändert; Erzeugen, entsprechend dem Auswahlsignal, mindestens eines Abtast-Freigabesignals, das mit einem Satz von Dateneingangssignalen korrespondiert, wobei das mindestens eine Abtast-Freigabesignal negiert ist, während das Auswahl-Bereitschaftssignal negiert ist, und in Reaktion auf die Aktivierung des Auswahl-Bereitschaftssignals aktiviert wird; Erzeugen eines Haltesignals, das aktiviert ist, während das mindestens eine Abtast-Freigabesignal negiert ist, und das als Reaktion auf die Aktivierung des mindestens einen Abtast-Freigabesignals negiert wird; Halten eines Ausgangssignals unverändert, während das Haltesignal aktiviert ist; und Abtasten eines der Dateneingangssignale gemäß dem mindestens einen Abtast-Freigabesignal, während das Haltesignal negiert ist, um einen Wert des abgetasteten Dateneingangssignals an das Ausgangssignal zu übertragen.
  17. Computerimplementiertes Verfahren nach Anspruch 16, wobei das Auswahlsignal ein Mehrbitsignal umfasst und jedes Bit in dem Auswahlsignal einem anderen der Dateneingangssignale in dem Satz von Dateneingangssignalen zugeordnet ist und nur ein Bit zu einem Zeitpunkt aktiviert ist.
  18. Computerimplementiertes Verfahren nach Anspruch 17, das darüber hinaus umfasst: Empfangen eines Satzes von Bereitschaftssignalen, wobei jedes Bereitschaftssignal in dem Satz einem anderen der Dateneingangssignale in dem Satz von Dateneingangssignalen zugeordnet ist, wobei jedes Bereitschaftssignal negiert ist, bis sich das zugehörige Dateneingangssignal nicht mehr ändert, und wobei jedes Bereitschaftssignal aktiviert wird, nachdem sich das zugehörige Dateneingangssignal nicht mehr ändert.
  19. Computerimplementiertes Verfahren nach Anspruch 17 oder 18, wobei eine Rückkopplungsschleife ausgestaltet ist, um das Ausgangssignal zu aktivieren, während das Haltesignal aktiviert ist und das Ausgangssignal aktiviert ist.
  20. Computerimplementiertes Verfahren nach einem der Ansprüche 16 bis 19, wobei die Schritte des Erzeugens, Empfangens und Abtastens innerhalb eines Prozessors ausgeführt werden, der so ausgestaltet ist, dass er ein neuronales Netzwerkmodell implementiert.
DE102021116231.9A 2020-07-02 2021-06-23 Störimpuls-freier multiplexer Pending DE102021116231A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/919,324 US11070205B1 (en) 2020-07-02 2020-07-02 Glitch-free multiplexer
US16/919,324 2020-07-02

Publications (1)

Publication Number Publication Date
DE102021116231A1 true DE102021116231A1 (de) 2022-01-05

Family

ID=76861767

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102021116231.9A Pending DE102021116231A1 (de) 2020-07-02 2021-06-23 Störimpuls-freier multiplexer

Country Status (2)

Country Link
US (2) US11070205B1 (de)
DE (1) DE102021116231A1 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11070205B1 (en) * 2020-07-02 2021-07-20 Nvidia Corporation Glitch-free multiplexer
US11809989B2 (en) * 2020-07-02 2023-11-07 Nvidia Corporation Preventing glitch propagation

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4414632A (en) * 1981-04-07 1983-11-08 Murrell Robert A Automatic monitoring system for radio signal
US5231636A (en) * 1991-09-13 1993-07-27 National Semiconductor Corporation Asynchronous glitchless digital MUX
US5315181A (en) * 1993-07-07 1994-05-24 Maxtor Corporation Circuit for synchronous, glitch-free clock switching
KR20020072049A (ko) * 2001-03-08 2002-09-14 엘지전자 주식회사 글리치 제거 장치
TW548534B (en) * 2001-04-12 2003-08-21 Via Tech Inc Control method for frequency raising and reducing of central processing unit using neural network
US6801146B2 (en) * 2002-11-14 2004-10-05 Fyre Storm, Inc. Sample and hold circuit including a multiplexer
US7446588B2 (en) * 2003-12-11 2008-11-04 International Business Machines Corporation Highly scalable methods and apparatus for multiplexing signals
US7245161B2 (en) * 2005-09-15 2007-07-17 International Business Machines Corporation Apparatus and method for verifying glitch-free operation of a multiplexer
US9673820B2 (en) * 2014-04-28 2017-06-06 Dsp Group Ltd. Low latency glitch-free chip interface
EP3012975B1 (de) * 2014-10-20 2019-07-03 IMEC vzw Fehlerfeste digitalsignalverarbeitungsvorrichtung
US10594309B2 (en) * 2018-07-02 2020-03-17 Apple Inc. Phase modulation systems and methods
US10855306B2 (en) * 2018-08-30 2020-12-01 Mediatek Singapore Pte. Ltd. High-speed digital-to-analog converter
US10788877B1 (en) * 2020-02-11 2020-09-29 Globalfoundries Inc. Transition once multiplexer circuit
US11070205B1 (en) * 2020-07-02 2021-07-20 Nvidia Corporation Glitch-free multiplexer

Also Published As

Publication number Publication date
US20220006457A1 (en) 2022-01-06
US11476852B2 (en) 2022-10-18
US11070205B1 (en) 2021-07-20

Similar Documents

Publication Publication Date Title
DE102018126670A1 (de) Fortschreitende Modifizierung von generativen adversativen neuronalen Netzen
DE102018117813A1 (de) Zeitlich stabile Datenrekonstruktion mit einem externen rekurrenten neuronalen Netzwerk
DE102018108324A1 (de) System und Verfahren zur Schätzung eines optischen Flusses
DE102018132069A1 (de) Äquivariante Orientierungspunkt-Transformation für Orientierungspunkt-Lokalisierung
DE102019106123A1 (de) Dreidimensionale (3D) Posenschätzung von Seiten einer monokularen Kamera
DE102020122943A1 (de) Hardware-basierte beschleunigung eines optischen flusses
DE102019102009A1 (de) Reduzierung des rauschens während des renderings durch parallele path-space-filterung unter verwendung von hashing
DE102020104637A1 (de) Techniken zur effizienten partitionierung von speicher
DE102019103310A1 (de) Schätzer for einen optimalen betriebspunkt für hardware, die unter einer beschränkung der gemeinsam genutzten leistung/wärme arbeitet
DE102019128750A1 (de) Reduzierung des detailgrades eines polygonnetzes, um eine komplexität einer bildlich wiedergegebenen geometrie innerhalb einer szene zu verringern
DE102021105249A1 (de) Mikrotraining zur iterativen verfeinerung eines neuronalen netzes mit wenigen anpassungen
DE102019130311A1 (de) Transponierte schwachbesetzte matrix multipliziert mit dichtbesetzter matrix für ein training neuronaler netzwerke
DE102020121601A1 (de) Persistenter Notizblockspeicher zum Datenaustausch zwischen Programmen
DE112020000865T5 (de) Speicherverwaltungssystem
DE102018114799A1 (de) Halbüberwachtes lernen zur orientierungspunktlokalisierung
DE102019103319A1 (de) Stochastisches runden von zahlenwerten
DE102021116231A1 (de) Störimpuls-freier multiplexer
DE102019134020A1 (de) Dekompprimierungstechniken zur verarbeitung komprimierter daten, die für künstliche neuronale netzwerke geeignet sind
DE102022121509A1 (de) Einzelbild-inversrendering
DE102022107232A1 (de) Gepackter fehlerkorrekturcode (ecc) für komprimierten datenschutz
DE102021111335A1 (de) Techniken zum dynamischen komprimieren von speicherregionen, die einen einheitlichen wert haben
DE102018123761A1 (de) Sicherung gegen fehler in einem fehlerkorrekturcode (ecc), der in einem kraftfahrzeugsystem implementiert ist
DE102020101525A1 (de) Blind-spot-faltungsarchitekturen und bayessche bildwiederherstellung
DE112019001978T5 (de) Verbesserung des realismus von szenen mit wasseroberflächen beim rendern
DE112021000303T5 (de) Barriere- und schrankenfreie synchronisierung von gemeinsam genutztem speicher

Legal Events

Date Code Title Description
R012 Request for examination validly filed