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
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.
Olli R. schrieb: > Nun wollte ich eine entity schreiben, der man nur eine Art Byte-Vektor > übergibt. Du mußt dir deinen Typ in einem Package definieren, dann kannst du ihn im Port einer Entity verwenden... Such mal hier im Forum nach FPGA und LCD... Beitrag "Re: Xilinx und LCD"
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); ?
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;
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.....;)
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?
Olli R. schrieb: > kann ich diesen Datentyp auch als Port verwenden? Ja, sowas mache ich ständig. Dafür liegen die types in einem eigenen Package, welches überall eingebunden wird. Duke
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.?
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; |
Olli R. schrieb: > Vielen Dank Steffen H. schrieb: > Auch ich danke De nada... ;-) Da fällt mir noch was auf: die Entity MachWas braucht in diesem Beispiel nicht wirklich einen Takt... ;-)
Eigentlich verwendet man für diesen Zweck immer einen internen BLOCK RAM
Johann schrieb: > Eigentlich verwendet man für diesen Zweck immer einen internen BLOCK RAM Das kommt eigentlich immer drauf an, ob man die Daten evtl. komplett parallel braucht...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.