Modelsim - Array

Gast #2337959
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?
Gast #2338747
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;
Gast #2338858
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
Persönliche Seite #2352602
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

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