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?
> 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 ;-)
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
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.
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.