mikrocontroller.net

Forum: FPGA, VHDL & Co. Generischen RAM mit Daten vorbelegen


Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus,
wie beschreibt man einen RAM mit variabler Breite / Tiefe und belegt 
diesen mit Daten vor?

Bei fixer Groesse (z.B. 8x16) ist es einfach:
ram_t : is array(0 to 7) of std_logic_vector
...
generic(content : ram_t := XYZ);
...
signal ram : ram_t := content;

Variable Groesse ohne Vorbelegung ebenso:
generic(width : integer = 16, depth = 8)
...
ram_t is array(0 to depth-1) of std_logic_vector(width-1 downto 0);
signal ram : ram_t;

(Die Beschreibung des eigentlichen RAM-Verhaltens ist natuerlich auch 
kein Problem, deswegen habe ich sie hier weggelassen.)

Ich habe zwar einige Beschreibungen probiert, aber keine davon 
entspricht dem VHDL-Standard oder wird von den Tools richtig umgesetzt:
generic(width : integer = 8; depth: integer = 8; content : array(0 to depth-1) of std_logic_vector(width-1 downto 0) := XYZ);
ist kein gueltiges VHDL (klar). Aendere ich das in
content : std_logic_vector := XYZ
funktioniert natuerlich die Zuweisung
signal ram : ram_t := content;
nicht mehr. (Kann man hier irgendeinen Cast machen?) Und mit
 signal ram : std_logic_vector(depth*width-1 downto 0);
erkennt xst das nicht mehr als RAM und packt es in Flipflops...

Die Benutzung von templates aus IP-Cores entfaellt, bei sehr 
unterschiedlichen RAM-Groessen und mindestens vier Zielplattformen ist 
das zu zeitaufwendig.

Autor: walther trugget (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
steht doch im datasheet. du must nur suchen

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann kannst du mir sicher auch sagen, in welchem Datasheet ich suchen 
muss. Im xst user guide ist dieser Fall jedenfalls nicht beschrieben.

Dort sind nur Varianten gezeigt, die den RAM innerhalb der selben Entity 
mit Werten vorbelegen. Ich moechte aber einen RAM, der in einer 
component beschrieben wird von ausserhalb mit Daten belegen.

Autor: walther trugget (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
im libguide. es gibt auch noch ein weiteres paper das dieses problem 
sehr ausführlich mit versionsunterschieden und dynamischen inhalt 
(files) behandelt. ab ise 7 kannst du auch in den examples nachgucken. 
da steht auch ein bissel was. falls du mit files arbeitest, so lass dir 
gesagt sein, dass der mapper nur textfiles untersützt und keine 
binaries!

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ich oben schon schrieb, das muss auf unterschiedlichen Plattformen 
laufen, die primitives von Xilinx nutzen mir nichts.

Da alle RAM-Primitiven ausserdem eine feste Groesse haben, ist es hier 
natuerlich kein Problem, Daten per generics zu uebergeben.

Autor: walther trugget (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gib doch einfach vhdl unter google ein. da steht schon alles.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>da steht schon alles.
Ach? Du kannst sicher sein, dass ich schon länger nach einer Lösung 
gesucht habe und nicht fragen würde, wenn es bei google so einfach zu 
finden wäre.

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach Dir ein package, wo Du Deinen ram_t-Typen deklarierst.
Dann kannst Du sowohl Dein ram-Signal, das Du vorbelegen willst, sowie 
Dein generic als diesen Typ deklarieren.

Das eigentliche RAM-Vorbelegungssignal mit den Werten, die Du Deiner 
Komponente als generic übergibst, musst Du dann als constant und 
nicht als signal deklarieren, sonst bekommst Du einen Fehler vom Typ 
"The actual value associated with a generic must be a globally static 
expression", oder so ähnlich. Dämlich aber leider VHDL.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Xenu,
bloed, aber wohl nicht zu aendern, VHDL unterstuetzt ja unconstrained 
Vektoren und Arrays, nur leider nicht in der hierfuer noetigen Form, 
also zweifach unconstrained.

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.