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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von RekordHalter (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von RekordHalter (Gast)


Bewertung
0 lesenswert
nicht 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.

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]
  • [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.