Wer mit Xilinx FPGAs anfängt, der braucht früher oder später mal ein RAM.
Jetzt gibt es in diesen FPGAs zwei Möglichkeiten, ein RAM zu realisieren:
1) als Distributed RAM, bei dem (wertvolle) LUTs als 16x1 Speicherblöcke
zusammengeschaltet werden, oder
2) als BRAM (auch Block-RAM genannt), die je nach FPGA unterschiedlich
große synchrone RAM-Blöcke darstellen
Grundsätzlich wird ein RAM als Array in VHDL so beschrieben:
type speicher is array(0 to (2**Addrbreite)-1) of STD_LOGIC_VECTOR(Wortbreite-1 downto 0); signal memory : speicher;
Wie kann man aber nun, ausgehend von einer generischen Beschreibung eines RAM-Arrays, steuern welchen RAM-Typ man bekommt?
Wenn die Lese-Adresse getaktet ist,
dann gibt es synchrones BRAM.
Es empfiehlt sich aber immer ein Blick in das jeweils aktuelle Handbuch des jeweils verwendeten Synthesizers. Denn der muss aus dieser Beschreibung erkennen, welches RAM denn nun gewollt ist, und die entsprechenden Komponenten instanziieren. Für Xilinx Vivado ist das der Xilinx Vivado Synthesis User Guide UG901. Aber auch im Xilinx Vivado UltraFast Design Methodology Guide UG949 finden sich im Kapitel "RTL Coding Guidelines" beachtenswerte Tipps. Ähnliche Manuals gibt es auch bei den anderen FPGA-Anbietern.