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


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


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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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   ;-)

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


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

von Philip (Gast)


Lesenswert?


von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

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


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.

von Philip (Gast)


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)

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


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.