Forum: FPGA, VHDL & Co. Simulationsproblem - bin ich zu blöd ?!


von TheMason (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe ein Problem mit der Simulation unter Modelsim.
Ich möchte ein Dual-Port RAM für eine Text-VGA-Ansteuerung simulieren.
Das Ram ist ein RAMB16_S9_S9. Habe den Speicher über Attribute
vorbesetzt. Beim Auslesen kommt jedoch immer nur ein Null-Byte heraus
(liest also gar nichts).
Der Einfachheit halber habe ich es mal mit einem ROM (256x1bit)
ausprobiert einfach nur die Bis die da drin stehen auszugeben. Auch
wieder 0.
Was mache ich falsch ?! Bin ich zu dumm zum simulieren ?
Hatte letzte Woche auch z.B. versucht ein 256kB unter Modelsim
nachzubauen (einfach ein array von std_logic_vector und dann 256 x 1024
als typ), damit ich das RAM auf meinem Starterkit nachbilden kann.
Fehlanzeige. (Den Quelltext zu diesem Problem werde ich noch
reinstellen)
Was mache ich falsch ? (jetzt erstmal nur auf das Dual-Port-Ram und das
Rom gesehen)

Gruß

PS. Eine Frage habe ich noch (dich besser nicht stelle :-)) Wie kann
ich den Core-Generator nutzen ? Finde in ISE den Menüpunkt nicht, und
der Architecture Wizard kanns nicht sein, der hat nur die DCMs.

von johnny (Gast)


Lesenswert?

mal ne frage. haste auch ne testbench zu deinem code geschrieben?
von wegen tackt und wann er lesen schreiben soll?
mfg

von TheMason (Gast)


Lesenswert?

die testbench ist bei beiden mit drin (vga_test1.vhdl für das dual-port
ram, und rom_sim_test_vhdl für das rom)
lässt sich auch einwandfrei simulieren aber es kommt immer null raus
egal ws ich in den attributen fürs ram bzw. rom drinstehen habe ...

von FPGA-User (Gast)


Lesenswert?

Hallo,

ich würde mal behaupten, die Attribute allein bringen
für Deine Simulation keinen Beitrag. Die werden nur
bei der Synthese verwendet.

Du musst bei der Instanziierung des RAMs/ROMs zusätzlich
zur port map eine generic map einfügen, wo Du die Inhalte
des Speichers nochmals angibst:

  TEST_ROM : ROM256X1
-- pragma synthesis OFF
   generic map (
      INIT_00 = "....",
      INIT_01 = "...."
   )

-- pragma synthesis ON
    port map (
       o => out1,
       a0 => addr (0),
       a1 => addr (1),
       a2 => addr (2),
       a3 => addr (3),
       a4 => addr (4),
       a5 => addr (5),
       a6 => addr (6),
       a7 => addr (7)
      );

"pragma synthesis off" steht dafür, dass Dein Synthese-Tool
diesen Teil nicht lesen soll, weiss nicht genau, wie bei
Deiner Software die exakte Syntax ist

von TheMason (Gast)


Lesenswert?

muß ich die definitionen denn dann 2 mal machen (einmal für simulation
mit generic map und mit attribute für die synthese) oder reicht es wenn
ich es immer mit generic map mache ?
mich wundert es nur, denn in den meisten beispielen findet man immer
nur diese attribute ohne generic map und ich kann mir nur schwer
vorstellen das die für die simulation jedesmal die ganzen zuweisungen
umschreiben ...
bin jetzt echt etwas verwirrt.

aber noch mal eben eine frage zum core-generator. wie kann ich den
verwenden. ich benutze xilinx ise und modelsim. da muß es doch ein
knöpfchen geben oder wird das doch über den architecture wizard gemacht
? (bin am verzweifeln, find das blöde ding einfach nicht ...)

von FPGA-User (Gast)


Lesenswert?

also ich habe hier ALTERA Quartus II + Modelsim ALTERA,
insofern kann ich das nicht direkt nachvollziehen,
aber bei einer Simulation eines RAM-Modells muss der
Default-Inhalt ja irgendwie in dieses Modell gelangen.

Das geht sicher nur über die Generic-Map, wenn Du
eine Instanz dieses RAMs/ROMs verwendest.
Die gleichzeitige Angabe der Attribute für die Synthese
ist natürlich etwas lästig, aber da gibts ja auch bequemere
Methoden. Wenn Du den CoreGen benutzt, dann wird sicher
eine entspr. Component + (MIF?)-File erzeugt, mit dem
Du unkompliziert sowohl bei Simulation als auch bei Synthese
arbeiten kannst.

Aber wie gesagt - hab die Software nicht hier, wie Du den CoreGen
startest weiß ich nicht.

von TheMason (Gast)


Lesenswert?

erstmal danke für die info.
hab in anderen beiträgen gesehen das man beim webpack kein core
generator dabei hat. ergo : selbermachen *mist ...

hab noch eine frage zum thema ram und simulieren.
ich habe ja auf dem spartan3 starter kit 2 * 256k*16bit ram.
in der hardware bekomme ich es mittlerweile angesprochen.
für die simulation hab ich mir auch ne komponente geschrieben die einen
typ ram definiert der die 256k * 16 bit darstellt.
in der simulation kann ich ja speicher bis zum abwinken beschreiben.
(werde den code+testbench heute abend mal posten)

bei der simulation kommt jedoch nur schrott heraus. zum einen hab ich
ein problem mit dem typ inout (da der datenbus ja bidirektional sein
muß) vornehmlich beim auslesen. das lesen ergibt ständig "z", obwohl
in dem ram was drinne steht.
hab ich da ein grundsätzliches problem (inout in verbindung mit "z")
oder ist das nur wieder eine unzulänglichkeit meinerseits ? (wie gesagt
ich poste den code heute abend).

hat jemand schon erfahrung gesammelt "große rams" zu simulieren ??

gruß
und vielen dank schonmal

von TheMason (Gast)


Lesenswert?

@fpga-user

habs mal mit den daten direkt im generic abschnitt probiert (und mit
der pragma anweisung)
aber bei der simulation kommt immer noch eine null-linie heraus.
ich verzweifel.

kein coregen, keine daten, allet mist.

von TheMason (Gast)


Lesenswert?

kann mir denn niemand einen tipp geben was ich da falsch mache ?
ich meine ein rom muß man doch auch ohne coregen instanziieren, mit
daten vorbesetzen und entsprechend simuleren können.
hat das denn noch keiner gemacht ?!

so schwer kanns doch nicht sein. und ich denke das es nur eine
kleinigkeit ist (dann würd aber auch mein dual-port ram funktionieren,
da ich da dasselbe problem habe)

danke schonmal vorab

von Tobias (Gast)


Lesenswert?

mal die unisim und simprim bibliotheken mit eingebunden ?

von TheMason (Gast)


Lesenswert?

Hallo Tobias,

danke für die Info. Das war ein Teil des Fehlers.
Der andere lag an der Initialisierung via generic map und die pragmas
für die simulation.
Hat mir auf jedenfall weitergeholfen was RAM und ROM zu simulieren.

Eine letzte Frage hätte ich noch :

Muß man immer die Attribute verwenden wenn man ein instanziiertes RAM &
ROM mit Daten vorbesetzen (im FPGA, nicht in der Simulation, die klappt
ja), oder reicht es wenn man das lediglich über die generic map macht ?

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.