-
TECHNISCHES
GEBIET DER ERFINDUNG
-
Die
vorliegende Erfindung bezieht sich allgemein auf die Gebiete der
digitalen Signalverarbeitung und insbesondere auf einen digitalen
Signalprozessor mit einem Kerndatenprozessor und einem rekonfigurierbaren
Coprozessor.
-
HINTERGRUND
DER ERFINDUNG
-
Die
digitale Signalverarbeitung wird für die Audio- und Videoverarbeitung
immer weiter verbreitet. In vielen Fällen kann ein einziger digitaler
Prozessor eine Menge früherer
diskreter analoger Komponenten ersetzen. Die Zunahme der Verarbeitungskapazität, die digitale
Signalprozessoren bieten, ermöglicht
weitere Typen von Vorrichtungen und weitere Funktionen für frühere Vorrichtungen.
Dieser Prozess hat den Bedarf an komplizierteren Funktionen und
Merkmalen in momentanen Vorrichtungen und an neuen Typen von Vorrichtungen
erzeugt. In einigen Fällen übertrifft
dieser Bedarf die Fähigkeit
zur kosteneffizienten Lieferung der gewünschten Funktionalität mit vollständig programmierbaren
digitalen Signalprozessoren.
-
Eine
Reaktion auf diesen Bedarf ist die Kopplung eines digitalen Signalprozessors
mit einer anwendungsspezifischen integrierten Schaltung (ASIC).
Der digitale Signalprozessor wird so programmiert, dass er die Steuerfunktionen
und einen Teil der Signalverarbeitung behandelt. Die vollständige Programmierbarkeit
des digitalen Signalprozessors ermöglicht eine Produktdifferenzierung
durch Produktprogrammierung. Die ASIC ist so konstruiert, dass sie
eine Verarbeitungs-Hardware
für bestimmte Kernfunktionen
schafft, die üblicherweise
ausgeführt werden
und zeitkritisch sind. Mit der erhöhten Dichte integrierter Schaltungen
wird es nun möglich,
einen digitalen Signalprozessor und einen ASIC-Hardware-Coprozessor auf demselben
Chip anzuordnen.
-
Dieser
Zugang besitzt zwei Probleme. Dieser Zugang führt selten zu einer effizienten
Verbindung zwischen der Hardware-Coprozessor-ASIC und dem digitalen
Signalprozessor. Es ist typisch, dass der größte Teil der Schnittstelle
durch Programmierung des digitalen Signalprozessors behandelt wird.
In vielen Fällen
muss der digitale Signalprozessor Datenzeiger und Befehle in Echtzeit
liefern, während
der Hardware-Coprozessor arbeitet. Um sichere Entwürfe zu bilden,
ist es typisch, dass für
den digitalen Signalprozessor eine Zusatzzeit zum Bedienen des Hardware-Coprozessors
vorgesehen ist. Das heißt,
dass der Hardware-Coprozessor nicht vollständig genutzt verwendet. Ein
zweites Problem kommt von dem Problem der Entwurfszeitdauer. Mit der
erhöhten
Fähigkeit,
verschiedene Funktionalität zu
entwerfen, sind die Produktzyklen verringert worden. Dadurch wird
dem schnellen Entwurf neuer Funktionen ein hoher Wert beigemessen.
Die Fähigkeit,
Programme und Schnittstellen wiederzuverwenden, würde bei
der Verkürzung
der Entwurfszyklen helfen. Allerdings können die in dem ASIC-Hardware-Coprozessor
implementierten festen Funktionen nicht leicht wiederverwendet werden.
Der typische ASIC-Hardware-Coprozessor besitzt eine begrenzte Menge
von Funktionen, die für
einen engen Bereich von Problemen geeignet sind. Diese Entwürfe können nicht
einmal zur Implementierung eng verwandter Funktionen schnell wiederverwendet
werden. Außerdem
neigt die Schnittstelle zwischen dem digitalen Signalprozessor und
dem ASIC-Hardware-Coprozessor dazu, Ad-hoc-Techniken zu verwenden,
die für
ein besonderes Produkt spezifisch sind.
-
Die
in der europäischen
Patentanmeldung EP-A 0758 123, 'High
speed video board as a case study for hardware-software co-design' VON HERRMANN, D.,
U. A. in den PROCEEDINGS OF THE INTERNATIONAL CONFERENCE ON COMPUTER DESIGN.
ICCD. VLSI IN COMPUTERS AND PROCESSORS. AUSTIN, 7.–9. OKT
1996, LOS ALAMITOS, IEEE COMP. SOC. PRESS, USA, 7. Oktober 1996
(1996-10-07), S. 185–190,
XP010201800, ISBN: 0-8186-7554-3, und im Patent der Vereinigten Staaten
US-A-5 420 989 beschriebenen Anordnungen zeigen Prozessoren, die
an Adress- und Datenbusse angeschlossen sind, und beschreiben den Speicherzugriff.
-
Die
vorliegende Erfindung schafft ein Datenverarbeitungssystem und -verfahren,
wie sie in den beigefügten
Ansprüchen
dargestellt sind.
-
KURZBESCHREIBUNG
DER ZEICHNUNG
-
Die
vorliegende Erfindung wird nun beispielhaft mit Bezug auf die beispielhaften
Ausführungsformen
weiter beschrieben, die in der beigefügten Zeichnung veranschaulicht
sind, in der:
-
1 die Kombination eines
digitalen Signalprozessorkerns und eines rekonfigurierbaren Hardware-Coprozessors
in Übereinstimmung
mit dieser Erfindung veranschaulicht;
-
2 die logische Kopplung
des Speicherabbilds zwischen dem digitalen Signalprozessorkern und
dem rekonfigurierbaren Hardware-Coprozessor dieser Erfindung veranschaulicht;
-
3 eine Art und Weise der
Verwendung des rekonfiguierbaren Hardware-Coprozessorspeichers veranschaulicht;
-
4 eine Speichermanagementtechnik veranschaulicht,
die für
Filteralgorithmen nützlich
ist;
-
5 eine alternative Ausführungsform
der Kombination aus 1 veranschaulicht,
die zwei Coprozessoren mit einem privaten Bus dazwischen enthält;
-
6 die Konstruktion eines
Hardware-Coprozessors veranschaulicht, der rekonfigurierbar ist, um
eine Vielzahl von Filterfunktionen auszuführen;
-
7 die Eingabeformatierungseinrichtung des
in 6 veranschaulichten
rekonfigurierbaren Hardware-Coprozessors veranschaulicht;
-
8 den rekonfigurierbaren
Datenpfadkern des in 6 veranschaulichten
rekonfigurierbaren Hardware-Coprozessors veranschaulicht;
-
9 die Ausgabeformatierungseinrichtung des
in 6 veranschaulichten
rekonfigurierbaren Hardware-Coprozessors veranschaulicht;
-
10 die Datenflussverbindungen über den
Datenpfadkern zur Ausführung
eines reellen Filters mit endlicher Impulsantwort veranschaulicht;
-
11 die Datenflussverbindungen über den
Datenpfadkern zur Ausführung
eines komplexen Filters mit endlicher Impulsantwort veranschaulicht;
-
12 die Datenflussverbindung über den Datenpfadkern
zur Ausführung
einer Koeffizientenaktualisierungsfunktion veranschaulicht; und
-
13 die Datenflussverbindungen über den
Datenpfadkern zur Ausführung
einer schnellen Fourier-Transformation veranschaulicht.
-
AUSFÜHRLICHE
BESCHREIBUNG BEVORZUGTER AUSFÜHRUNGSFORMEN
-
1 veranschaulicht eine Schaltung 100, die
einen digitalen Signalprozessorkern 110 und einen rekonfigurierbaren
Hardware-Coprozessor 140 enthält. In Übereinstimmung mit der bevorzugten Ausführungsform
dieser Erfindung sind diese Teile in einer einzigen integrierten
Schaltung ausgebildet. Der digitale Signalprozessorkern 110 kann
einen herkömmlichen
Entwurf besitzen. In der bevorzugten Ausführungsform ist der digitale
Signalprozessorkern 110 so beschaffen, dass er die Direktspeicherzugriffsschaltung 120 für selbstständige Datenübertragungen
steuert, die unabhängig
von dem digitalen Signalprozessorkern 110 sind. Die externe
Speicherschnittstelle 130 dient als Schnittstelle des internen Datenbusses 101 und
des internen Adressbusses 103 zu ihren externen Gegenstücken, dem
externen Datenbus 131 bzw. dem externen Adressbus 133. Die
externe Speicherschnittstelle 130 besitzt eine herkömmliche
Konstruktion. Optional kann die integrierte Schaltung 100 zusätzliche
herkömmliche Merkmale
und Schaltungen enthalten. Insbesondere wird angemerkt, dass das
Hinzufügen
von Cache-Speicher zur integrierten Schaltung 100 die Leistung
wesentlich verbessern kann. Die in 1 veranschaulichten
Teile sollen die Bereitstellung weiterer herkömmlicher Teile nicht ausschließen. Diese
in 1 veranschaulichten
herkömmlichen
Teile sind lediglich diejenigen Teile, die von der Hinzunahme des
rekonfigurierbaren Hardware-Coprozessors 140 am meisten
betroffen sind.
-
Der
rekonfigurierbare Hardware-Coprozessor 140 ist über den
Datenbus 101 und über
den Adressbus 103 mit weiteren Teilen der integrieren Schaltung 100 gekoppelt.
Der rekonfigurierbare Hardware-Coprozessor 140 enthält einen
Befehlsspeicher 141, einen Coprozessor-Logikkern 143,
einen Datenspeicher 145 und einen Koeffizientenspeicher 147.
Der Befehlsspeicher 141 dient als ein Kanal, über den
der digitale Signalprozessorkern 110 die Operationen des
rekonfigurierbaren Hardware-Coprozessors 140 steuert. Dieses
Merkmal ist in 2 weiter
veranschaulicht. Der Coprozessor-Logikkern 143 reagiert
auf im Befehlsspeicher 141 gespeicherte Befehle, um die
Coprozessorfunktionen auszuführen.
Diese Coprozessorfunktionen umfassen den Austausch von Daten zwischen
dem Coprozessorlogikkern 143 und dem Datenspeicher 145 und
dem Koeffizientenspeicher 147. Der Datenspeicher 145 speichert
die durch den rekonfigurierbaren Hardware-Coprozessor 140 verarbeiteten
Eingabedaten und speichert ferner das Ergebnis der Operationen des
rekonfigurierbaren Hardware-Coprozessors 140. Die Art und
Weise der Speicherung dieser Daten wird unten anhand von 2 weiter beschrieben. Der
Koeffizientenspeicher 147 speichert die vom Coprozessor-Logikkern 143 verwendeten unveränderlichen
oder verhältnismäßig unveränderlichen
Prozessparameter, die Koeffizienten genannt werden. Obgleich der
Datenspeicher 145 und der Koeffizientenspeicher 147 als
getrennte Teile veranschaulicht sind, könnten diese leicht lediglich
als verschiedene Abschnitte eines einzigen Einheitsspeichers verwendet
werden. Wie unten gezeigt ist, ist es für den unten beschriebenen Mehrfachmultiplikations-Akkumulations-Coprozessor
am besten, wenn ein solcher einziger Einheitsspeicher zwei Leseports für Daten
und Koeffizienten und zwei Schreibports zum Schreiben der Ausgabedaten
besitzt. Es wird davon ausgegangen, dass es am besten ist, dass sich
der Speicher, auf den der rekonfigurierbare Hardware-Coprozessor 140 zugreifen
kann, in derselben integrierten Schaltung in physikalischer Nähe des Coprozessor-Logikkern 143 befindet.
Diese physikalische Nähe
ist erforderlich, um die breiten Speicherbusse unterzubringen, die durch
den gewünschten
Datendurchsatz des Coprozessor-Logikkerns 143 erforderlich
sind.
-
2 veranschaulicht die auf
den Speicher abgebildete Schnittstelle zwischen dem digitalen Signalprozessorkern 110 und
dem rekonfigurierbaren Hardware-Coprozessor 140.
Der digitale Signalprozessorkern 110 steuert den rekonfigurierbaren
Hardware-Coprozessor 140 über den Befehlsspeicher 141.
In der bevorzugten Ausführungsform
ist der Befehlsspeicher 141 ein Zuerst-Eingeben/Zuerst-Ausgeben-Speicher
(FIFO-Speicher). Der Schreibport des Befehlsspeichers 141 wird
auf einen einzigen Speicherplatz in dem Adressraum des digitalen
Signalprozessorkerns 110 auf den Speicher abgebildet. Somit
steuert der digitale Signalprozessorkern 110 den rekonfigurierbaren
Hardware-Coprozessor 140 dadurch, dass er Befehle, die
als die Eingabe in den Befehlsspeicher 141 dienen, an die
Adresse schreibt. Vorzugsweise enthält der Befehlsspeicher 141 zwei zirkulär ausgerichtete
Zeiger. Der Schreibzeiger 151 zeigt auf den Platz in dem
Befehlsspeicher 141, an dem der nächste empfangene Befehl gespeichert werden
soll. Jedesmal, wenn ein Schreiben an die vorgegebene Adresse des
Befehlsspeichers 141 erfolgt, wählt der Schreibzeiger den physikalischen Platz
aus, der die Daten empfängt.
Nach einem solchen Datenschreiben wird der Schreibzeiger 151 aktualisiert,
so dass er auf den nächsten
physikalischen Platz im Befehlsspeicher 141 zeigt. Der
Schreibzeiger 151 ist zirkulär ausgerichtet, da er von dem
letzten physikalischen Platz auf den ersten physikalischen Platz
zurückgesetzt
wird. Der rekonfigurierbare Hardware-Coprozessor 140 liest
die Befehle unter Verwendung des Lesezeigers 153 in der
gleichen Reihenfolge aus dem Befehlsspeicher 141, wie sie empfangen
werden (FIFO). Der Lesezeiger 153 zeigt auf denjenigen
physikalischen Platz im Befehlsspeicher 141, der den nächsten zu
lesenden Befehl speichert. Nach jedem solchen Lesen wird der Lesezeiger 153 aktualisiert,
so dass er auf den nächsten
physikalischen Platz im Befehlsspeicher 141 Bezug nimmt.
Es wird angemerkt, dass der Lesezeiger 153 ebenfalls zirkulär ausgerichtet
ist und von dem letzten physikalischen Platz auf den ersten physikalischen
Platz zurückgesetzt
wird. Der Befehlsspeicher 141 enthält ein Merkmal, das verhindert,
dass der Schreibzeiger 151 den Lesezeiger 153 überholt.
Dies kann z. B. dadurch ge schehen, dass das Schreiben abgelehnt
und ein Speicherfehlersignal an den digitalen Signalprozessorkern 110 zurückgesendet
wird, wenn der Schreibzeiger 151 und der Lesezeiger 153 auf
den gleichen physikalischen Platz Bezug nehmen. Somit kann der FIFO-Puffer
des Befehlsspeichers 141 voll sein und keine zusätzlichen
Befehle annehmen.
-
Der
Datenspeicher 145 und der Koeffizientenspeicher 147 werden
beide in den Datenadressraum des digitalen Signalprozessorkerns 110 abgebildet.
Wie in 2 veranschaulicht
ist, ist der Datenbus 101 doppeltgerichtet mit dem Speicher 149 gekoppelt.
In Übereinstimmung
mit der oben erwähnten alternativen
Ausführungsform
sind sowohl der Datenspeicher 145 als auch der Koeffizientenspeicher 147 als
Teil des Speichers 147 ausgebildet. Der (in 2 nicht veranschaulichte)
Coprozessor-Logikkern 143 kann ebenfalls auf den Speicher 147 zugreifen.
Außerdem
veranschaulicht 2 drei
abgegrenzte Speicherbereiche im Speicher 149. Wie unten
weiter beschrieben wird, führt
der rekonfigurierbare Hardware-Coprozessor 140 vorzugsweise
mehrere Funktionen aus, die verschiedene Speicherbereiche verwenden.
-
Die
integrierte Schaltung 100 arbeitet wie folgt. Der digitale
Signalprozessorkern 110 steuert die vom rekonfigurierbaren
Hardware-Coprozessor 140 verwendeten Daten und Koeffizienten,
indem er die Daten in dem Datenspeicher 145 und die Koeffizienten
in dem Koeffizientenspeicher 147 lädt. Alternativ lädt der digitale
Signalprozessorkern 110 die Daten und die Koeffizienten
in den Einheitsspeicher 149. Der digitale Signalprozessorkern 110 kann
so programmiert werden, dass er diese Datenübertragung direkt ausführt. Alternativ
kann der digitale Signalprozessorkern 110 so programmiert
werden, dass er die Direktspeicherzugriffsschaltung 120 so
steuert, dass sie diese Datenübertragung
ausführt.
Insbesondere bei Audio- oder Videoverarbeitungsanwendungen wird
der Datenstrom mit einer voraussagbaren Rate und von einer voraussagbaren
Eingabevorrichtung empfangen. Somit ist es typisch effizient, dass der
digitale Signalprozessorkern 110 die Direktspeicherzugriffsschaltung 120 so
steuert, dass sie Übertragungen
vom ex ternen Speicher zu einem Speicher vornimmt, auf den der rekonfigurierbare
Hardware-Coprozessor 140 zugreifen kann.
-
Nach
der Übertragung
der zu verarbeitenden Daten signalisiert der digitale Signalprozessorkern 110 den
rekonfigurierbaren Hardware-Coprozessor 140 mit dem Befehl
für den
gewünschten
Signalverarbeitungsalgorithmus. Wie zuvor festgestellt wurde, werden
Befehle durch einen Speicherschreibvorgang an eine vorgegebene Adresse
an den rekonfigurierbaren Hardware-Coprozessor 140 gesendet.
Die empfangenen Befehle werden auf einer Zuerst-Eingeben/Zuerst-ausgeben-Grundlage
im Befehlsspeicher 141 gespeichert.
-
Vorzugsweise
enthält
jeder Rechenbefehl des rekonfigurierbaren Hardware-Coprozessors 140 eine
Art und Weise, in der die besondere auszuführende Funktion spezifiziert
wird. In der bevorzugten Ausführungsform
ist der rekonfigurierbare Hardware-Coprozessor 140 so konstruiert,
dass er rekonfigurierbar ist. Der rekonfigurierbare Hardware-Coprozessor 140 besitzt
eine Menge von Funktionseinheiten wie etwa Multiplizierer und Addierer,
die auf verschiedene Weise miteinander verbunden werden können, um
verschiedene, aber verwandte Funktionen auszuführen. Die Menge der verwandten
Funktionen, die für
jeden rekonfigurierbaren Hardware-Coprozessor ausgewählt werden,
beruht auf einer Ähnlichkeit
der Mathematik der Funktionen. Diese Ähnlichkeit der Mathematik ermöglicht es, ähnliche
Hardware für
die mehreren Funktionen zu rekonfigurieren. Der Befehl kann die
besondere Berechnung in der Art von Datenprozessoranweisungen über einen
Opcode angeben.
-
Jeder
Rechenbefehl enthält
eine Art und Weise des Spezifizierens des Platzes der von der Berechnung
zu verwendenden Daten. Es gibt viele geeignete Verfahren, um den
Datenraum zu bestimmen. Beispielsweise kann der Befehl eine Startadresse
und eine Anzahl der Datenwörter
oder Abtastwerte in dem Block spezifizieren. Die Datengröße kann
als ein Parameter spezifiziert werden oder kann durch den Opcode
spezifiziert werden, der die Art der Berechnung definiert. Als ein
weiteres Beispiel kann der Befehl die Datengröße, die Startadresse und die Endadresse
der Eingabedaten spezifizieren. Es wird angemerkt, dass bekannte indirekte
Verfahren verwendet werden können,
um zu spezifizieren, wo die Eingabedaten gespeichert werden. Der
Befehl kann einen Zeiger auf ein Register oder auf einen Speicherplatz
enthalten, der irgendeinen dieser Parameter wie etwa Startadresse,
Datengröße, Anzahl
der Abtastwerte in dem Datenblock und Endadresse speichert.
-
Ferner
muss jeder Rechenbefehl den Speicheradressbereich angeben, der die
Daten für
den besonderen Befehl speichert. Diese Angabe kann durch irgendeines
der Verfahren erfolgen, die oben in Bezug auf die Orte, die die
Eingabedaten speichern, aufgeführt
sind. In vielen Fällen
ist die Rechenfunktion eine Filterfunktion, wobei die Menge der
Ausgabedaten, die auf die Verarbeitung folgen, etwa gleichwertig
der Menge der Eingabedaten ist. In anderen Fällen kann die Menge der Ausgabedaten
größer oder
kleiner als die Menge der Eingabedaten sein. Auf jeden Fall ist
die Menge der resultierenden Daten aus der Menge der Eingabedaten
und der Art der angeforderten Rechenfunktion bekannt. Somit liefert
lediglich das Spezifizieren der Startadresse ausreichend Informationen,
um anzugeben, wo sämtliche resultierenden
Daten zu speichern sind. Es ist möglich, die Ausgabedaten auf
löschende
Weise zu speichern, wobei die Eingabedaten während der Verarbeitung überschrieben
werden, Alternativ können
die Ausgabedaten in einen anderen Speicherabschnitt geschrieben
und die Eingabedaten wenigstens vorübergehend erhalten werden.
Die Auswahl zwischen diesen Alternativen kann davon abhängen, ob
die Eingabedaten wiederverwendet werden.
-
3 veranschaulicht eine nützliche
Technik, die die alternative Verwendung zweier Speicherbereiche
umfasst. Ein Speicherbereich 144 speichert die für die Coprozessorfunktion
benötigten
Eingabedaten. Die relativ konstanten Koeffizienten werden im Koeffizientenspeicher 147 gespeichert.
Diese Daten werden zur Verwendung durch den Coprozessor-Logikkern 143 zurückgerufen
(1 Lesevorgang). Die Ausgabedaten werden in den zweiten Speicherbereich 146 geschrieben
(1 Schreibvorgang). Nach der Verwendung des Datenspeicherbereichs 144 schreibt
die Direktspeicherzugriffsschaltung 120 die Daten für den nächsten Block,
wobei die zuvor verwendeten Daten überschrieben werden (2 Schreibvor gänge). Gleichzeitig
liest die Direktspeicherzugriffsschaltung 120 die Daten
aus dem Speicherbereich 146 vor ihm, die durch den rekonfigurierbaren Hardware-Coprozessor 140 überschrieben
werden (2 Lesevorgänge).
Diese zwei Speicherbereiche für Eingabedaten
und für
resultierende Daten könnten als
zirkuläre
Puffer konfiguriert sein. In einem Produkt, das mehrere verwandte
Funktionen erfordert, können
getrennte Speicherbereiche verwendet werden, die als zirkuläre Puffer
definiert sind. Für
jede getrennte Funktion wird ein Speicherbereich zugeordnet, der
als ein zirkulärer
Puffer konfiguriert ist.
-
Vorzugsweise
ist das Format der Rechenbefehle sehr ähnlich dem Format einer Unterroutinenaufrufanweisung
in einer höheren
Programmiersprache. Das heißt,
der Befehl enthält
einen Befehlsnamen, dessen Funktion ähnlich dem Namen der Unterroutine
ist, die die besondere auszuführende
Rechenfunktion spezifiziert. Außerdem
enthält
jeder Befehl eine Menge von Parametern, die die in dem Befehlstyp
verfügbaren
Optionen spezifizieren. Diese Parameter können die Form direkter Größen oder Variablen
annehmen, die Zeiger auf Register oder Speicherplätze sind,
die die gewünschten
Größen speichern.
Die Anzahl und der Typ dieser Parameter hängen von dem Befehlstyp ab.
Dieses Unterroutinenaufrufformat ist wichtig bei der Wiederverwendung
von Programmen, die für
den digitalen Signalprozessorkern 110 geschrieben worden
sind. Bei der Verwendung stellt der Programmierer oder der Compiler
eine Programmstumpf-Unterroutine bereit, die den rekonfigurierbaren
Hardware-Coprozessor 140 aktiviert. Diese Programmstumpf-Unterroutine
empfängt
lediglich die Unterroutinenparameter und bildet unter Verwendung
dieser Parameter den entsprechenden Coprozessor-Befehl. Daraufhin
schreibt die Programmstumpf-Unterroutine diesen Befehl an die vorgegebene
Speicheradresse, die für
die Befehlsübertragung
zum rekonfigurierbaren Hardware-Coprozessor 140 reserviert
ist, und kehrt daraufhin zurück. Diese
Erfindung sieht vor, dass die Rechenkapazität der digitalen Signalprozessorkerne
regelmäßig mit der
Zeit zunimmt. Somit können
die Verarbeitungsanforderungen eines besonderen Produkts zu einem Zeitpunkt
die Kombination des digitalen Signalprozessorkerns 110 und
des rekonfigurierbaren Hardware-Coprozessors 140 erfordern.
Zu einem späteren
Zeitpunkt kann die verfügbare
Rechenkapazität ei nes
befehlssatzkompatiblen digitalen Signalprozessorkerns zunehmen,
so dass die Funktionen, die zuvor einen rekonfigurierbaren Hardware-Coprozessor
erforderten, durch den digitalen Signalprozessorkern in Software
ausgeführt
werden können.
Der frühere
Programmcode für
das Produkt kann leicht in den neuen, leistungsfähigeren digitalen Signalprozessor
umgesetzt werden. Dies wird dadurch erreicht, dass für jeden
der Befehle, die durch den ersetzten rekonfigurierbaren Hardware-Coprozessor unterstützt werden,
unabhängige
Unterroutinen vorgesehen werden. Daraufhin wird jede Stelle, an
der das ursprüngliche
Programm den Unterroutinen-Programmstumpf verwendet, um einen Befehl
an den rekonfigurierbaren Hardware-Coprozessor zu senden, durch
den entsprechenden Unterroutinenaufruf ersetzt. Somit wird eine
umfangreiche Neuprogrammierung vermieden.
-
Nach
Abschluss der Verarbeitung an einem Datenblock können die Daten aus dem Datenspeicher 145 oder
aus dem Einheitsspeicher 149 übertragen werden. Diese zweite Übertragung
kann entweder durch direkte Wirkung des digitalen Signalprozessorkerns 110,
der die an den Ausgabespeicherplätzen
gespeicherten Daten liest, oder mit Hilfe der Direktspeicherzugriffsschaltung 120 stattfinden.
Diese Ausgabedaten können
die Ausgabe des Prozesses repräsentieren.
In diesem Fall werden die Daten an eine Nutzungsvorrichtung übertragen.
Alternativ können
die Ausgabedaten des rekonfigurierbaren Hardware-Coprozessors 140 Arbeit
repräsentieren, die
im Gang ist. In diesem Fall werden die Daten typisch vorübergehend
zur späteren
Wiedergewinnung und Weiterverarbeitung in einem Speicher gespeichert,
der extern gegenüber
der integrierten Schaltung 100 ist.
-
Daraufhin
ist der rekonfigurierbare Hardware-Coprozessor 140 zur
Weiterverwendung bereit. Diese Weiterverwendung kann eine zusätzliche
Verarbeitung der gleichen Funktion sein. In diesem Fall wird der
oben beschriebene Prozess auf die gleiche Weise an einem neuen Datenblock
wiederholt. Diese Weiterverarbeitung kann eine Verarbeitung einer
anderen Funktion sein. In diesem Fall müssen die neuen Daten in einen
Speicher geladen werden, auf den der rekonfigurierbare Hardware-Coprozessor 140 zugreifen
kann, muss der neue Befehl geladen werden und müssen daraufhin die verarbeiteten
Daten zur Ausgabe oder Weiterverarbeitung gelesen werden.
-
Vorzugsweise
kann der rekonfigurierbare Hardware-Coprozessor 140 mehr
als eine Funktion des Produktalgorithmus ausführen. Viele digitale Signalverarbeitungsaufgaben
verwenden mehrere Instanzen ähnlicher
Funktionen. Beispielsweise kann der Prozess viele ähnliche
Filterfunktionen enthalten. Vorzugsweise besitzt der rekonfigurierbare
Hardware-Coprozessor 140 genügend Verarbeitungsfähigkeit,
um diese Filterfunktionen alle in Echtzeit auszuführen. Der
Vorteil, Datenblöcke
anstelle diskreter Abtastwerte zu bearbeiten, wird offensichtlich,
wenn der rekonfigurierbare Hardware-Coprozessor 140 in einem
solchen System arbeitet. Als ein Beispiel wird angenommen, dass
der rekonfigurierbare Hardware-Coprozessor 140 drei Funktionen
A, B und C ausführt.
Diese Funktionen können
sequentiell sein oder können
mit Funktionen, die durch den digitalen Signalprozessorkern 110 ausgeführt werden,
verschachtelt sein. Zunächst
führt der
rekonfigurierbare Hardware-Coprozessor 140 an einem Datenblock
die Funktion A aus. Diese Funktion wird wie oben skizziert ausgeführt. Der
digitale Signalprozessorkern 110 lädt die Daten entweder direkt
oder durch die Steuerung der Direktspeicherzugriffsschaltung 120 in den
Speicherbereich 155 des Speichers 149. Bei Ausgabe
des Befehls zur Konfiguration für
die Funktion A, die die Menge der zu verarbeitenden Daten spezifiziert,
führt der
rekonfigurierbare Hardware-Coprozessor 140 die Funktion
A aus und speichert die sich ergebenden Daten in dem durch den Befehl
spezifizierten Abschnitt des Speicherbereichs 155. Es findet
ein ähnlicher
Prozess statt, der veranlasst, dass der rekonfigurierbare Hardware-Coprozessor 140 an
den im Speicherbereich 157 gespeicherten Daten die Funktion
B ausführt
und das Ergebnis an den Speicherbereich 157 zurückgibt.
Die Ausführung der
Funktion kann an Datenblöcken
stattfinden, die eine Größe haben,
die ohne Beziehung zur Größe der Datenblöcke für die Funktion
B ist. Schließlich wird
der rekonfigurierbare Hardware-Coprozessor 140 angewiesen,
an den Daten im Speicherbereich 159 die Funktion C auszuführen und
das Ergebnis an den Speicherbereich 159 zurückgegeben.
Die Blockgröße zur Ausführung der
Funk tion C ist unabhängig von
den für
die Funktionen A und B ausgewählten Blockgrößen.
-
Aus
diesem Beispiel ist die Nützlichkeit
der Blockverarbeitung ersichtlich. Typisch haben die drei Funktionen
A, B und C Datenflussraten, die unabhängig sind, d. h. nicht notwendig
gleich sind. Die Bereitstellung von Spezialhardware für jede Funktion
opfert die Allgemeinheit der Funktionalität und die Wiederverwendbarkeit
der rekonfigurierbaren Hardware. Ferner wäre es schwierig, die jeder
Funktion gewährten
Betriebsmittel in Hardware anzupassen, um ein Gleichgewicht und
die beste Nutzung der Hardware zu schaffen. Wenn rekonfigurierbare
Hardware verwendet wird, gibt es zwangsläufig einen Organisationsaufwand
zur Umschaltung zwischen den Konfigurationen. Die Bearbeitung auf
Abtastwertweiser Grundlage für
den Fluss durch die drei Funktionen erfordert eine Maximalzahl solcher
Rekonfigurationsumschaltungen. Dies ist eindeutig suboptimal. Somit
würde das
Betreiben jeder Funktion an einem Datenblock vor der Rekonfiguration
zum Umschalten zwischen den Funktionen diesen Organisationsaufwand
verringern. Außerdem
wäre es
dann verhältnismäßig leicht,
durch Auswählen
der jeder Funktion gewidmeten Zeitdauer Betriebsmittel zwischen
den Funktionen zuzuordnen. Schließlich würde diese Blockverarbeitung
allgemein weniger Steuerorganisationsaufwand von dem digitalen Signalprozessorkern
als das Umschalten zwischen den Funktionen auf einer Abtastwertebene
erfordern.
-
Die
für die
verschiedenen Funktionen A, B und C ausgewählten Blockgrößen hängen von
den geforderten relativen Datenraten und von den Datengrößen ab.
Außerdem
müssen
ebenfalls die dem digitalen Signalprozessorkern 110 zugewiesenen
Aufgaben und ihre jeweiligen Rechenanforderungen betrachtet werden.
Ideal sind sowohl der digitale Signalprozessorkern 110 als
auch der rekonfigurierbare Hardware-Coprozessor 140 nahezu
vollständig
belastet. Dies würde
zur optimalen Verwendung der Betriebsmittel führen. Ein solcher Lastausgleich
des digitalen Signalprozessorkerns 110 und des rekonfigurierbaren
Hardware-Coprozessors 140 kann nur mit Produktalgorithmen
erzielt werden, die den rekonfigurierbaren Hardware-Coprozessor 140 bei
etwa 50% der Berechnungen verwenden können. Falls der rekonfigurierbare
Hardware-Coprozessor 140 mehr als die Hälfte der minimal erforderlichen
Berechnungen ausführen
kann, können
die in dem digitalen Signalprozessorkern 110 implementierten
zusätzlichen Merkmale
zu dem Produkt hinzugefügt
werden, um die Belastung anzugleichen. Dies würde zur Verwendung von Reserverechenbetriebsmitteln
im digitalen Signalprozessorkern 110 führen. Die Belastung der Rechenprozesse
kann statistisch bestimmt werden. Eine solche statistische Rechenzuweisung
kann am besten vorgenommen werden, wenn sowohl der digitale Signalprozessorkern 110 als
auch der rekonfigurierbare Hardware-Coprozessor 140 feste
und bekannte Funktionen ausführen.
Falls erwartet wird, dass sich die Rechenlast mit der Zeit ändert, ist
es wahrscheinlich am besten, die Rechenbetriebsmittel zwischen dem
digitalen Signalprozessorkern 110 und dem rekonfigurierbaren
Hardware-Coprozessor 140 dynamisch zur Laufzeit zuzuordnen.
Es wird erwartet, dass die von dem rekonfigurierbaren Hardware-Coprozessor 140 ausgeführten Prozesse
verhältnismäßig stabil
bleiben und dass sich lediglich die von dem digitalen Signalprozessorkern 110 ausgeführten Prozesse ändern.
-
4 zeigt eine Speichermanagementtechnik,
die eine bessere Unterbrechung der Operationen ermöglicht.
Die Daten 400, die die Datenblöcke 401, 402 und 403 umfassen,
werden durch das Fenster 410 eines Filters mit endlichem
Impuls geleitet. Solche Filter bearbeiten eine Zeithistorie der
Daten. In den jeweiligen Ringpuffern 421, 431 und 441 im
Datenspeicher 145 arbeiten drei Prozesse A, B und C. Ein
solcher Ringpuffer ermöglicht,
die Historie aufzubewahren. Somit sind die Historiendaten an voraussagbaren
Adressen zur Verwendung verfügbar,
wenn nach einer anderen Verarbeitung der nächste Block verarbeitet wird.
Diese Historiendaten stehen unmittelbar vor den neu geschriebenen
Daten für
den nächsten
Block.
-
Diese
Technik arbeitet gut mit Ausnahme, wenn Speicherraum gelöscht werden
muss, um eine andere Aufgabe zu ermöglichen. In diesem Fall könnten die
Historiendaten geleert werden und bei Fortsetzung der Filterverarbeitung
neu geladen werden. Alternativ könnten
die für
den nächsten
Block benötigten
Histo riendaten zu einem weiteren Speicherbereich 145 oder
zu einem an die externe Speicherschnittstelle 130 angeschlossenen
externen Speicher verschoben werden. Beide Verfahren sind nachteilig,
da sie Zeit zum Verschieben der Daten erfordern. Dies verzögert entweder
die Bedienung der Unterbrechung oder die Fortsetzung der ursprünglichen Aufgabe.
-
In 4 ist schematisch eine bevorzugte
Alternative veranschaulicht. Während
des Schreibens der resultierenden Daten an ihre Stelle im Speicher wird
der momentane Abtastwert in einen kleineren Speicherbereich geschrieben.
Beispielsweise werden Eingabedaten vom Ringpuffer 421 in
den Historienpuffer 423 geschrieben, werden Eingabedaten vom
Ringpuffer 431 in den Historienpuffer 433 geschrieben
und werden Eingabedaten vom Ringpuffer 441 in den Historienpuffer 443 geschrieben.
Jeder der Historienpuffer 423, 433 und 443 besitzt
gerade die Größe, die
gemäß der Breite
des entsprechenden Filterfensters wie etwa des Filterfensters 410 zum Speichern
der Historie benötigt
wird. Beim Abschluss der Verarbeitung eines Datenblocks wird die
jüngste Historie
in diesem beschränkten
Bereich gespeichert. Falls der Coprozessor unterbrochen werden muss,
können
die Daten in den Ringpuffern 421, 431 und 441 gelöscht werden,
ohne die in den Historienpuffern 423, 433 und 443 gespeicherten
Historiendaten zu überspielen.
Diese Technik verzichtet auf die Notwendigkeit, die Daten vor Beginn
der Unterbrechungsaufgabe neu zu laden oder anderswo zu speichern.
In vielen Filteraufgaben ist genug Schreibspeicherbandbreite verfügbar, um
ein Schreiben in die Historienpuffer zu erreichen, ohne dass Zusatzzyklen
erforderlich sind. Ein weiterer Vorteil dieser Technik ist, dass
für die
Ringpuffer 421, 431 und 441 weniger Speicher
als zuvor zugeordnet werden muss. In der früheren Technik mussten die Ringpuffer groß genug
sein, um einen gesamten Datenblock und eine zusätzliche Menge, die gleich den
geforderten Historiendaten ist, aufzunehmen. Die in 4 veranschaulichte Technik ermöglicht,
die Größe der Ringpuffer 421, 431 und 441 zu
verringern, so dass sie gerade zum Speichern eines Datenblocks ausreicht.
-
Viele
bei der Audio- und Videosignalverarbeitung nützliche Algorithmen umfassen
das Anpassen von Koeffizienten. Das heißt, es gibt einen Rückkopplungs pfad,
der die während
der Zeit ausgeführte Funktion ändert. Ein
Beispiel solcher Algorithmen ist ein Modem, das eine Zeit braucht,
um sich an die besondere verwendete Leitung und an den Betrieb des Modems
am fernen Ende anzupassen. Anfangs scheint es, dass sich die Ausführung solcher
adaptiver Funktionen in der Blockbetriebsart nachteilig auf die
Konvergenz dieser adaptiven Funktionen auswirkt. Eine Überprüfung der
betroffenen Mathematik zeigt bei vielen solchen Funktionen das Gegenteil. Die
Menge der Anpassung, die zu einer besonderen Zeit ausgeführt werden
kann, hängt
allgemein von der zur Berechnung der Anpassung verfügbaren Datenmenge
ab. Diese Menge der verfügbaren
Daten hängt
nicht davon ab, ob die Daten Abtastwert-weise oder in Abtastwertblöcken verarbeitet
werden. In der Praxis ist die Anpassungsrate etwa die gleiche. Die Anpassung
auf Abtastwert-Grundlage führt
in vielen kleinen Schritten zur Konvergenz gegen die vollständig angepassten
Koeffizienten. Die Anpassung auf der Grundlage von Datenblöcken führt in weniger
und größeren Schritten
zur Konvergenz. Dies ist so, da die größere verfügbare Datenmenge im Fall der Blockverarbeitung
einen gößeren Fehlerterm
für die Korrektur
ansteuert. Allerdings ist der Durchschnittskonvergenzanstieg für die beiden
Fälle derselbe.
In Fällen,
in denen wie etwa in dem vorangehenden Modembeispiel die meiste
Anpassung bei der Initialisierung stattfindet, während die meiste Verarbeitung
unter stationären
Bedingungen stattfindet, gibt es wenig praktische Differenz. In
Fällen,
in denen das adaptive Filter einem bewegten Ziel folgen muss, ist
nicht klar, ob die Anpassung auf Abtastwert-weiser Grundlage besser
als die Anpassung auf Blockgrundlage ist. Falls sich der befolgte
Prozess z. B. mit einer größeren Häufigkeit
als das Inverse der Zeit der Blockgröße ändert, kann die Anpassung auf
Blockgrundlage eine nutzlose Jagd in kleinen Schritten im Vergleich zur
Abtastwert-weisen Anpassung verhindern. Somit besitzt die adaptive
Filterung auf Blockgrundlage keinen allgemeinen Nachteil gegenüber der
adaptiven Filterung auf Abtastwertgrundlage.
-
Vorzugsweise
enthält
der Befehlssatz des rekonfigurierbaren Hardware-Coprozessors 140 mehrere
Nicht-Rechenanweisungen für
Steuerfunktionen. Diese Steuerfunktionen sind nützlich bei der Zusammenarbeit
zwischen dem digitalen Signalprozessorkern 110 und dem
rekonfigurierbaren Hardware-Coprozessor 140.
-
Der
erste dieser Nicht-Rechenbefehle ist ein Empfangsdatensynchronisationsbefehl.
Dieser Befehl wird typisch in Verbindung mit Datenübertragungen
verwendet, die durch die Direktspeicherzugriffsschaltung 120 behandelt
werden. Der digitale Signalprozessorkern 110 steuert den
Prozess, indem er die Eingabedatenübertragung über die Direktspeicherzugriffsschaltung 120 aufbaut.
Der digitale Signalprozessorkern 110 sendet zwei Befehle
an den rekonfigurierbaren Hardware-Coprozessor 140. Der
erste Befehl ist der Empfangsdatensynchronisationsbefehl. Der zweite
Befehl ist der gewünschte
Rechenbefehl.
-
Der
rekonfigurierbare Hardware-Coprozessor 140 bearbeitet die
im Befehlsspeicher 141 gespeicherten Befehle auf einer
Zuerst-Eingeben/Zuerst-Ausgeben-Grundlage.
Beim Erreichen des Empfangsdatensynchronisationsbefehls hält der rekonfigurierbare
Hardware-Coprozessor an. Der rekonfigurierbare Hardware-Coprozessor bleibt
im Leerlauf, bis er von der Direktspeicherzugriffsschaltung 120 ein
Steuersignal empfängt,
das den Abschluss der Eingabedatenübertragung angibt. Es wird
angemerkt, dass bei einem solchen Abschluss dieser Eingabedatenübertragung
die Daten für
den nächsten
Block im Datenspeicher 145 oder im Einheitsspeicher 149 gespeichert
werden. Die Direktspeicherzugriffsschaltung 120 kann in
der Lage sein, mehrere in eine Warteschlange eingereihte Datenübertragungen
zu behandeln. Dies ist im Gebiet als mehrere DMA-Kanäle bekannt.
In diesem Fall muss der Empfangsdatensynchronisationsbefehl den
entsprechenden DMA-Kanal notieren, der dem digitalen Signalprozessorkern 110 vor
der Übertragung
des Empfangsdatensynchronisationsbefehls bekannt ist. Die Direktspeicherzugriffsschaltung 120 sendet
die Kanalnummer jeder abgeschlossenen Datenübertragung. Dies ermöglicht,
dass der rekonfigurierbare Hardware-Coprozessor 140 den
abgeschlossenen Direktspeicherzugriff an den entsprechenden Empfangsdatensynchronisationsbefehl
anpasst. Der rekonfigurierbare Hardware-Coprozessor fährt nur dann
mit dem nächsten
Befehl fort, wenn ein Signal für
den abgeschlossenen Direktspeicherzugriff denselben DMA-Kanal angibt,
wie er in dem Empfangsdatensynchronisationsbefehl spezifiziert ist.
-
Nach
diesem Abschlusssignal schreitet der rekonfigurierbare Hardware-Coprozessor 140 zum nächsten Befehl
im Befehlsspeicher 141 fort. In diesem Fall ist der nächste Befehl
ein Rechenbefehl, der die gerade geladenen Daten verwendet. Da dieser Rechenbefehl
erst starten kann, wenn der vorausgehende Empfangsdatensynchronisationsbefehl
abgeschlossen ist, stellt dies sicher, dass die richtigen Daten
geladen worden sind.
-
Diese
Kombination des Empfangsdatensynchronisationsbefehls und des Rechenbefehls
verringert die Steuerbelastung des digitalen Signalprozessorkerns 110.
Der digitale Signalprozessorkern 110 braucht lediglich
die Direktspeicherzugriffsschaltung 120 einzustellen, so
dass sie die Eingabedatenübertragung
vornimmt, und das Befehlspaar an den rekonfigurierbaren Hardware-Coprozessor 140 sendet. Dies
stellt sicher, dass die Eingabedatenübertragung vor Beginn der Rechenoperation
abgeschlossen ist. Dies verringert stark die Menge des Software-Organisationsaufwands,
den der digitale Signalprozessorkern 110 benötigt, um
die Funktion des rekonfigurierbaren Hardware-Coprozessors 140 zu
steuern. Ansonsten muss der digitale Signalprozessorkern möglicherweise
eine Unterbrechung von der Direktspeicherzugriffsschaltung 120 empfangen,
die den Abschluss der Eingabedatenladeoperation signalisiert. Es
muss eine Unterbrechungsdienstroutine geschrieben werden, die die
Unterbrechung bedient. Außerdem
erfordert eine solche Unterbrechung ein Kontextumschalten, um den
Coprozessorbefehl an den Befehlsspeicher zu senden, und ein weiteres
Kontextumschalten, um von der Unterbrechung zurückzukehren. Folglich setzt
der Empfangsdatensynchronisationsbefehl eine beträchtliche
Kapazität
in dem digitalen Signalprozessorkern zur produktiveren Verwendung
frei.
-
Ein
weiterer Nicht-Rechenbefehl ist ein Sendedatensynchronisationsbefehl.
Der Sendedatensynchronisationsbefehl ist nahezu die Umkehrung des
Empfangsdatensynchronisationsbefehls. Beim Erreichen des Sendedatensynchronisationsbefehls löst der rekonfigurierbare
Hardware-Coprozessor 140 eine Direktspeicherzugriffsoperation
aus. Diese Direktspeicherzugriffsoperation liest aus dem Datenspeicher 145 oder
aus dem Einheitsspeicher 149 Daten zur Speicherung an einem anderen
Systemort. Diese Direktspeicherzugriffsoperation kann durch den
digitalen Signalprozessorkern 110 voreingestellt sein und
wird lediglich beim Empfang eines Signals vom rekonfigurierbaren
Hardware-Coprozessor 140 beim Feststellen des Sendedatensynchronisationsbefehls
begonnen. Falls die Direktspeicherzugriffsschaltung 120 mehrere
DMA-Kanäle
unterstützt, muss
der Sendedatensynchronisationsbefehl den ausgelösten DMA-Kanal spezifizieren.
Alternativ kann der Sendedatensynchronisationsbefehl die Steuerparameter
für die
Direktspeicherzugriffsschaltung 120, die den DMA-Kanal
enthält,
spezifizieren, falls mehr als ein Kanal unterstützt wird. Beim Feststellen
eines solchen Sendedatensynchronisationsbefehls kommuniziert der
rekonfigurierbare Hardware-Coprozessor direkt mit der Direktspeicherzugriffsschaltung 120,
um eine geeignete Direktspeicherzugriffsoperation einzurichten und
zu beginnen.
-
Ein
weiterer möglicher
Nicht-Rechenbefehl ist ein Synchronisationsabschlussbefehl. Beim
Feststellen eines Synchronisationsabschlussbefehls sendet der rekonfigurierbare
Hardware-Coprozessor 140 eine Unterbrechung an den digitalen
Signalprozessorkern 110. Beim Empfang einer solchen Unterbrechung
wird sichergestellt, dass der digitale Signalprozessorkern 110 alle
früheren
Befehle, die an den rekonfigurierbaren Hardware-Coprozessor 140 gesendet
worden sind, abgeschlossen hat. Je nach Anwendung kann es besser
sein, über
Unterbrechungen als über
das Senden und Empfangen von Datensynchronisationsbefehlen zu steuern.
Außerdem
kann es besser sein, mehrere Operationen für den rekonfigurierbaren Hardware-Coprozessor 140 unter
Verwendung von Sende- und Empfangsdatensynchronisationsbefehlen
in eine Warteschlange einzureihen und daraufhin den digitalen Signalprozessorkern 110 am Ende
der Warteschlange zu unterbrechen. Dies kann nützlich sein für höhere Steuerfunktionen
durch den digitalen Signalprozessorkern 110, die auf die
Warteschlangen-Operationen durch den rekonfigurierbaren Hardware-Coprozessor
folgen.
-
5 veranschaulicht eine weitere
mögliche Anordnung
der Schaltung 100. Die in 5 veranschaulichte
Schaltung 100 enthält
zwei rekonfigurierbare Hardware-Coprozessoren. Der digitale Signalprozessorkern 110 arbeitet
mit ei nem ersten rekonfigurierbaren Hardware-Coprozessor 140 und
mit einem zweiten rekonfigurierbaren Hardware-Coprozessor 180.
Ein privater Bus 185 koppelt den ersten rekonfigurierbaren
Hardware-Coprozessor 140 und den zweiten rekonfigurierbaren
Hardware-Coprozessor 180. Diese Coprozessoren besitzen
private Speicher, die den Speicherraum des digitalen Signalprozessorkerns 110 gemeinsam
nutzen. Die Daten können
durch einen Coprozessor, der in den Adressbereich schreibt, der
vom privaten Speicher des anderen Coprozessors eingeschlossen wird, über den
privaten Bus 185 übertragen
werden. Alternativ kann jeder Coprozessor einen Ausgangsport haben,
der zu einem Eingangsport des anderen Coprozessors gerichtet ist,
wobei die Verbindungen zwischen den Coprozessoren im privaten Bus 185 eingeschlossen sind.
Diese Konstruktion kann besonders nützlich sein für Produkte,
in denen die Daten von einer durch einen Coprozessor behandelten
Operation einer Art zu einer durch den zweiten Coprozessor behandelten
Operation einer anderen Art fließen. Dieser private Bus befreit
den digitalen Signalprozessorkern 110 davon, die Datenweitergabe
entweder direkt oder über
die Direktspeicherzugriffsschaltung 120 behandeln zu müssen.
-
Die 6 bis 9 veranschaulichen die Konstruktion eines
beispielhaften rekonfigurierbaren Hardware-Coprozessors. Dieser
besondere Coprozessor wird ein Mehrfachmultiplikations-Akkumulator genannt.
Die Multiplikations-Akkumulationsoperation, bei der die Summe mehrerer
Produkte gebildet wird, wird in der Signalverarbeitung umfassend
verwendet. Um diese Funktionen sind viele Filteralgorithmen gebaut.
-
6 veranschaulicht die allgemeine
Gesamtarchitektur des Mehrfachmultiplikations-Akkumulators 140.
In den Datenspeicher 145 und in den Koeffizientenspeicher 147 können 128-Bit-Wörter geschrieben
werden. Diese Schreiboperation wird durch den digitalen Signalprozessorkern 110 oder durch
die Direktspeicherzugriffsschaltung 120 gesteuert. Der
Adressgenerator 150 erzeugt die Adressen für das Zurückrufen
der von dem Coprozessor verwendeten Daten und Koeffizienten. Diese
Leseoperation bearbeitet Datenwörter
mit 128 Bits aus jedem Speicher.
-
Diese
zurückgerufenen
Datenwörter
werden der Eingabeformatierungseinrichtung 160 zugeführt. Die
Eingabeformatierungseinrichtung 160 führt allgemein verschiedene
Schiebe- und Ausrichtoperationen aus, um die 128-Bit-Eingabedatenwörter in
der für
die gewünschte
Berechnung erforderlichen Reihenfolge anzuordnen. Die Eingabeformatierungseinrichtung
gibt die 128-Bit (8-mal-l6-Bit) Data X, die 128-Bit (8-mal-l6-Bit)
Data Y und die 64-Bit (2-mal-32-Bit) Data Z aus.
-
Diese
drei Datenströme
werden dem Datenpfad 170 zugeführt. Der Datenpfad 170 ist
der Betriebsabschnitt des Coprozessors. Wie unten weiter beschrieben
wird, enthält
der Datenpfad 170 mehrere Hardware-Multiplizierer und -Addierer
die auf verschiedene Weise verbunden werden können, um eine Vielzahl von
Multiplikations-Akkumulations-Operationen auszuführen. Der Datenpfad 170 gibt
zwei Addiererdatenströme
aus. Jeder von diesen umfasst 4 32-Bit-Datenwörter.
-
Diese
zwei Datenströme
liefern die Eingaben in die Ausgabeformatierungseinrichtung 180.
Die Ausgabeformatierungseinrichtung 180 ordnet die beiden
Datenströme
in zwei 128-Bit-Datenwörter
um, um sie in die beiden Speicher zurückzuschreiben. Die Adressen
für diese
Schreiboperationen werden durch den Adressgenerator 150 berechnet.
Diese Umordnung kann für
die Ausrichtung an den Speicherwortgrenzen sorgen.
-
Die
Operationen des Coprozessors 140 stehen unter der Steuerung
der Steuereinheit 190. Die Steuereinheit 190 hat
die Befehle aus dem Befehlsspeicher 141 zurückgerufen
und liefert die entsprechende Steuerung in dem Coprozessor 140.
-
In 7 ist die Konstruktion der
Eingabeformatierungseinrichtung 160 veranschaulicht. Jeder der
zwei Datenströme
zu 128 Bits wird einem Eingang der Multiplexer 205 und 207 zugeführ. Jeder Multiplexer
wählt unabhängig eine
Eingabe zur Speicherung in seinem entsprechenden Register 215 und 217 aus.
Der Multiplexer 205 kann auswählen, ebenfalls die Inhalte
des Registers 215 und einen der beiden Datenströme wiederzuverwerten.
Der Multiplexer 207 kann lediglich einen der Eingabedatenströme auswählen. Die
Multiplexer 201 und 203 können die In halte des Registers 215 auswählen oder
können das
Wiederverwerten der Inhalte ihrer jeweiligen Register 211 und 213 auswählen. Der
Multiplexer 129 wählt
die Inhalte eines der beiden Register 211 oder 213 aus,
um sie den oberen Bits der Schiebeeinrichtung 221 zuzuführen. Die
unteren Bits werden vom Register 215 zugeführt. Die
Schiebeeinrichtung 221 verschiebt lediglich 128 Bits ihrer
256 Eingabebits und wählt
sie aus. Diese 128 Bits werden der Duplizierungs/Umlagerungs-Einheit 223 zugeführt. Die Duplizierungs/Umlagerungs-Einheit 223 kann
einen Abschnitt ihrer Eingabe zu vollen 128 Bits duplizieren oder
kann die Datenreihenfolge umordnen. Die auf diese Weise sortierten
Daten werden vorübergehend im
Register 225 gespeichert. Dies bildet die Eingabe der Data
X in den Datenpfad 170. Die Ausgabe des Multiplexers 207 wird
direkt dem Multiplexer 233 zugeführt sowie über das Register 217 geliefert.
Der Multiplexer 233 wählt
192 Bits aus den ihm gelieferten Bits aus. Die oberen 128 Bits bilden
die in den Datenpfad 170 eingegebenen Data Y. Diese Bits
können über den
Multiplexer 235 in Umlauf gebracht werden. Die unteren
64 Bits bilden die in den Datenpfad 170 eingegebenen Data
Z.
-
8 veranschaulicht in Form
eines Blockschaltbilds die Konstruktion des Datenpfads 170.
An die Doppelmultiplikations-Addierer 310, 320, 330 und 340 werden
verschiedene Segmente der von der Eingabeformatierungseinrichtung
gelieferten Eingaben Data X und Data Y geliefert. Wie gezeigt ist,
werden das erste und das zweite 16-Bit-Datenwort Data X[0:1] und
Data Y[0:1] mit dem Doppelmultiplikations-Addierer 310 gekoppelt,
werden das dritte und das vierte 16-Bit-Datenwort Data X[2:3] und
Data Y[2:3] mit dem Doppelmultiplikations-Addierer 320 gekoppelt, werden
das fünfte
und das sechste 16-Bit-Datenwort Data X[4:5] und Data Y[4:5] mit dem
Doppelmultiplikations-Addierer 330 gekoppelt und werden
das siebente und das achte 16-Bit-Datenwörter Data X[6:7] und Data Y[6:7]
mit dem Doppelmultiplikations-Addierer 340 gekoppelt. Jede
dieser Einheiten ist völlig
gleich, wobei lediglich der Doppelmultiplikations-Addierer 310 ausführlich beschrieben
wird. Die niedrigstwertigen 16 Bits der Data X und der Data Y liefern
die Eingaben in den Multiplizierer 311. Der Multiplizierer 311 empfängt das
Paar der 16-Bit-Eingaben und erzeugt ein 32-Bit-Produkt. Die ses
Produkt wird in einem Pipeline-Ausgaberegisterpaar gespeichert.
Die 32-Bit-Ausgabe
wird sowohl an die Vorzeichenerweiterungseinheit 313 als
auch an die 8-Bit-Linksschiebeeinrichtung 314 geliefert.
Die Vorzeichenerweiterungseinheit 313 wiederholt das Vorzeichenbit
des Produkts, d. h. das höchstwertige Bit,
auf 40 Bits. Die 8-Bit-Linksschiebeeinrichtung 314 verschiebt
das 32-Bit-Produkt nach links und füllt die leergewordenen niedrigstwertigen
Bits mit Nullen auf. Eine dieser zwei 40-Bit-Größen wird im Multiplexer 316 ausgewählt, um
sie an einen ersten Eingang des 40-Bit-Addierers 319 anzulegen.
Auf ähnliche Weise
werden an die jeweiligen Eingänge
des Multiplizierers 312 die zweithöchstwertigen 16 Bits der Data
X und der Data Y geliefert. Der Multiplizierer 312 empfängt die
zwei 16-Bit-Eingaben und erzeugt ein 32-Bit-Produkt. Das Produkt
wird in einem Pipeline-Registerpaar gespeichert. Die 8-Bit-Rechtsschiebeeinrichtung 315 verschiebt
das Produkt um 8 Bits nach rechts und führt die leergewordenen höchstwertigen
Bits mit Nullen auf. Der Multiplexer 317 wählt unter
drei Größen aus.
Die erste Größe ist eine
Verkettung der 16 Bits der Data X und der 16 Bits der Data Y an
der Eingabe. Diese Eingabe ermöglicht,
dass der Multiplizierer 312 umgangen wird. Falls die (wie
durch die Vorzeichenerweiterungseinrichtung 318 vorzeichenerweiterten)
32 Bits ausgewählt
werden, werden sie zu dem durch den Multiplizierer 311 erzeugten
Produkt addiert. Die zweite Größe ist das
durch den Multiplizierer 312 gelieferte Produkt. Die dritte
Größe ist die
verschobene Ausgabe der 8-Bit-Rechtsschiebeeinrichtung 315.
Die ausgewählte
Größe vom Multiplexer 317 wird
durch die Vorzeichenerweiterungseinheit 318 auf 40 Bits
vorzeichenerweitert. Die vorzeichenerweiterte 40-Bit-Größe ist die
zweite Eingabe in den 40-Bit-Addierer 319. Obgleich die
16-Bit-Eingabefaktoren lediglich 32 Bits erzeugen würden, werden
dem Addierer 319 40 Bits zugeführt, um einen dynamischen Bereich
für mehrere
Multiplikations-Akkumulationen zu schaffen.
-
Die
Ausgaben der Addierer 319 in jeder der Doppelmultiplizierer-Addierereinheiten 310, 320, 330 und 340 werden
als Ausgabe adder_st1_outp der ersten Addiererstufe geliefert. Lediglich
die 32 höchstwertigen
Addiererausgabebits werden mit der Ausgabe verbunden. Dies liefert
eine 4-mal-32-Bit- oder 128-Bit-Ausgabe.
-
Eine
zweite Stufe von 40-Bit-Addierern enthält die Addierer 353 und 355.
Die Addierer 353 addieren die Ausgaben der Doppelmultiplikations-Addierereinheiten 310 und 320.
Der Addierer 355 addiert die Ausgaben der Doppelmultiplizierer-Addierereinheiten 330 und 340.
In der zweiten Addiererstufe treten zwei weitere Datenpfade bei.
Die niedrigstwertigen 32 Bits der Eingabe Data Z werden vorübergehend
im Pipeline-Register 351 gespeichert. Diese 32-Bit-Größe wird
in der Vorzeichenerweiterungseinheit 352 auf 40 Bits vorzeichenerweitert.
Auf ähnliche Weise
werden die höchstwertigen
Bits der Eingabe Data Z vorübergehend
im Pipeline-Register 357 gespeichert. Diese Größe wird
durch die Vorzeichenerweiterungseinheit 358 auf 40 Bits
vorzeichenerweitert.
-
Die
dritte Addiererstufe enthält
die Addierer 361, 363, 367 und 368.
Der Addierer 361 ist 40 Bits breit. Er addiert die Ausgabe
des Addierers 353 und die vorzeichenerweiterten niedrigstwertigen
Bits von Data Z. Die 32 höchstwertigen
Bits dieser Summe werden als Teil der Ausgabe adder_st3_outp der
dritten Stufe geliefert. Ähnlich
ist der Addierer 363 40 Bits breit und addiert die Ausgabe
des Addierers 355 und die vorzeichenerweiterten höchstwertigen
Bits von Data Z. Die 32 höchstwertigen
Bits dieser Summe werden als Teil der Ausgabe adder_st3_outp der dritten
Stufe geliefert. Die Verbindungen zu den Addierern 367 und 368 sind
wesentlich komplizierter. Wie durch den Multiplexer 364 ausgewählt worden ist,
ist die erste Eingabe in den Addierer 367 entweder die
Ausgabe des Addierers 353 der zweite Stufe oder eine in
Umlauf gebrachte Ausgabe. Der Multiplexer 371 wählt aus
den 8 Pipeline-Registern eine Größe aus,
um sie in Umlauf zu bringen. Die zweite Eingabe in den Addierer 367 wird
durch den Multiplexer 365 ausgewählt. Dies ist entweder die
Eingabe der niedrigstwertigen Data Z, wie sie durch die Vorzeichenerweiterungseinheit 353 vorzeichenerweitert sind,
die direkte Ausgabe des Addierers 368, die Ausgabe des
Addierers 355 oder eine feste Rundungsgröße rnd_add.
Die Addition der festen Rundungsgröße rnd_add veranlasst, dass
der Addierer die Größe an dem
anderen Eingang rundet. Die Ausgabe des Addierers 367 liefert
die Eingabe in die veränderliche
Rechtsschiebeeinrichtung 375. Die veränderliche Rechtsschiebeeinrichtung 375 verschiebt die
Summe um einen ausgewählten
Betrag von 0 bis 15 Bits nach rechts.
-
Die
32 höchstwertigen
Bits dieser Ausgabe bilden einen Teil der Ausgabe adder_st3_outp
der dritten Stufe. Die erste Eingabe in den Addierer 368 ist
die Ausgabe des Addierers 355. Die zweite Eingabe in den
Addierer 368 wird durch den Multiplexer 366 ausgewählt. Der
Multiplexer 366 wählt
entweder die Ausgabe des Addierers 353, die Eingabe der höchstwertigen
Data Z, wie sie durch die Vorzeichenerweiterungseinheit 358 vorzeichenerweitert
worden sind, die Umlaufeingabe oder die feste Rundungsgröße rnd_add
aus. Der Multiplexer 373 wählt aus den 8 Pipeline-Registern
am Ausgang des Addierers 368 die Umlaufgröße aus.
Die Ausgabe des Addierers 368 liefert die Eingabe in die
veränderliche Rechtsschiebeeinrichtung 377.
Die veränderliche Rechtsschiebeeinrichtung 377 verschiebt
die Summe um einen ausgewählten
Betrag von 0 bis 15 Bits nach rechts. Die 32 höchstwertigen Bits ihrer Ausgabe
bilden einen weiteren Teil der Ausgabe adder_st3_outp der dritten
Stufe.
-
9 veranschaulicht die Konstruktion
der in 6 veranschaulichten
Ausgabeformatierungseinrichtung.
-
Die 10 bis 13 veranschaulichen verschiedene Arten,
in der der Mehrfachmultiplikations-Akkumulations-Coprozessor 160 konfiguriert sein
kann. Der Datenfluss in jedem dieser Beispiele kann durch richtige
Auswahl der Multiplexer im Datenpfad 170 erreicht werden.
Die folgende Beschreibung notiert die entsprechenden Multiplexerauswahlen,
wenn sie relevant sind, um den gewünschten Datenfluss zu erreichen.
-
10 veranschaulicht den Datenfluss
in einem reellen Filter mit endlichem Impuls (FIR). An die jeweiligen
Multiplizierer 311, 312, 321, 322, 331, 3332, 341 und 342 werden
die Daten D0 bis D7 und die Koeffizienten C0 bis C7 geliefert. In
diesem Fall wählen
jeweils Multiplexer, die dem Multiplexer 317 in der Doppelmultiplikations-Additionseinheit 310 entsprechen,
das Produkt der jeweiligen Multiplizierer 312, 322, 332 und 342 aus,
wobei Paare der Produkte in den Addierern 319, 329, 339 und 349 summiert werden.
Paare dieser Summen werden weiter in den Addierern 353 und 355 summiert.
Die durch die Addierer 353 und 355 gebildeten
Summen werden im Addierer 368 addiert. In diesem Fall wählt der Multiplexer 366 die
durch den Addierer 353 erzeugte Summe für den zweiten Eingang in den
Addierer 368 aus. Der Addierer 367 führt die
Akkumulationsoperation aus. Der Multiplexer 364 wählt die
Ausgabe des Multiplexers 371, der ein Pipeline-Register
für den
Umlauf als die erste Eingabe auswählt, als die erste Eingabe
in den Addierer 363 aus. Der Multiplexer 365 wählt die
Ausgabe des Addierers 368 und die zweite Eingabe in den
Addierer 363 aus. Der Addierer 367 erzeugt die
Filterausgabe. Es wird angemerkt, dass dieser Datenfluss die Summe
der 8 Produkte erzeugt, die mit den früher summierten Produkten gebildet
werden. Diese Operation ist allgemein als Multiplikations-Akkumulation
bekannt und wird bei Filterfunktionen umfassend verwendet. Die Konfiguration des
Datenpfads 170, wie sie in 7 veranschaulicht ist,
ermöglicht
die Berechnung der akkumulierten Summe von 8 Produkten. Dies hat
den Durchsatz in diesem Datenfluss gegenüber der typischen Einzelprodukt-Akkumulation,
die von dem digitalen Signalprozessorkern 110 geliefert
wird, stark erhöht.
-
11 veranschaulicht den Datenfluss
eines komplexen FIR-Filters. Dieser Datenfluss ist ähnlich dem
des in 7 veranschaulichten
reellen FIR-Filters. Der Datenfluss aus 8 bearbeitet gleichzeitig den Real- und
den Imaginärteil
der Berechnung. Die Daten und Koeffizienten werden den jeweiligen
Multiplizierern 311, 312, 321, 322, 331, 3332, 341 und 342 zugeführt. Die
Multiplexer, die dem Multiplexer 317 in der Doppelmultiplikations-Additionseinheit 310 entsprechen,
wählen
jeweils das Produkt der jeweiligen Multiplizierer 312, 322, 332 und 342 aus,
wobei Paare der Produkte in den Addierern 319, 329, 339 und 349 summiert
wird. Paare dieser Summen werden in den Addieren 353 und 355 weiter
summiert. Der reelle und der komplexe Teil werden durch die Addierer 367 und 368 getrennt
behandelt. Der Multiplexer 365 wählt die Summe des Addierers 353 für die zweite
Eingabe in den Addierer 367 aus. Der Multiplexer 364 wählt die
Ausgabe des Multiplexers 371, der ein Pipeline-Register
für den Umlauf
auswählt,
als die erste Eingabe in den Addierer 363 aus. Der Addierer 368 empfängt die
Summe des Addierers 355 als seine erste Eingabe. Der Multiplexer 366 wählt die
Umlaufausgabe des Multiplexers 373 für die zweite Eingabe in den
Addierer 368 aus. Somit erzeugt das Paar der Addierer 367 und 368 den
Real- und den Imaginärteil
der Multiplikations-Akkumulationsoperation.
-
12 veranschaulicht den Datenfluss
in einer Koeffizientenaktualisierungsoperation. Die Fehlerterme
E0 bis E3 werden in den Multiplizierern 311, 321, 331 und 341 mit
den entsprechenden Gewichtungstermen W0 bis W3 multipliziert. Die
zu aktualisierenden momentanen Koeffizienten C0 bis C3 werden so,
wie sie durch die Multiplexer 317, 327, 337 und 347 ausgewählt werden,
direkt in die Addierer 319, 329, 339 und 349 eingegeben.
Die jeweiligen Produkte werden zu den momentanen Werten in den Addierern 319, 329, 339 und 349 addiert.
In diesem Fall wird die Ausgabe durch die Addierer 319, 329, 339 und 349 über die
Ausgabe adder_st1_outp der Addiererstufe 1 erzeugt.
-
13 veranschaulicht den Datenfluss
in einer schnellen Fourier-Transformationsoperation (FFT-Operation).
Die FFT-Operation beginnt mit einer 16-Bit-mal-32-Bit-Multiplikationsoperation.
Diese wird wie folgt erreicht. Jeder Doppelmultiplikations-Addierer 310, 320, 330 und 340 empfängt an einem
Eingang jedes der gepaarten Multiplizierer 311 und 312, 321 und 322, 331 und 332 und 341 und 341 eine
jeweilige 16-Bit-Größe A0 bis
A3. Die Multiplizierer 311, 321, 331 und 341 empfangen
die 16 höchstwertigen
Bits der 32-Bit-Größe B0H bis
B3H. Die Multiplizierer 312, 322, 332 und 342 empfangen
die 16 niedrigstwertigen Bits der 32-Bit-Größe B0L bis B3L. Die Schiebeeinrichtungen 314, 315, 324, 325, 334, 335, 344 und 345 werden
verwendet, um die Produkte auszurichten. Die Multiplexer 316, 326, 336 und 346 wählen die
linksverschobene Größe von den
jeweiligen 8-Bit-Linksschiebeeinrichtungen 314, 324, 334 und 344 für die erste
Eingabe in die jeweiligen Addierer 319, 329, 339 und 349 aus.
Die Multiplexer 317, 327, 337 und 347 wählen die
rechtsverschobene Größe von den
jeweiligen 8-Bit-Rechtsschiebeeinrichtungen 315, 325, 335 und 345 als
die zweiten Eingaben in die jeweiligen Addierer 319, 329, 339 und 349 aus.
Diese zwei entgegengesetzt gerichteten 8-Bit-Verschiebungen liefern
eine effektive 16-Bit-Verschiebung zum Ausrichten der Teilprodukte
für eine
16-Bit-mal-32-Bit-Multiplikation. In den Addierern 353 und 355 werden
Paare dieser Summen weiter summiert. Der Ad dierer 361 addiert
die Eingabe Data Z0 mit der Ausgabe vom Addierer 353. Der Multiplexer 364 wählt die
Summe des Addierers 353 als die erste Eingabe in den Addierer 367 aus.
Der Multiplexer 365 wählt
diese Eingabe Data Z0 als die zweite Eingabe in den Addierer 367 aus.
Der Addierer 368 empfängt
die Summe des Addierers 355 als seine erste Eingabe. Der
Multiplexer 366 wählt
die Eingabe Data Z1 als die zweite Eingabe in den Addierer 366 aus.
Der Addierer 363 addiert die Summe des Addierers 355 und
die Eingabe Data Z1. Die Ausgabe der FFT-Operation wird durch die Summenausgaben
der Addierer 361, 367, 368 und 363 geliefert.
-
Die
unten stehende Liste ist eine Teilliste einiger der Befehle, die
durch den Datenpfad 170 der in den 3 bis 6 veranschaulichten
Mehrfachmultiplikations-Akkumulationseinheit 140 ausgeführt werden
können.
vector_add_16b(len,
pdata, pcoeff, pout)
vector_add_32b(len, pdata, pcoeff, pout)
vector_mpy_16b(len,
pdata, pcoeff, pout)
vector_mpy_1632b(len, pdata, pcoeff pout)
vector_mpy_32b(len,
pdata, pcoeff, pout)
scalar_vector_add-16b(len, pdata, pcoeff,
pout)
scalar_vector_add_32b(len, pdata, pcoeff, pout)
scalar_vector_mpy_16b(len,
pdata, pcoeff pout)
scalar_vector_mpy_1632b(len, pdata, pcoeff
pout)
scalar_vector_mpy_32b(len, pdata, pcoeff pout)
-
Bei
diesen Operationen gibt der Operationsname die Datengröße ein.
Das Parameterfeld "len" gibt die Länge der
Funktion an. Das Parameterfeld "pdata" ist ein Zeiger auf
die Anfangsspeicheradresse, die die Eingabedaten enthält. Das
Parameterfeld "pcoeff" ist ein Zeiger auf
die Anfangsspeicheradresse, die die Koeffizienten für das Filter
enthält.
Das Parameterfeld "pout" ist ein Zeiger auf
die Anfangsspeicheradresse zum Empfangen der Ausgabe. Wie zuvor
beschrieben wurde, zeigen diese Zeiger vorzugsweise auf die jeweiligen
Plätze
im Datenspeicher 145 und im Koeffizientenspeicher 147 oder
im Einheitsspeicher 149.
FFT_real(fft_size, pdata,
pcoeff, pout)
FFT_complex(fft_size, pdata, pcoeff, pout)
-
Wie
zuvor in Verbindung mit 10 beschrieben
wurde, enthalten die schnellen Fourier-Transformationsoperationen
vorzugsweise alle 32-Bit-Daten und 16-Bit-Koeffizienten. Das Parameterfeld
fft_size definiert die Größe der Funktion.
Die weiteren aufgeführten
Parameterfelder sind wie oben beschrieben.
FIR_real(us, ds,
len, blocksize, pdata, pcoeff, pout)
FIR_complex_real(us, ds,
len, blocksize, pdata, pcoeff, pout)
FIR_complex_real_sum(us,
ds, len, blocksize, pdata, pcoeff, pout)
FIR_complex(us, ds,
len, blocksize, pdata, pcoeff, pout)
-
Die
Operationen der Filter mit endlicher Impulsantwort unterscheiden
sich in Bezug auf den Typ der Daten und Koeffizienten. Die Operation
FIR_real verwendet reelle Daten und reelle Koeffizienten. Die Operation
FIR_complex_real verwendet komplexe Daten und reelle Koeffizienten.
Die Operation FIR_complex_real_sum summiert die komplexen und die
reellen Teile unter Verwendung komplexer Daten und reeller Koeffizienten
getrennt. Die Operation FIR_complex verwendet sowohl komplexe Daten als
auch komplexe Koeffizienten. Das Parameterfeld us gibt das Überabtastungsverhältnis an.
Das Parameterfeld ds gibt das Unterabtastungsverhältnis an. Das
Parameterfeld blocksize gibt die Größe der verwendeten Operationsblöcke an.
Die weiteren Parameterfelder sind wie zuvor beschrieben.
-
Die
Parameter aller dieser Befehle könnten entweder
Sofortwerte oder für
die Daten, Koeffizienten und Ausgabeplätze 16-Bit-Adresszeiger auf
den Coprozessorspeicher sein. Diese Auswahl bedeutet, dass die Befehle
für das
Filter mit endlichem Impuls, die am längsten sind, etwa fünf 16-Bit-Befehlswörter erfordern.
Dies ist eine unbedeutende Menge an Busverkehr. Alternativ könnten die
Para meterfelder indirekt sein, d. h. für jeden Parameter ein Register aus
einer beschränkten
Menge von Registern identifizieren. Für jeden Parameter könnte es
einen Satz von 8 Registern geben, so dass in dem Befehlswort lediglich
jeweils 3 Bits erforderlich sind. Da lediglich eine beschränkte Anzahl
besonderer Filtereinstellungen erforderlich sind, ist dies möglich.