Suche Hilfe bei unverständlichen VHDL Code

Gast #1246381
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.
1
ARCHITECTURE rtl OF ram IS
2
  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
1
LIBRARY ieee;
2
USE ieee.std_logic_1164.ALL;
3
USE ieee.numeric_std.ALL;
4

5
ENTITY ram IS
6
  GENERIC
7
  (
8
    ADDRESS_WIDTH  : integer := 4;
9
    DATA_WIDTH  : integer := 8
10
  );
11
  PORT
12
  (
13
    clock      : IN  std_logic; -- Takt
14
    data      : IN  std_logic_vector(DATA_WIDTH - 1 DOWNTO 0); -- 8-bit data input to RAM
15
    write_address  : IN  std_logic_vector(ADDRESS_WIDTH - 1 DOWNTO 0); --  4-bit read address input
16
    read_address  : IN  std_logic_vector(ADDRESS_WIDTH - 1 DOWNTO 0); --  4-bit write address input
17
    we        : IN  std_logic; -- Write enable input
18
    q        : OUT std_logic_vector(DATA_WIDTH - 1 DOWNTO 0) -- 8-bit data output of RAM
19
  );
20
END ram;
21

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

25
  SIGNAL ram_block : RAM;
26
BEGIN
27
  PROCESS (clock)
28
  BEGIN
29
    IF (clock'event AND clock = '1') THEN
30
      IF (we = '1') THEN
31
          ram_block(to_integer(unsigned(write_address))) <= data;
32
      END IF;
33

34
      q <= ram_block(to_integer(unsigned(read_address)));
35
    END IF;
36
  END PROCESS;
37
END rtl;
Moderator (Firma: Titel) Persönliche Seite #1246412
Lesenswert?

> Mein Problem ist ich verstehe folgende Zeile nicht.
Das sind zwei Zeilen!!!
1
ARCHITECTURE rtl OF ram IS
2
  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
1
ARCHITECTURE rtl OF ram IS
Diese Beschreibung endet bei
1
END rtl;

Und die zweite Zeile beschreibt ein Array von Vektoren:
1
  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
Gast #1246454
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren