Forum: FPGA, VHDL & Co. Modelsim - Array


von 0815 Hans-Hermann (Gast)


Lesenswert?

Moin,

ich habe nen bisschen mit Arrays und Modelsim rumprobiert und mir ist 
dabei folgendes aufgefallen. Folgendes Array bestehend aus 32-Bit 
stdlogic vektoren benötigt zur Laufzeit etwa 860mb RAM, wenn ich das 
Array aus Integer-Werten zusammenbaue werden nur noch ca 200mb 
verbraucht:
1
type m1 is array(2**20-1 downto 0) of std_logic_vector(31 downto 0);
2
type m2 is array(2**20-1 downto 0) of integer;

Es weiß nicht zufällig jemand, was Modelsim intern mit std logic 
vektoren intern anstellt, was zu dem hohen Speicherverbrauch führt?

von user (Gast)


Lesenswert?

ganz einfach, std_logic ist 9-wertige logic, also 0, 1, weak low, weak 
high usw und dazu sind halt intern 4 bit nötig, was ja auch mit dem 4 
fachen speicherverbrauch bei dir passt

von 0815 Hans-Hermann (Gast)


Lesenswert?

user schrieb:
> ganz einfach, std_logic ist 9-wertige logic, also 0, 1, weak low, weak
> high usw und dazu sind halt intern 4 bit nötig, was ja auch mit dem 4
> fachen speicherverbrauch bei dir passt

Stimmt, das klingt plausibel. Dann müsste ein Array mit einem 32-Bit 
bitvector viermal weniger Platz benötigen. Kommt allerdings wieder ein 
RAM-Verbrauch von 860mb raus. :-)
1
type m3 is array(2**20-1 downto 0) of bit_vector(31 downto 0);
2
signal memory3 : m3;

von Duke Scarring (Gast)


Lesenswert?

0815 Hans-Hermann schrieb:
> Dann müsste ein Array mit einem 32-Bit
> bitvector viermal weniger Platz benötigen. Kommt allerdings wieder ein
> RAM-Verbrauch von 860mb raus. :-)
Was da genau passiert weiß nur der Hersteller. Ich vermute das ModelSim 
auf std_logic optimiert ist, und Dein bit_vector intern als 
std_logic_vector betrachtet wird, nicht als integer. Integer sind bisher 
auf 32 Bit beschränkt, bit_vector und std_logic_vector dagegen nicht.

Um den Speicherverbrauch bei Speichermodellen zu minimieren, werden of 
nur die belegten Speicherstellen in einer verketteten Liste gespeichert. 
Passenden Code habe ich schon in SDRAM-Modellen gesehen.

Duke

von Ratgeber (Gast)


Lesenswert?

0815 Hans-Hermann schrieb:
> Dann müsste ein Array mit einem 32-Bit
>
> bitvector viermal weniger Platz benötigen.

Müsste sich aber ausmessen lassen, durch den System Monitor, meine ich, 
oder?

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

0815 Hans-Hermann schrieb:
> Es weiß nicht zufällig jemand, was Modelsim intern mit std logic
> vektoren intern anstellt, was zu dem hohen Speicherverbrauch führt?

Wie andere bereits erklärt haben, werden integer und std_logic 
unterschiedlich abgebildet. Letzterer ist ein sogenannter Aufzählungstyp 
und wird von ModelSim in einem Byte abgebildet (siehe unten). Der 
Datentyp bit ist, wenn auch vordefiniert, ebenfalls ein normaler 
Aufzählungstyp.

"An enumeration type uses either 1 byte or 4 bytes, depending on how 
many values are in the enumeration. If it has 256 or fewer values, then 
it uses 1 byte; otherwise, it uses 4 bytes."

--
Marcus

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.