www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Problem mit Integer in VHDL


Autor: Paul Jensen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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;

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-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]

Autor: Paul Jensen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erste Wahl ist für mich "HDL Chip Design" wie hier besprochen:

http://wikihost.org/wikis/fpgakueche/programm/gebo...



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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.