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.
mal ne frage. haste auch ne testbench zu deinem code geschrieben? von wegen tackt und wann er lesen schreiben soll? mfg
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 ...
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
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 ...)
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.
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
@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.
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
mal die unisim und simprim bibliotheken mit eingebunden ?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.