Hallo liebe VHDL-Gemeinde,
ich bin recht neu in der FPGA-Entwicklung und bin mittlerweile auf ein
Problem gestoßen, dass sich mit meinem aktuellen Wissensstand nicht
lösen lässt. Entsprechendes in der Suche habe ich nicht gefunden, ggf.
weil mir die Schlüsselwörter nicht geläufig sein, sollte dies der Fall
sein, bitte ich um nachsicht.
Über eine SPI-Schnittstelle möchte ich gewisse Daten übertragen, der
Header besteht aus 32-Bit und ist immer gleich aufgebaut, hierfür habe
ich einen
definiert, dieser sieht wie folgt aus:
1 | type T_HEADER is record
|
2 | MSG : STD_LOGIC_VECTOR(5 downto 0);
|
3 | DONT_CARE_MSG : STD_LOGIC_VECTOR(1 downto 0);
|
4 | ID : STD_LOGIC_VECTOR(10 downto 0);
|
5 | RTR : STD_LOGIC;
|
6 | IDE : STD_LOGIC;
|
7 | DONT_CARE_IDE : STD_LOGIC_VECTOR(2 downto 0);
|
8 | R0_BIT : STD_LOGIC;
|
9 | DONT_CARE_R0 : STD_LOGIC_VECTOR(2 downto 0);
|
10 | LEN : STD_LOGIC_VECTOR(3 downto 0);
|
11 | end record;
|
Ich hatte mir eigentlich gedacht, dass der Header einfach als eine
Bitreihenfolge dargestellt wird und man über T_HEADER(index) darauf
zugreifen könnte. Leider ist dem nicht so und ein unschönes IF-Konstrukt
ist nötig um auf die jeweiligen Elemente zugreifen zu können.
Mappen auf einen 32 Bit Vector ist unschön, da die Informationen so
doppelt vorhanden wären.
Gibt es in VHDL eine Art Union wie in C?
Oder wäre etwas in der Art möglich (pseudocode):
1 | MSG := 31 downto 26;
|
2 | DONT_CARE_MSG := 25 downto 24;
|
3 | HEADER(MSG) <= STD_LOGIC_VECTOR(to_unsigned(51, 6);
|
4 | HEADER(DONT_CARE_MSG) <= (others => '0');
|
Vielen Dank schon mal.
Gruß
Layornos