VHDL Vektorlänge ermitteln

OP (Firma: www.dossmatik.de) #1484180
Lesenswert?
• ▲
▼
Ich will in meinem Code mit Hilfe einer Constanten die Größe es interen 
Puffers festlegen. Der Zugriff auf die Werte im Puffer erfolgt über die 
Adressen. In C würde man es Pointerzugriff nennen.
VHDL ist sehr streng in der Typüberprüfung. Durch eine Veränderung der 
RAM-Größe verändert sich auch die Typlänge vom Pointer.
für die Adressen 0-511 benötige ich 9 Datenleitungen und wenn ich die 
Adressen auf 0-1023 erhöhe benötige ich 10 Datenleitungen. Mathematisch 
ist das einen Berechnung mit log. Das wolle ich nicht in meine Code. 
Gibt es nicht eine Funktion oder attribute in VHDL, um die Datenbreite 
für einen Wertebereich zu ermitteln?



constant RAM_size: integer := 511;
type RAM is array (0 to RAM_size) of unsigned (7 downto 0);


signal c_ram: RAM;
signal pointer_ram:unsigned( Ausdruck downto 0);
-----------------------------^wie kann ich das hier ausdrücken?


pointer_ram<=5;
wert<=RAM( to_integer(pointer_ram));
OP (Firma: www.dossmatik.de) #1484196
Lesenswert?
• ▲
▼
Geht nicht, weil ich den Pointer mit Werten berechne, die aus unsigned 
Werten bestehen. Das ist etwas schwierig zu erklären. Ich brauche z.B. 
den Operator & für das Zusammensetzen der Adresse, der ist für integer 
nicht definiert.  Und noch einige Kniffe.
Moderator (Firma: Titel) Persönliche Seite #1484231
Lesenswert?
• ▲
▼
Dann mach die Typkonvertierung doch dort, wo du zusammensetzt...
Im harten VHDL-Leben ist es nun mal so, dass ein Index nur ein Integer 
sein darf. Warum also nicht gleich den integer als Adresse verwalten?

Oder machs so:
1
constant RAM_addrwidth: integer := 8;
2
type RAM is array (0 to (RAM_addrwidth**2-1)) of unsigned (7 downto 0);
3

4
signal c_ram: RAM;
5
signal pointer_ram: unsigned(RAM_addrwidth-1 downto 0);
Es führen tausend Wege nach RAM  ;-)

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.