Byte-Array in VHDL ist das möglich?

OP #2163240
Lesenswert?
• ▲
▼
Hallo,

bin gerade dabei ein LCD mit FPGA anzusteuern. Dabei werden die Zeichen 
in Form von Bytes seriell in das LCD "geschoben". Das LCD kann 32 
Zeichen darstellen.

Nun wollte ich eine entity schreiben, der man nur eine Art Byte-Vektor 
übergibt.

Ich frage mich also, ob es möglich ist einen Type zu deklarieren, dessen 
Elemente 1Byte groß sind also nach folgenden Schema:

type Byte_array is (1stesByte 2tesByte .... ntesByte)   ?

letztlich wollte ich ja später mit einer "Laufvariablen" jedes Byte 
ansteuern können?


Viele Grüße

Olli
#2163263
Lesenswert?
• ▲
▼
entity

....

architecture Behavioral of bla is
  type Data_array is array(0 to 19) of STD_LOGIC_VECTOR(7 downto 0);
  Signal Data               : Data_array;
begin

...

Ich hab es so genutzt.

zugriff über

8BitVektor <= Data(1);

Gruß
John-Eric

Zusatz
=====================
Wenn die Daten Konstant sind, wäre auch das denkbar:

  type table is array(0 to 63) of std_logic_vector(15 downto 0);
  constant coeff  :table  := (x"fd93",x"0089",x"009f",x"00c3",x"00ef",
                              x"0118",x"0137",x"0142",x"0133",x"0105",
                              x"00b9",x"004f",x"ffce",x"ff3f",x"feaf",
                              x"fe2e",x"fdca",x"fd94",x"fd9a",x"fde7",
                              x"fe82",x"ff6b",x"009e",x"0211",x"03b2",
                              x"056f",x"072e",x"08d6",x"0a4e",x"0b7f",
                              x"0c55",x"0cc4",x"0cc4",x"0c55",x"0b7f",
                              x"0a4e",x"08d6",x"072e",x"056f",x"03b2",
                              x"0211",x"009e",x"ff6b",x"fe82",x"fde7",
                              x"fd9a",x"fd94",x"fdca",x"fe2e",x"feaf",
                              x"ff3f",x"ffce",x"004f",x"00b9",x"0105",
                              x"0133",x"0142",x"0137",x"0118",x"00ef",
                              x"00c3",x"009f",x"0089",x"fd93");

eigentlich gleich.
Signalen kannst du ja auch einen Startwert zuweisen.
OP #2163316
Lesenswert?
• ▲
▼
John-eric K. schrieb:
> entity
>
> ....
>
> architecture Behavioral of bla is
>   type Data_array is array(0 to 19) of STD_LOGIC_VECTOR(7 downto 0);
>   Signal Data               : Data_array;
> begin
>
> ...
>
> Ich hab es so genutzt.
>
> zugriff über
>
> 8BitVektor <= Data(1);

Ok so wie hier oben kann ich also die Daten des zweiten Bytes von "Data" 
lesen!

kann ich dann auch ganz einfach das n-te Byte von "Data" schreiben bzw. 
einen Wert zuweisen?

also  z.B.

Data(0) <= mein8BitVektor (7 downto 0);    ?
Moderator (Firma: Titel) Persönliche Seite #2163348
Lesenswert?
• ▲
▼
Olli R. schrieb:
> kann ich dann auch ganz einfach das n-te Byte von "Data" schreiben bzw.
> einen Wert zuweisen?
Ja. Aber das müsste dann so heißen:
  Data(n) <= mein8BitVektor (7 downto 0);
Denn sonst weist du immmer dem 0. Element des Vektors was zu...  ;-)

BTW:
Wenn du ebenfalls einen 8 Bit Vektor hast:
  Data(0) <= mein8BitVektor (7 downto 0);
Dann kannst du sogar so schreiben:
  Data(0) <= mein8BitVektor;
OP #2163394
Lesenswert?
• ▲
▼
Lothar Miller schrieb:
> Olli R. schrieb:
>> kann ich dann auch ganz einfach das n-te Byte von "Data" schreiben bzw.
>> einen Wert zuweisen?
> Ja. Aber das müsste dann so heißen:
>   Data(n) <= mein8BitVektor (7 downto 0);
> Denn sonst weist du immmer dem 0. Element des Vektors was zu...  ;-)
>
> BTW:
> Wenn du ebenfalls einen 8 Bit Vektor hast:
>   Data(0) <= mein8BitVektor (7 downto 0);
> Dann kannst du sogar so schreiben:
>   Data(0) <= mein8BitVektor;

Vielen Dank.. werde ich morgen früh mal ausprobieren und am nachmittag 
und am abend.....;)
Gast #2163999
Lesenswert?
• ▲
▼
so nun ist der nächste Tag und ich frage mich nun, ob ich meinen eigenen 
Datentyp nun auch in eine andere Entity einbetten kann.

Zurzeit sieht das ja so aus:

type BYTE_ARRAY is array(31 downto 0) of std_logic_vector (7 downto 0);

signal DATAIN : BYTE_ARRAY;


kann ich diesen Datentyp auch als Port verwenden?
Gast #2164021
Lesenswert?
• ▲
▼
Ok über diese Packages werden also z.B. persönliche Datentypen 
eingebunden!

geht das auch indem ich einfach im Port jeweils den Datentyp deklariere?

oder wie geht das mit den Packages einbinden (nutze Xilinx ISE 13.1) 
etc.?
Moderator (Firma: Titel) Persönliche Seite #2164134
Lesenswert?
• ▲
▼
Olli R. schrieb:
> oder wie geht das mit den Packages einbinden (nutze Xilinx ISE 13.1)
> etc.?
1
library IEEE;
2
use IEEE.std_logic_1164.all;
3

4
package MeineDatentypen is
5
   type BYTE_ARRAY is array(31 downto 0) of std_logic_vector(7 downto 0);
6
end MeineDatentypen ;
7

8

9

10

11
library IEEE;
12
use IEEE.std_logic_1164.all;
13
use IEEE.NUMERIC_STD.ALL;
14
library work;
15
use work.MeineDatentypen.all;
16

17
entity MachWas is
18
 PORT( clk           : IN std_logic;
19
       input         : in  BYTE_ARRAY;
20
       output        : out BYTE_ARRAY);
21
end MachWas ;
22

23
architecture Behavioral of MachWas is
24
begin
25
   output <= input;
26
end MachWas;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren