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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [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 einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.