mikrocontroller.net

Forum: FPGA, VHDL & Co. Suche Hilfe bei unverständlichen VHDL Code


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab da ein Problem und verstehe den Code nicht.

Mein Aufgabe ist es ein RAM für ein Altera Board zu schreiben´. Nun hab 
ich auf der Altera Site ein Bsp RAM gefunden was eigentlich 
funktionieren sollte.

Mein Problem ist ich verstehe folgende Zeile nicht.
ARCHITECTURE rtl OF ram IS
  TYPE RAM IS ARRAY(0 TO 2 ** ADDRESS_WIDTH - 1) OF std_logic_vector(DATA_WIDTH - 1 DOWNTO 0);


Danke für jegliche Hilfe.

Gruß
Daniel
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;

ENTITY ram IS
  GENERIC
  (
    ADDRESS_WIDTH  : integer := 4;
    DATA_WIDTH  : integer := 8
  );
  PORT
  (
    clock      : IN  std_logic; -- Takt
    data      : IN  std_logic_vector(DATA_WIDTH - 1 DOWNTO 0); -- 8-bit data input to RAM
    write_address  : IN  std_logic_vector(ADDRESS_WIDTH - 1 DOWNTO 0); --  4-bit read address input
    read_address  : IN  std_logic_vector(ADDRESS_WIDTH - 1 DOWNTO 0); --  4-bit write address input
    we        : IN  std_logic; -- Write enable input
    q        : OUT std_logic_vector(DATA_WIDTH - 1 DOWNTO 0) -- 8-bit data output of RAM
  );
END ram;

ARCHITECTURE rtl OF ram IS
  TYPE RAM IS ARRAY(0 TO 2 ** ADDRESS_WIDTH - 1) OF std_logic_vector(DATA_WIDTH - 1 DOWNTO 0);

  SIGNAL ram_block : RAM;
BEGIN
  PROCESS (clock)
  BEGIN
    IF (clock'event AND clock = '1') THEN
      IF (we = '1') THEN
          ram_block(to_integer(unsigned(write_address))) <= data;
      END IF;

      q <= ram_block(to_integer(unsigned(read_address)));
    END IF;
  END PROCESS;
END rtl;


Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Mein Problem ist ich verstehe folgende Zeile nicht.
Das sind zwei Zeilen!!!
ARCHITECTURE rtl OF ram IS
  TYPE RAM IS ARRAY(0 TO 2 ** ADDRESS_WIDTH - 1) OF std_logic_vector(DATA_WIDTH - 1 DOWNTO 0);

Die erste Zeile sagt:
Hier beginnt die Architekturbeschreibung des ram
ARCHITECTURE rtl OF ram IS
Diese Beschreibung endet bei
END rtl;

Und die zweite Zeile beschreibt ein Array von Vektoren:
  TYPE RAM IS ARRAY(0 TO 2 ** ADDRESS_WIDTH - 1) OF std_logic_vector(DATA_WIDTH - 1 DOWNTO 0);
Dieses Array beinhaltet 16 (0 bis 2^4-1) Vektoren der Breite 8 Bit (8-1 
downto 0)

Mein Tipp: "VHDL-Synthese" von Reichardt/Schwarz

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich nun die ADDRESS_WIDTH ändere passt sich das Array an.

Ich hätte da noch eine kleine Frage zu
DATA_WIDTH - 1 DOWNTO 0

Data ist ja 8 - 1 = 7 bis 0

Man könnte das auch ersetzen durch 7 DOWNTO 0

Besten dank für die Hilfe nun ist mir alles sehr viel klarer.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wenn ich nun die ADDRESS_WIDTH ändere passt sich das Array an.
> Man könnte das auch ersetzen durch 7 DOWNTO 0
Ja und ja.

Autor: Martin Kohler (mkohler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel wrote:
> Man könnte das auch ersetzen durch 7 DOWNTO 0
Dann wäre es aber eben nicht mehr "generic".

Lothar Miller wrote:
> Mein Tipp: "VHDL-Synthese" von Reichardt/Schwarz
Genau, das liegt auch gerade neben der Tastatur. Diese "Investition" hat 
sich gelohnt.

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.