Hallo, ich wollte mir einen Rom Programmieren in dem 2 getrennte Werte über eine Adresse angesprochen werden. Dazu habe ich ein Array von Typ eines anderen Arrays (aus 2 Integer-Werten) erstellt. Wenn das Programm kompilieren will bekomme ich folgende Fehlermeldung: ** Error: test_Rom.vhd(24): Cannot resolve indexed name as type integer. Wieso schafft er es nicht, die Integer-Werte aus den ROM in eine Integer-Variable zu schreiben?!? Hat jemand ne Idee? library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; entity ROM is port( -- Input signals address : in std_logic_vector(1 downto 0); -- Output signals output : out integer range -3 to 3; ); end entity ROM; architecture BEHAVIOR of ROM is type BLOC is array (0 to 1) of integer range -3 to 3; type MEMORY is array (0 to 3) of BLOC; constant ROM: MEMORY := ((1,2), (3,0), (1,1), (2,2)); begin output <= ROM(0,0); end BEHAVIOR;
-ROM ist eindimensional, deshalb wird der zweidimensionale Index bemeckert. Richtig ist: output <= C_ROM(0)(0); -wenn Du Memory zweidimensional deklarierst kannst du auch einen zweidimensionalen Index verwenden (siehe MEM_2D) -das vorletzte semikolon in der Portlist ist zuviel. -Konstante und Entity haben den selben namen -> OK, aber nicht gut. [vhdl] LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY ROM IS PORT( -- Input signals address : IN STD_LOGIC_VECTOR(1 DOWNTO 0); -- Output signals output : OUT INTEGER RANGE -3 TO 3 ); END ENTITY ROM; ARCHITECTURE BEHAVIOR OF ROM IS TYPE BLOC IS ARRAY (0 TO 1) OF INTEGER RANGE -3 TO 3; TYPE MEMORY IS ARRAY (0 TO 3) OF BLOC; TYPE MEM_2D IS ARRAY (0 TO 1,0 to 3) OF INTEGER RANGE -3 TO 3; CONSTANT C_ROM : MEMORY := ((1, 2), (3, 0), (1, 1), (2, 2)); CONSTANT C_ROM_2D : MEM_2D := ((1,3,1,2),(2,0,1,2)); BEGIN output <= C_ROM(0)(0) when address = "00" else C_ROM_2D(0,0); END BEHAVIOR; [\vhdl]
Hallo, vielen Dank für die Hilfe!!!! Die 2D Array Schreibweise kannte ich auch noch nicht. Aus Übersichtsgründen wollte ich aber eine Schreibweise, wo die Werte aus einer Zeile immer nebeneinander stehen (wie man es in meinem Code-Schnipsel sieht). PS.: da ich ein blutiger Anfänger bin wollte ich mal fragen, ob du vielleicht ein paar Literaturtips für mich hast?
Erste Wahl ist für mich "HDL Chip Design" wie hier besprochen: http://wikihost.org/wikis/fpgakueche/programm/gebo.prg?name=books_main Das IMHO beste deutsche Buch für den Einstieg ist: Bernd Schwarz, VHDL-Synthese ISBN: 3486273841 z.B. hier: http://www.alphamusic.de/3097574.html Nicht Empfehlenswert obwohl der Titel viel verspricht ist: FPGA-Kochbuch von Wannemacher
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.