www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Gray code arithmetisch Rechnen?


Autor: René D. (Firma: www.dossmatik.de) (dose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei asynchronen Fifos wird mit Gray code gearbeitet.

Der Vorteil von Gray ist, dass nur eine Adressleitung sich ändert bis 
zum nächsten Speicherplatz. Damit werden undefinierte Zustände im 
Adresswechsel vermieden. Soweit ist es klar.


Das Problem ist?
Wie kann man den Abstand zwischen zwei Gray Werten ermitteln?
Das Konvertieren von Gray zu Binär ist nur sehr langsam.

Fragen:
a) gibt es eine schneller Varinaten Gray->BIN ?

b)
Kann man mit Gray codierten Zahlen überhaupt arithmetisch rechnen?
Und wie sieht so ein Rechenwerk aus?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Kann man mit Gray codierten Zahlen überhaupt arithmetisch rechnen?
Nun, das ist wohl eher das Problem mit der Definition:
Welches Bitmuster ist welche Zahl?
Und dezimal geht das etwa so mit den Stellenwerten der Ziffern:
... 10**3, 10**2, 10**1, 10**0, 10**-1, 10**-2 ...
Schön geradlinig...
Binär sieht das dann so aus
... 2**3, 2**2, 2**1, 2**0, 2**-1, 2**-2 ...
Das ist genauso schön...

Wie sieht die Darstellung für den Graycode aus?
Wenn du das hast, kannst du Formeln bzw. ein Rechenwerk dafür 
beschreiben. Nur macht das dann absolut keinen Sinn mehr, weil sich 
dann pro Berechnung ja mehr als 1 Bit ändern könnte...

> Wie kann man den Abstand zwischen zwei Gray Werten ermitteln?
Wozu willst du das?
Einen Speicher wird kein Mensch mit Gray-Code ansteuern, nur um die 
Pegelwechsel definiert zu bekommen. Zur Qualifizierung eines 
Speicherzugriffs gibt es andere Methoden...

> Wie kann man den Abstand zwischen zwei Gray Werten ermitteln?
Der Abstand zwischen 2 Gray-Werten ist 1   ;-)

Autor: René D. (Firma: www.dossmatik.de) (dose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:


>> Wie kann man den Abstand zwischen zwei Gray Werten ermitteln?
> Wozu willst du das?
> Einen Speicher wird kein Mensch mit Gray-Code ansteuern, nur um die
> Pegelwechsel definiert zu bekommen. Zur Qualifizierung eines
> Speicherzugriffs gibt es andere Methoden...
Welche hättest du da noch?
Ich will zwischen zwei asynchrone Ports Informationen übergeben, wie die 
Speicherstände sind.

Die RAM Zelle selbst, kann binär und mit eigenem Takt arbeiten. Doch wie 
kann man Zustandsflag erzeugen?
Wie Speicher halb voll?
Speicher leer?

Hier muss ich rechnen mit den beiden Adressständen und diese Werte 
können sich asynchron verändern. Dafür muss der Wert dem anderen Port 
der Stand des Ardessdecoders übermittelt werden und der Abstand bestimmt 
werden.
Die Übermittlung wird Gray codiert durchgeführt, damit ist der Fehler um 
maximal einen Wert. Das ist der Vorteil zu gray. Doch dann weiss ich 
gerade nicht weiter. Wie ich jetzt mit dem übermittelten Graywert weiter 
arbeite.

Eigentlich bräuchte ich ein einfaches Rechenwerk

      Bin-gray
oder  gray-bin

oder du hast noch eine besser Methode auf Lager?

>> Wie kann man den Abstand zwischen zwei Gray Werten ermitteln?
> Der Abstand zwischen 2 Gray-Werten ist 1   ;-)
Nein nicht die Theortische Behandlung.
z.B.
Gray(1000)-Gray(0111)=?

Lösung: 15-5=10

Autor: Philip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Schau mal hier rein...
Oder hier: http://www.wisc-online.com/ViewObject.aspx?ID=IAU8307

Autor: René D. (Firma: www.dossmatik.de) (dose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Link von Philip trifft genau mein Problem.


Das Paper beschrebit genau mein Problem.

Die Beispiele sind leider in Verilog ;->
So wie das Diagramm auf Seite 9 schwebt es mir vor.

Das muss ich mich gerade mal durchkämpfen. Es ist eine Menge Papier. 
Beim ersten Durchlesen habe ich noch nicht alles verstanden.

Autor: Philip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Asynchrone FIFOS können aber "böse" sein! Falls du auf einem FPGA bist 
und nicht gerade ASIC design machst, solltest du lieber einen  IP-Core 
dafür benutzen! (Schau mal nach xilinx coregen bzw. altera megawizard, 
je nach dem was du benutzt)

Autor: René D. (Firma: www.dossmatik.de) (dose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Philip schrieb:

> Asynchrone FIFOS können aber "böse" sein! Falls du auf einem FPGA bist


Ja ich bin auf FPGA. Das Böse habe ich vorhergesehen und habe noch gar 
keinen Code geschrieben. Nur einen Synchronen. Den wollte ich auf 
Asysnchron erweitern.


Hast du noch weitere so gute Literaturhinweise?
Ich könnte noch einen DDR2 RAM Controller gebrauchen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.