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

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