DE102015209486A1 - FIFO Speicher mit im Betrieb veränderbarem Speicherbereich - Google Patents

FIFO Speicher mit im Betrieb veränderbarem Speicherbereich Download PDF

Info

Publication number
DE102015209486A1
DE102015209486A1 DE102015209486.3A DE102015209486A DE102015209486A1 DE 102015209486 A1 DE102015209486 A1 DE 102015209486A1 DE 102015209486 A DE102015209486 A DE 102015209486A DE 102015209486 A1 DE102015209486 A1 DE 102015209486A1
Authority
DE
Germany
Prior art keywords
new
pointer
base
memory
fifo memory
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
DE102015209486.3A
Other languages
English (en)
Inventor
Timo Giesselmann
Konstantin Buck
Rainer Dorsch
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.)
Robert Bosch GmbH
Original Assignee
Robert Bosch GmbH
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 Robert Bosch GmbH filed Critical Robert Bosch GmbH
Priority to DE102015209486.3A priority Critical patent/DE102015209486A1/de
Priority to US15/157,989 priority patent/US9996318B2/en
Priority to CN201610341074.0A priority patent/CN106168927B/zh
Publication of DE102015209486A1 publication Critical patent/DE102015209486A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0615Address space extension
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/065Partitioned buffers, e.g. allowing multiple independent queues, bidirectional FIFO's
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/08Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations, the intermediate ones not being accessible for either enqueue or dequeue operations, e.g. using a shift register
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • G06F5/10Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
    • G06F5/12Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations
    • G06F5/14Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations for overflow or underflow handling, e.g. full or empty flags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2205/00Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F2205/06Indexing scheme relating to groups G06F5/06 - G06F5/16
    • G06F2205/063Dynamically variable buffer size
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2205/00Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F2205/06Indexing scheme relating to groups G06F5/06 - G06F5/16
    • G06F2205/066User-programmable number or size of buffers, i.e. number of separate buffers or their size can be allocated freely
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2205/00Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F2205/12Indexing scheme relating to groups G06F5/12 - G06F5/14
    • G06F2205/126Monitoring of intermediate fill level, i.e. with additional means for monitoring the fill level, e.g. half full flag, almost empty flag

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Transfer Systems (AREA)
  • Communication Control (AREA)

Abstract

Die Erfindung geht aus von einem FIFO Speicher mit veränderbarem Speicherbereich, wobei der FIFO Speicher als linearer Speicher ausgestaltet ist, wobei der FIFO Speicher als Ringbuffer konfiguriert ist, wobei der FIFO Speicher eine Zustandsmaschine aufweist, welche einen unteren Zeiger (base), einen oberen Zeiger (top), einen Schreibzeiger (wr) und einen Lesezeiger (rd) beinhaltet, wobei der FIFO Speicher einen aktuell zugewiesenen Speicherbereich enthält, dessen untere Grenze durch den unteren Zeiger (base) und dessen obere Grenze durch den oberen Zeiger (top) definiert ist, wobei der Schreibzeiger (wr) die aktuelle Schreibadresse und der Lesezeiger (rd) die aktuelle Leseadresse definiert. Der Kern der Erfindung besteht darin, dass die Zustandsmaschine einen neuen unteren Wert (new_base) und einen neuen oberen Wert (new-top) zur Definition eines zukünftig zugewiesenen Speicherbereichs beinhaltet, dessen untere Grenze durch den neuen unteren Wert (new_base) und dessen obere Grenze durch den neuen oberen Wert (new_top) definiert ist, und die Zustandsmaschine derart ausgestaltet ist, dass in einem Lesebetrieb und/oder einem Schreibbetrieb des FIFO Speichers durch Verschieben des unteren Zeigers (base) auf den neuen unteren Wert (new_base) und/oder durch Verschieben des oberen Zeigers (top) auf den neuen oberen Wert (new_top) der zugewiesene Speicherbereich des FIFO Speichers veränderbar ist.

Description

  • Stand der Technik
  • Die Erfindung geht aus von einem FIFO Speicher mit veränderbarem Speicherbereich, wobei der FIFO Speicher als linearer Speicher ausgestaltet ist, wobei der FIFO Speicher als Ringbuffer konfiguriert ist, wobei der FIFO Speicher eine Zustandsmaschine aufweist, welche einen unteren Zeiger base, einen oberen Zeiger top, einen Schreibzeiger wr und einen Lesezeiger rd beinhaltet, wobei der FIFO Speicher einen aktuell zugewiesenen Speicherbereich enthält, dessen untere Grenze durch den unteren Zeiger base und dessen obere Grenze durch den oberen Zeiger top definiert ist, wobei der Schreibzeiger wr die aktuelle Schreibadresse und der Lesezeiger rd die aktuelle Leseadresse definiert.
  • Ein FIFO wird üblicherweise als Ringbuffer mit einer festen Größe realisiert und kann eine bestimmte Anzahl an Datenelementen enthalten:
    http://en.wikipedia.org/wiki/Circular_buffer
  • Wenn mehr Speicher benötigt wird, als für den Ringbuffer konfiguriert ist, gibt es zwei Methoden, dies zu behandeln:
    • 1. Neue Datenelement können nicht in den Ringbuffer aufgenommen werden.
    • 2. Neue Datenelemente werden in den Ringbuffer geschrieben, nach dem älteste Elemente aus dem Buffer gelöscht werden.
  • Dabei verliert man entweder neue Daten (1.) oder Datenhistorie (2.) Wenn beide Methoden nicht akzeptabel sind, muss der Buffer vergrößert werden.
  • Die meisten Verfahren zum Verändern von FIFO-Größen beziehen sich auf Softwareimplementierungen, in denen Buffer im Speicher neu allokiert werden, bzw. der Bufferinhalt von einem kleinen in einen größeren Buffer umkopiert werden. Hierbei werden Mechanismen verwendet, die in einer HW-Implementierung nicht zur Verfügung stehen, bzw. ineffizient und aufwendig sind.
  • Eine andere Lösung im Stand der Technik verwendet im Speicher einen Standardbereich und einen Erweiterungsbereich. Wenn das FIFO vergrößert werden soll, werden Daten erst in den Erweiterungsbereich geschrieben, um dann beim nächsten Durchlauf diesen Bereich in den Standardbereich mit zu integrieren.
    http://blog.labix.org/2010/12/23/efficient-algorithm-for-expanding-circular-buffers
  • Aufgabe der Erfindung
  • Die Erfindung soll ermöglichen,
    • 1. dass ein FIFO im laufenden Betrieb vergrößert oder verkleinert werden kann.
    • 2. Dabei soll der bestehende Speicherbereich nach unten oder oben erweitert oder verkleinert werden.
    • 3. Datenelemente, die im Speicher enthalten sind, sollen nicht verloren gehen und sollen weiterhin in der gleichen Reihenfolge ein/ausgelesen werden können.
  • Vorteile der Erfindung
  • Die Erfindung geht aus von einem FIFO Speicher mit veränderbarem Speicherbereich, wobei der FIFO Speicher als linearer Speicher ausgestaltet ist, wobei der FIFO Speicher als Ringbuffer konfiguriert ist, wobei der FIFO Speicher eine Zustandsmaschine aufweist, welche einen unteren Zeiger base, einen oberen Zeiger top, einen Schreibzeiger wr und einen Lesezeiger rd beinhaltet, wobei der FIFO Speicher einen aktuell zugewiesenen Speicherbereich enthält, dessen untere Grenze durch den unteren Zeiger base und dessen obere Grenze durch den oberen Zeiger top definiert ist, wobei der Schreibzeiger wr die aktuelle Schreibadresse und der Lesezeiger rd die aktuelle Leseadresse definiert. Der Kern der Erfindung besteht darin, dass die Zustandsmaschine Werte new_base und new_top zur Definition eines zukünftig zugewiesenen Speicherbereichs beinhaltet, dessen untere Grenze durch den Wert new_base und dessen obere Grenze durch den Wert new_top definiert ist, und die Zustandsmaschine derart ausgestaltet ist, dass in einem Lesebetrieb und/oder einem Schreibbetrieb des FIFO Speichers durch Verschieben des unteren Zeigers base auf den Wert new_base und/oder durch Verschieben des oberen Zeigers top auf den Wert new_top der zugewiesene Speicherbereich des FIFO Speichers veränderbar ist.
  • Erfindungsgemäß wird also am oberen und unteren Ende des Speicherbereichs jeweils ein Zeiger (base, top) und einen Schattenzeiger (neuer Wert: new_base, new_top) vorgesehen, mit denen der neue geänderte Speicherbereich erst definiert und zu einem geeigneten Zeitpunkt fixiert wird.
  • Eine vorteilhafte Ausgestaltung der Erfindung sieht vor, dass der FIFO Speicher einen freien Bereich aufweist, in dem keine ungelesenen Daten vorliegen, und die Zustandsmaschine derart ausgestaltet ist, dass für das Setzen des unteren Zeigers base und/oder des oberen Zeigers top auf die Werte new_base und/oder new_top ein Zeitpunkt ausgewählt wird, an dem sowohl der alte als auch der neue Wert des Zeigers im freien Bereich liegen.
  • Eine vorteilhafte Ausgestaltung der Erfindung sieht vor, dadurch gekennzeichnet, dass die Zustandsmaschine derart ausgestaltet ist, dass das Verschieben des oberen Zeigers top auf den Wert new_top erfolgt, wenn der Lesezeiger rd = base ist.
  • Eine vorteilhafte Ausgestaltung der Erfindung sieht vor, dass die Zustandsmaschine derart ausgestaltet ist, dass das Verschieben des unteren Zeigers base auf den Wert new_base erfolgt, wenn der Schreibzeiger wr = top ist.
  • Vorteile
    • 1. Realisierung in HW mit beschränkten Mittel (insb. Speicher) möglich
    • 2. Betrieb des FIFOs kann aufrecht erhalten werden, während die Größenveränderung stattfindet
    • 3. Echtzeitanforderungen bzgl. Schreiben und Lesen können eingehalten werden, da das FIFO nicht für evtl. Kopiervorgänge beim Verändern der Größe blockiert werden muss.
  • Besonders vorteilhaft lässt sich die Erfindung im Kontext eines Smartphones mit Android-Betriebssystem, und dort für das sog. Batching der Sensordaten einsetzen. Es kommen dort mehrere FIFOs für die verschiedenen Sensoren zum Einsatz. Die Erfindung ermöglicht, den Speicher für jeden dieser FIFOs im laufenden Betrieb zu vergrößern oder zu verkleinern, bzw. Speicher für benötigte oder nicht mehr benötigte FIFOs bereitzustellen bzw. in andere FIFOs zu reintegrieren.
  • Im Unterschied zum oben beschriebenen Stand der Technik ist die vorliegende Erfindung effizienter, da sie das Pointer-Management für den Erweiterungsbereich vermeidet und ein Vergrößern im Vorfeld (d.h. vor dem Volllaufen des Speichers) erlaubt, bevor der Standardbereich ausgeschöpft wurde.
  • Eine wichtige Forderung von Android, dass beim Modus-Umschalten im Betrieb alle Sensoren ihre Daten weiterhin kontinuierlich liefern sollen, wird eingehalten, da durch das Verändern der Größe keine Daten verloren gehen.
  • Zeichnung
  • 1 zeigt einen FIFO Speicher mit einem zugewiesenen Speicherbereich, mit einem zusammenhängenden belegten Bereich und einem geteilten freien Bereich.
  • 2 zeigt einen FIFO Speicher mit einem zugewiesenen Speicherbereich, mit einem geteilten belegten Bereich und einem zusammenhängenden freien Bereich.
  • 3 zeigt einen erfindungsgemäßen FIFO Speicher im Betrieb, wobei der Lesezeiger rd = base ist und wobei der obere Zeiger top verkleinert oder vergrößert werden kann.
  • 4 zeigt einen erfindungsgemäßen FIFO Speicher im Betrieb, wobei der Schreibzeiger wr = top ist und wobei der untere Zeiger base verkleinert oder vergrößert werden kann.
  • Ausführungsbeispiele
  • Wie in der klassischen Implementierung eines FIFOs wird der Ringbuffer fest in einem linearen Speicher allokiert und seine Grenzen durch zwei Adresszeiger base und top definiert. Weiterhin gibt es einen Adresszeiger wr für die Position, ab der neue Datenelemente eingefügt werden und einen Adresszeiger rd für die Position, ab der Datenelemente ausgelesen werden.
    • • Bei der Initialisierung werden 1. base auf das untere Ende des Speicherbereichs gesetzt, und 2. top auf das obere Ende des Speicherbereichs gesetzt. 3. Der Schreibzeiger wr und der Lesezeiger rd werden auf base gesetzt
    • • Neue Datenelemente werden bei der aktuellen Adresse von wr in den Speicher geschrieben. 1. danach wird wr inkrementiert 2. wenn wr den Wert von top erreicht, wird wr auf base gesetzt (wrap-around)
    • • Datenelemente werden von der Adresse rd ausgelesen. 1. Danach wird rd inkrementiert 2. Wenn rd den Wert top erreicht, wird rd auf base gesetzt (wrap-around)
  • 1 zeigt einen FIFO Speicher mit einem zugewiesenen Speicherbereich, mit einem zusammenhängenden belegten Bereich und einem geteilten freien Bereich.
  • 2 zeigt einen FIFO Speicher mit einem zugewiesenen Speicherbereich, mit einem geteilten belegten Bereich und einem zusammenhängenden freien Bereich.
  • Das FIFO ist dadurch gekennzeichnet, dass es in dem Speicherbereich einen Teil gibt, der aktuelle Daten enthält und somit belegt ist (in den Figuren schraffiert gekennzeichnet) und einem anderen Teil, der frei ist (nicht schraffiert). Abhängig von der aktuellen Position der Zeiger wr und rd können folgende Fälle auftreten:
    • 1. wr > rd: der belegte Bereich liegt zusammenhängend im Speicherbereich (1)
    • 2. wr < rd: der belegte Bereich ist in 2 Teile aufgeteilt: einer am unteren Ende und einer am oberen Ende des Speicherbereichs. (2)
    • 3. wr = rd: in diesem Sonderfall ist der FIFO leer er kann für die weitere Betrachtung wie der Fall wr > rd behandelt werden.
  • Um die Größenveränderung oder Lageveränderung des FIFOs zu ermöglichen, werden erfindungsgemäß die Adresszeiger new_base und new_top eingeführt, welche die Zielgröße oder auch die neue Lage des FIFOs nach der Veränderung enthalten. (siehe 1)
  • Ein Verändern der Speicherbereichsgrenzen base und top ist nur möglich, wenn die Position der neuen Zeiger new_base und new_top außerhalb des belegten Bereiches liegen. Während Daten in das FIFO geschrieben und aus dem FIFO gelesen werden, verschiebt sich der freie Bereich in entgegengesetzter Richtung zum belegten Bereich. Der Algorithmus basiert darauf, dass für das Verändern der Zeiger base und top ein Zeitpunkt ausgewählt wird, an dem sowohl der alte als auch der neue Wert des Zeigers im freien Bereich liegen.
  • Ein Vergrößern des FIFOs ist generell möglich. Ein Verkleinern ist allerdings nur möglich, wenn der Füllstand des FIFOs kleiner oder gleich der neuen Größe des FIFOs ist. Ist der Füllstand größer, so ist ein Verkleinern des FIFOs zu diesem Zeitpunkt nicht möglich. Für die Behandlung dieses Falles werden in Variante 3 mögliche Ausführungen beschrieben.
  • Verändern von top und/oder base:
    • 1. Die Anforderung der Veränderung von top wird durch Setzen von new_top auf einen Wert ungleich top mitgeteilt. Alternativ oder gleichzeitig wird die Veränderung von base durch setzen von new_base auf einen Wert ungleich base mitgeteilt.
    • 2. Das Schreiben und Lesen von Datenelemente setzt sich fort wie bisher. Bei jedem Update von rd oder wr wird geprüft: • WENN (rd == base) (siehe Zeichnung 3) • WENN (new_top > wr): top wird auf den Wert new_top gesetzt • SONST: verändern von Top derzeit nicht möglich • WENN (wr = top) (siehe Zeichnung 4) • WENN (new_base < rd): base wird auf den Wert von new_base gesetzt • SONST: Verändern von base derzeit nicht möglich
    • 3. Die Vergrößerung ist abgeschlossen, wenn top == new_top und base == new_base
  • 3 zeigt einen erfindungsgemäßen FIFO Speicher im Betrieb, wobei der Lesezeiger rd = base ist und wobei der obere Zeiger top verkleinert oder vergrößert werden kann.
  • Durch die Wahl des Zeitpunktes für das Verändern von top (wenn rd den Wert base erreicht) ist sichergestellt, dass der obere Bereich des FIFOs ungenutzt ist und der neue Wert von top nicht die Kontinuität des FIFO-Inhaltes verletzt.
  • New_top1 und new_top2 zeigen die Fälle des Vergrößerns und Verkleinerns von top.
  • Analog dazu wird durch die Wahl des Zeitpunktes für das Verändern von base sichergestellt, dass der untere Bereich des FIFOs ungenutzt ist. 4 zeigt hierzu einen erfindungsgemäßen FIFO Speicher im Betrieb, wobei der Schreibzeiger wr = top ist und wobei der untere Zeiger base verkleinert oder vergrößert werden kann.
  • Variante 1 (Alternative zur Basisvariante)
  • Statt mit inkrementierenden Zeigern wr und rd kann das FIFO alternativ auch mit dekrementierenden Zeigern implementiert werden. Dies ist allgemeingültig für jedes FIFO und gilt auch für dieses FIFO, allerdings müssen die Zeitpunkte und die Reihenfolge der Zeigerupdates entsprechend angepasst werden.
  • Variante 2 (Verbesserung der Basisvariante)
  • Gegenüber der einfachen Regelung (update der Zeiger beim nächsten Wraparound) gibt es auch die Möglichkeit, das Update der Zeiger sofort durchzuführen, wenn bestimmt Bedingungen der Lese- und Schreibzeiger erfüllt sind. Insbesondere ist hier relevant, ob der Zeiger wr unterhalb oder oberhalb von rd steht, d.h. ob über den Wraparound-Bereich hinweg gültige Daten gespeichert sind.
    • 1. Die Anforderung der Veränderung von top wird durch Setzen von new_top auf einen Wert ungleich top mitgeteilt. Alternativ oder gleichzeitig wird die Veränderung von base durch setzen von new_base auf einen Wert ungleich base mitgeteilt.
    • 2. WENN(wr > rd) • WENN (new_top > wr): top wird auf den Wert von new_top gesetzt • WENN (new_base < rd): base wird auf den Wert von new_base gesetzt SONST: (Rückfall auf die Basisvariante) Das Schreiben und Lesen von Datenelemente setzt sich fort wie bisher. Bei jedem Update von rd oder wr wird geprüft: • WENN (rd == base) • WENN (new_top > wr): top wird auf den Wert new_top gesetzt • SONST: verändern von top derzeit nicht möglich • WENN (wr = top) • WENN (new_base < rd): base wird auf den Wert von new_base gesetzt • SONST: Verändern von base derzeit nicht möglich
    • 3. Die Vergrößerung ist abgeschlossen, wenn top == new_top und base == new_base
  • Der Vorteil dieser Variante besteht darin, dass ein Verändern der Größe bei Erfüllung der Bedingungen schneller abgeschlossen werden kann.
  • Variante 3 (Erweiterung der Basisvariante oder der Varianten 1-2)
  • Oben wurde beschrieben, dass ein Verkleinern des FIFO nur möglich ist, wenn der Füllstand des FIFOs kleiner oder gleich der neuen Größe des FIFOs ist. Ist dies nicht der Fall, so gibt es die folgenden Möglichkeiten:
    • 1. Statt auf eine erfolgreiche Verkleinerung zu warten, die eventuell nie auftritt, kann der Algorithmus alternativ so gestaltet werden, dass beim nächsten Umlauf der Zeiger das FIFO weniger als gefordert verkleinert wird und die erreichte Verkleinerung zurückgemeldet wird.
    • 2. Es werden so viele alte Werte im FIFO verworfen, bis ein Verkleinern möglich ist
    • 3. Es werden so lange keine neuen Werte in das FIFO geschrieben, bis der Füllstand klein genug ist, um ein Verkleinern zu ermöglichen (Verwerfen von neuen Werten)
    • 4. Die Anforderung der Verkleinerung bleibt bestehen, bis der Füllstand des FIFOs klein genug ist
  • Bezugszeichenliste
    • base
      unterer Zeiger
      top
      oberer Zeiger
      wr
      Schreibzeiger
      rd
      Lesezeiger
      new_base
      neuer unterer Wert
      new_top
      neuer oberer Wert
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Nicht-Patentliteratur
    • http://en.wikipedia.org/wiki/Circular_buffer [0002]
    • http://blog.labix.org/2010/12/23/efficient-algorithm-for-expanding-circular-buffers [0006]

Claims (4)

  1. FIFO Speicher mit veränderbarem Speicherbereich, – wobei der FIFO Speicher als linearer Speicher ausgestaltet ist, – wobei der FIFO Speicher als Ringbuffer konfiguriert ist, – wobei der FIFO Speicher eine Zustandsmaschine aufweist, welche einen unteren Zeiger (base), einen oberen Zeiger (top), einen Schreibzeiger (wr) und einen Lesezeiger (rd) beinhaltet, – wobei der FIFO Speicher einen aktuell zugewiesenen Speicherbereich enthält, dessen untere Grenze durch den unteren Zeiger (base) und dessen obere Grenze durch den oberen Zeiger (top) definiert ist, – wobei der Schreibzeiger (wr) die aktuelle Schreibadresse und der Lesezeiger (rd) die aktuelle Leseadresse definiert, dadurch gekennzeichnet, dass – die Zustandsmaschine einen neuen unteren Wert (new_base) und einen neuen oberen Wert (new-top) zur Definition eines zukünftig zugewiesenen Speicherbereichs beinhaltet, dessen untere Grenze durch den neuen unteren Wert (new_base) und dessen obere Grenze durch den neuen oberen Wert (new_top) definiert ist, und – die Zustandsmaschine derart ausgestaltet ist, dass in einem Lesebetrieb und/oder einem Schreibbetrieb des FIFO Speichers durch Verschieben des unteren Zeigers (base) auf den neuen unteren Wert (new_base) und/oder durch Verschieben des oberen Zeigers (top) auf den neuen oberen Wert (new_top) der zugewiesene Speicherbereich des FIFO Speichers veränderbar ist.
  2. FIFO Speicher mit veränderbarem Speicherbereich nach Anspruch 1, dadurch gekennzeichnet, dass der FIFO Speicher einen freien Bereich aufweist, in dem keine ungelesenen Daten vorliegen, und die Zustandsmaschine derart ausgestaltet ist, dass für das Setzen des unteren Zeigers base und/oder des oberen Zeigers top auf den neuen unteren Wert (new_base) und/oder den neuen oberen Wert (new_top) ein Zeitpunkt ausgewählt wird, an dem sowohl der bisherige als auch der neue Wert des Zeigers im freien Bereich liegen.
  3. FIFO Speicher mit veränderbarem Speicherbereich nach Anspruch 1 oder 2, dadurch gekennzeichnet, dass die Zustandsmaschine derart ausgestaltet ist, dass das Verschieben des oberen Zeigers (top) auf den neuen oberen Wert (new_top) erfolgt, wenn der Lesezeiger (rd) = base ist.
  4. FIFO Speicher mit veränderbarem Speicherbereich nach Anspruch 1 oder 2, dadurch gekennzeichnet, dass die Zustandsmaschine derart ausgestaltet ist, dass das Verschieben des unteren Zeigers (base) auf den neuen unteren Wert (new_base) erfolgt, wenn der Schreibzeiger (wr) = top ist.
DE102015209486.3A 2015-05-22 2015-05-22 FIFO Speicher mit im Betrieb veränderbarem Speicherbereich Pending DE102015209486A1 (de)

Priority Applications (3)

Application Number Priority Date Filing Date Title
DE102015209486.3A DE102015209486A1 (de) 2015-05-22 2015-05-22 FIFO Speicher mit im Betrieb veränderbarem Speicherbereich
US15/157,989 US9996318B2 (en) 2015-05-22 2016-05-18 FIFO memory having a memory region modifiable during operation
CN201610341074.0A CN106168927B (zh) 2015-05-22 2016-05-20 具有在运行中可变的存储区域的fifo存储器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102015209486.3A DE102015209486A1 (de) 2015-05-22 2015-05-22 FIFO Speicher mit im Betrieb veränderbarem Speicherbereich

Publications (1)

Publication Number Publication Date
DE102015209486A1 true DE102015209486A1 (de) 2016-11-24

Family

ID=57231863

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102015209486.3A Pending DE102015209486A1 (de) 2015-05-22 2015-05-22 FIFO Speicher mit im Betrieb veränderbarem Speicherbereich

Country Status (3)

Country Link
US (1) US9996318B2 (de)
CN (1) CN106168927B (de)
DE (1) DE102015209486A1 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108491333A (zh) * 2018-03-21 2018-09-04 广州多益网络股份有限公司 环形缓冲区的数据写入方法、装置、设备及介质
CN110704021B (zh) * 2019-09-29 2022-03-15 Oppo广东移动通信有限公司 异步先进先出数据处理方法、装置、电子装置及计算机可读存储介质

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3486498B2 (ja) * 1996-01-10 2004-01-13 キヤノン株式会社 バッファ管理方法及びそれを用いた印刷装置
US7196710B1 (en) * 2000-08-23 2007-03-27 Nintendo Co., Ltd. Method and apparatus for buffering graphics data in a graphics system
US20020078317A1 (en) * 2000-12-19 2002-06-20 Matsushita Electric Industrial Co., Ltd. First-in, first-out (FIFO) memory with moving boundary
US6654856B2 (en) * 2001-05-15 2003-11-25 Microsoft Corporation System and method for managing storage space of a cache
US6801991B2 (en) * 2001-12-21 2004-10-05 Agere Systems Inc. Method and apparatus for buffer partitioning without loss of data
JP2004071103A (ja) * 2002-08-08 2004-03-04 Sharp Corp 自己同期型fifoメモリ装置
US7546423B2 (en) * 2003-09-02 2009-06-09 Sirf Technology, Inc. Signal processing system control method and apparatus
US7519788B2 (en) * 2004-06-04 2009-04-14 Micron Technology, Inc. System and method for an asynchronous data buffer having buffer write and read pointers
CN100449504C (zh) * 2005-01-05 2009-01-07 华为技术有限公司 一种基于bitmap表的缓存管理方法
US20060184719A1 (en) * 2005-02-16 2006-08-17 Sinclair Alan W Direct data file storage implementation techniques in flash memories
JP4398499B2 (ja) * 2005-12-02 2010-01-13 パナソニック株式会社 バッファ制御装置およびバッファメモリ装置
CN100517498C (zh) * 2006-05-25 2009-07-22 深圳市恒扬科技有限公司 一种无读取延迟的先进先出存储器
CN100487678C (zh) * 2006-08-23 2009-05-13 晶天电子(深圳)有限公司 带有闪存控制器的电子数据闪存卡
CN101281489B (zh) * 2007-04-03 2010-05-26 中兴通讯股份有限公司 一种先进先出存储器实现方法及装置
US8127199B2 (en) * 2007-04-13 2012-02-28 Rgb Networks, Inc. SDRAM convolutional interleaver with two paths
CN104597805A (zh) * 2014-12-09 2015-05-06 北京临近空间飞艇技术开发有限公司 一种基于fifo实现循环移位寄存器的***及方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
http://blog.labix.org/2010/12/23/efficient-algorithm-for-expanding-circular-buffers

Also Published As

Publication number Publication date
CN106168927B (zh) 2021-07-27
US9996318B2 (en) 2018-06-12
CN106168927A (zh) 2016-11-30
US20160342390A1 (en) 2016-11-24

Similar Documents

Publication Publication Date Title
DE69500074T2 (de) Modulo-adressierter Pufferspeicher
DE3789122T2 (de) Datenverarbeitungsvorrichtung.
DE1499193C3 (de) Speicher-Adressierschaltung
DE69229716T2 (de) Schaltungsarchitektur zum mehrkanaligen DMA-Betrieb
DE102013014168B4 (de) Kachel-basiertes verschachteln und entschachteln für digitale signalverarbeitung
DE102014100081A1 (de) Verfahren und Vorrichtung zum Verwalten von Programmen oder Icons
DE3500804A1 (de) Unterbrechungssteuerkreis
DE2431379A1 (de) Datenverarbeitungseinrichtung
DE102014103347B4 (de) Bedingte Verkettungsglieder für Direct-Memory-Access-Controller
DE2747146A1 (de) Datenverarbeitungsanlage
DE2422732C2 (de) Hierarchische Speicheranordnung
DE102015209486A1 (de) FIFO Speicher mit im Betrieb veränderbarem Speicherbereich
DE2758829A1 (de) Multiprozessor-datenverarbeitungssystem
DE2718551A1 (de) Adressenumsetzvorrichtung in einer datenverarbeitungsvorrichtung
DE2210333C3 (de)
DE2017246A1 (de) Verfahren und Einrichtung zum Er mitteln des Konturverlaufes eines spal tenweise abgetasteten Schriftzeichens
DE2556357A1 (de) Adressiereinrichtung
EP0494329B1 (de) Schaltungsanordnung zur Abbildung des logischen Adressraums einer Prozessoreinheit auf den physikalischen Adressraum eines Speichers
DE10107102B4 (de) Verfahren und Anordnung zur Instruktionswortgenerierung bei der Ansteuerung von Funktionseinheiten in einem Prozessor
DE2750126B2 (de)
DE102015114721A1 (de) Verfahren, Gerät und System zur Datenverarbeitung
DE2000608A1 (de) Schaltungsanordnung fuer eine Nachrichtenverarbeitungs-,insbesondere fuer eine Nachrichtenvermittlungsanlage
DE10128752A1 (de) Verfahren zur Ablage von Daten in einen Speicherbaustein
DE112017006928T5 (de) Berechnungsverarbeitungsvorrichtung und informationsverarbeitungssystem
DE102009047377A1 (de) Verfahren und Routenberechnungsgerät zur stochastischen Berechnung einer Fahrtroute

Legal Events

Date Code Title Description
R012 Request for examination validly filed