Forum: FPGA, VHDL & Co. record und alias kombinierbar


von RekordHalter (Gast)


Lesenswert?

Hallo zusammen,

ich möchte gerne Frames verarbeiten, die aus mehreren Datenfeldern 
bestehen. Hierfür verwende ich Records wie z.B. hier definiert:
1
type myRecord_t is record
2
  metaInfos : std_logic;
3
  data      : std_logic_vector(1087 downto 0);
4
-- data besteht aus 64 bit Header und 1024 Bit Payload
5
end record;
6
7
signal frame1_s : myRecord_t;

Nun würde ich das data Feld gerne in weitereTeile unterteilen, z.B in 
Header und Payload, um folgende Zuweisungen vornehmen zu können:
1
-- Zuweisung bestimmter Teile von frame1_s.data
2
frame1_s.header  <= (others => '1');
3
frame1_s.payload <= (others => '0');
Gleichzeitig möchte ich aber auch auf frame_s.data bitweise (bzw. 
Byteweise) zugreifen können.
1
for i in frame1_s.data'range loop
2
  -- bitweises verarbeiten des gesamten Frames
3
  ...
4
end loop;

Gibt es eine möglichkeit, einen Alias für Typen zu definieren, sodass 
alle signale von diesem Typen automatisch die definierten Aliase 
verwenden können? Also so was ähnliches wie dieses konstrukt:
1
alias myRecord_t.header  : std_logic_vector(63 downto 0) is myRecord_t.data(1087 downto 1024)
2
alias myRecord_t.payload : std_logic_vector(10233 downto 0) is myRecord_t.data(1023 downto 0)

Oder seht Ihr einen alternativen Kodierungsansatz?

Ich freu mich auf Eure Anregungen

von Duke Scarring (Gast)


Lesenswert?

Ich würde mir dafür Funktionen bauen, die aus dem verschachtelten Record 
einen breiten Bitvector machen (und umgekehrt).
Damit kann man solche Records z.B. auch durch generische FIFOs schicken.

Zusätzlich machst Du Dir noch eine Funktion, die aus dem Vector ein Byte 
ausschneidet.

Ich weiß nicht, was die Tools dazu sagen, wenn Du einen Alias mit 
Records kombinierst und umgekehrt.

Duke

von Sigi (Gast)


Lesenswert?

Warum teilst du dein Record nicht gleich entsprechend
auf (kostet dich damit natürlich zwei Schleifen etc.)?

von RekordHalter (Gast)


Lesenswert?

Duke Scarring schrieb:
> Ich würde mir dafür Funktionen bauen, die aus dem verschachtelten Record
> einen breiten Bitvector machen (und umgekehrt).
Vielen Dank für die Antwort, ich werde mal schauen, ob mir der Ansatz 
weiterhilft.

Sigi schrieb:
> Warum teilst du dein Record nicht gleich entsprechend
> auf (kostet dich damit natürlich zwei Schleifen etc.)?
Leider besteht mein Record nicht nur aus 2 Feldern, sodass ich beim 
senden etc. jeweils ca 16 Schleifen hätte. Deswegen kam mir der Gedanke 
mit dem Alias.

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.