Forum: FPGA, VHDL & Co. little/big endian beim FPGA?


von Anfänger (Gast)


Lesenswert?

Hallo,

In Beispielcode aus dem I-net-Fundus fand ich Speicher, der mal als 
little, mal als big endian ausgelesen werden konnte.

Kann mir bitte jemand erklären, welchen Sinn es macht, dieses in einem 
FPGA tun zu wollen?
Für mich war little endian immer an Intel CPUs (bzw. kompatible) 
gekoppelt. Ethernet ist ja big endian basiert, also welche 
Schnittstellen brauchen noch little endian integers?

Ich dachte bislang, dass es in bitorientierten Architekturen Jacke wie 
Hose is...?!?

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


Lesenswert?

> dass es in bitorientierten Architekturen Jacke wie Hose is...?!?
Das gilt nur solange du auf deiner eigenen Plattform bleibst. 
Interessant wird das Thema genau dann, wenn du Daten an einen anderen 
Teilnehmer (uC, PC...) weitergibst.

Aber auch im FPGA kann das Thema in abgewandelter Form auftauchen. Was 
passiert z.B. hier:
1
   signal xxx : std_logic_vector(7 downto 0);
2
   signal yyy : std_logic_vector(0 to 7);
3
   :
4
   xxx <= "11110000";
5
   yyy <= xxx;
Welchen Wert hat jetzt das Bit 0 von yyyy?

von (prx) A. K. (prx)


Lesenswert?

Anfänger schrieb:

> Ich dachte bislang, dass es in bitorientierten Architekturen Jacke wie
> Hose is...?!?

Einzig bei wortorientierten Architekturen ist es Jacke wie Hose. Nur 
wenn zwei aufeinander folgende Speicherworte eine Adressdifferenz von 1 
haben, dann ist endgültig Ruhe an der Front. Sobald man Speicherworte 
irgendwie in Bytes oder gar Bits runterbricht geht der Spuk los.

von Marc (Gast)


Lesenswert?

> Welchen Wert hat jetzt das Bit 0 von yyyy?

Gute Alptraumfrage.  Zuem Glueck hast Du ein Schlupfloch gelassen, das 
die Antwort ganz einfach macht.

yyyy ist nicht definiert, Bit 0 also auch nicht.

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


Angehängte Dateien:

Lesenswert?

> Zuem Glueck hast Du ein Schlupfloch gelassen
Oh, Mann, ein Typo  :-/

Also, die eigentliche Frage lautet:
1
   signal xxx : std_logic_vector(7 downto 0);
2
   signal yyy : std_logic_vector(0 to 7);
3
   :
4
   xxx <= "00000001";
5
   yyy <= xxx;
6
   bit7 <= yyy(7);
7
   bit6 <= yyy(6);
8
   bit5 <= yyy(5);
9
   bit4 <= yyy(4);
10
   bit3 <= yyy(3);
11
   bit2 <= yyy(2);
12
   bit1 <= yyy(1);
13
   bit0 <= yyy(0);
Welchen Wert hat bit0?
Und welchen Wert bit7?

Und hier die für manche überraschende Antwort:
Nach der Zuweisung
   xxx <= "00000001";
hat xxx den Wert "00000001", also xxx(7) = '0' und xxx(0) = '1'
und nach der Zuweisung
   yyy <= xxx;
hat yyy den Wert "00000001"  also yyy(0) = '0' und yyy(7) = '1'

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.