Hallo, ich lerne gerade VHDL und habe eine Verständnisfrage. Ich habe die "Code-Seite" von Lothar Miller gefunden und bin dort über den ram Code gestolpert. Nun meine Frage: Wenn ich diesen Code so nehme und bei mir implementiere: Woher genau "weiß" meine Entwicklungsumgebung, dass ich einen Ram beschreibe und nicht etwa z.B. ganz viele FlipFlops o.ä.? Ist es sichergestellt, dass ein RAM verwendet wird? Muss ich mich darauf verlassen oder gibt es irgendein "Schlüsselwort", das ich jetzt übersehe? Außerdem gibt es Eingänge, die aber auf keinen Pin führen, weil sie ja "intern" verdrahtet sind. Wie gehe ich damit um? Hier ein Codeausschnitt von o.g. Seite, damit jeder weiß worüber ich spreche (http://www.lothar-miller.de/s9y/archives/20-RAM.html):
1 | library IEEE; |
2 | use IEEE.STD_LOGIC_1164.ALL; |
3 | use IEEE.NUMERIC_STD.ALL; |
4 | |
5 | entity RAM is |
6 | Generic ( |
7 | Addrbreite : natural := 8; -- Speicherlänge = 2^Addrbreite |
8 | Wortbreite : natural := 8 |
9 | );
|
10 | Port ( clk : in STD_LOGIC; |
11 | A : in STD_LOGIC_VECTOR (Addrbreite-1 downto 0); |
12 | Write : in STD_LOGIC; |
13 | Din : in STD_LOGIC_VECTOR (Wortbreite-1 downto 0); |
14 | Dout : out STD_LOGIC_VECTOR (Wortbreite-1 downto 0) |
15 | );
|
16 | end RAM; |
17 | |
18 | architecture BlockRAM of RAM is |
19 | type speicher is array(0 to (2**Addrbreite)-1) of STD_LOGIC_VECTOR(Wortbreite-1 downto 0); |
20 | signal memory : speicher; |
21 | begin
|
22 | process begin |
23 | wait until rising_edge(CLK); |
24 | if (Write='1') then |
25 | memory(to_integer(unsigned(A))) <= Din; |
26 | end if; |
27 | Dout <= memory(to_integer(unsigned(A))); |
28 | end process; |
29 | end BlockRAM; |