Forum: FPGA, VHDL & Co. Simulation des Divider Generator 3.0


von Andreas N. (poolspieler)


Lesenswert?

Hallo zusammen,
ich habe einen Divider Core (vom Xilinx CORE Generator erzeugt) in 
meiner IP eingebunden. Soweit so gut.
Jetzt würde ich meine IP gerne mit dem Modelsim PE simulieren.
Prinzipiell funktioniert das auch, nur dass von dem Divider Core immer 0 
ausgegeben wird.
Ich habe bereits eine Support-Anfrage an Mentor gestellt.
Antwort:
1
Vom CORE Generator werden keine _synth-Dateien erstellt. Ich soll einen Xilinx Webcase aufmachen.

Das habe ich auch gemacht.
Antwort:
1
The divider generator core generator will not have any simulation models in the xilinxcorelib just like block mem ( for ex BLK_MEM_GEN_V4_3.v in ISE_DS\ISE\verilog\src\XilinxCoreLib ).
2
 
3
If you want to simulate the Divide generator core, follow the procedure given in test bench file in the generated demo_tb  folder. In your case it is tb_division.vhd.
4
See the procedure given in the top the file there is a procedure given in that file how to use the test bech to simulate the core.

im tb_division.vhd steht:
1
-- There are two versions of your core that you can use in this testbench:
2
-- the XilinxCoreLib behavioral model or the generated netlist.
3
--
4
-- 1. XilinxCoreLib behavioral model
5
--    Compile division.vhd into the work library.  See your
6
--    simulator documentation for more information on how to do this.
7
--
8
-- 2. Generated netlist
9
--    Execute the following command in the directory containing your CORE
10
--    Generator output files, to create a VHDL netlist:
11
--
12
--      netgen -sim -ofmt vhdl division.ngc division_netlist.vhd
13
--
14
--    Compile division_netlist.vhd into the work library.  See your
15
--    simulator documentation for more information on how to do this.
Die Netzliste habe ich mir auch erzeugt und mit folgenden Befel in das 
do-File des Modelsim eingefügt:
1
vcom -explicit  -93 "ipcore_dir/division_netlist.vhd"

--> Das Ergebnis ist auch auch kein anderes. Mir gehen die Ideen aus - 
ich muss/will aber "ordentlich" simulieren :-(

Hat jemand eine Idee, wie das gehen kann?

Viele Grüße,

Andreas

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Andreas N. schrieb:
> -- 1. XilinxCoreLib behavioral model
Das ist es doch, was du brauchst, denn du willst (hoffentlich) eine 
Verhaltenssimulation machen (ich würde das auf jeden Fall tun)...

von user (Gast)


Lesenswert?

hast du die Zeitbasis auf 1ps gestellt?

von Andreas N. (poolspieler)


Angehängte Dateien:

Lesenswert?

Hallo,
danke für Eure Antworten!
Die Zeitbasis steht auf 1ps:
1
vsim -voptargs="+acc" -t 1ps  -lib work work.mein_modul_sim1

division.vhd einzubinden habe ich auch schon probiert:
1
vcom -explicit  -93 "ipcore_dir/division.vhd"
--> geht aber trotzdem nicht :-(

Beim BlockRAM (welches ich erfolgreich simulieren kann) sieht es so aus:
1
vcom -explicit  -93 "ipcore_dir/dualport_blockram_synth.vhd"
2
vcom -explicit  -93 "ipcore_dir/dualport_blockram.vhd"

Man benötigt also wohl diese _synth-Datei.

Ich habe mal die automatisch generierte tb_division.vhd angehängt.
Vielleicht hat jemand eine Idee, wie man diese Information nutzen 
könnte.

Viele Grüße,

Andreas

von DuArte (Gast)


Lesenswert?

>mein_modul_sim1

zeig mal

von VHDLler (Gast)


Lesenswert?

Mein Xilinx jammert seit Kurzem genau bezüglich dieser *.Synth - 
Dateien. ISE beklagt einerseits, dass eine "duplicate design unit" 
vorläge, lösche ich diese Dateien weg, fehlen sie im Projektmanager. In 
beiden Fällen funktioniert die Synthese.

Sind die *.synth nur für die Simulation?

Ich arbeite ja nun schon eine Weile mit ModelSIM und ISIM, aber den 
Fehler hatte ich noch nicht und *.synth - Dateien nie (explicit) 
eingebunden / verwendet.

von Andreas N. (poolspieler)


Lesenswert?

VHDLler schrieb:
> Mein Xilinx jammert seit Kurzem genau bezüglich dieser *.Synth -
> Dateien. ISE beklagt einerseits, dass eine "duplicate design unit"
> vorläge, lösche ich diese Dateien weg, fehlen sie im Projektmanager. In
> beiden Fällen funktioniert die Synthese.
>
> Sind die *.synth nur für die Simulation?
Soweit ich das verstehe, sind die *_synth.vhdl und _tb.vhdl Dateien 
ausschliesslich für die Simulation.

> Ich arbeite ja nun schon eine Weile mit ModelSIM und ISIM, aber den
> Fehler hatte ich noch nicht und *.synth - Dateien nie (explicit)
> eingebunden / verwendet.
Nun, wenn du z.B. für ein FIFO (aus dem core generator) eine Testbench 
vom ISE erzeugen lässt (für Modelsim), dann wird in der *.do Datei 
automatisch die *core*_synth.vhdl und core.vhdl mit einem vcom-Befehl 
eingebunden.

Das sieht z.B. für mein Blockram so aus:
...
vcom -explicit  -93 "ipcore_dir/dualport_blockram_synth.vhd"
vcom -explicit  -93 "ipcore_dir/dualport_blockram.vhd"
...


Wegen dem Divider:
Mir ist das ganze auf den Keks gegangen.
Deshalb habe ich eine (leider etwas weniger Performante aber 
FUNKTIONIERENDE!!!) Lösung:
Ich habe den Vorschlag von Lotha Miller aufgegriffen und in mein Projekt 
übernommen.
http://www.lothar-miller.de/s9y/archives/29-Division-in-VHDL.html
Das dauert zwar einige Takte, bis das Ergebnis zur Verfügung steht, aber 
in meinem konkreten Fall ist das (noch) akzeptabel.
Und vor allem kann ich jetzt endlich wieder ordentlich simulieren!

Viele Grüße,

Andreas

von H. G. (Gast)


Lesenswert?

Entweder hat sich da was Gravierendes verändert, oder es ist ein anderes 
Problem im Busch:

Ich habe schon ISE mit Divider Core eingesetzt, simuliert und getestet. 
Ging problemlos.

von Andreas N. (poolspieler)


Lesenswert?

Gerald Hellinghaus schrieb:
> Entweder hat sich da was Gravierendes verändert, oder es ist ein anderes
> Problem im Busch:
>
> Ich habe schon ISE mit Divider Core eingesetzt, simuliert und getestet.
> Ging problemlos.

Hallo Gerald,
ich glauber eher zweiteres...
Wenn ich es "alleine" nicht hinbekommen hätte, dann würde ich es noch 
verstehen.
Aber auch mit dem Mentor-Support hat es (im ersten Anlauf) nicht 
funktioniert.
Die haben es dann hinbekommen, allerdings erst, wenn die Simulation 
mindestens 5-10ms läuft. Und wenn man "magische" Setup und Hold Zeiten 
einhält, welche aus dem Datenblatt nicht ersichtlich sind.
Ich habe ja die Version erzeugt, für die bei JEDEM Clock eine DIVISION 
durchführt werden soll. Im Datenblatt stehen aber keine "magischen" 
Zeiten, die gewartet werden müssten. Und der Ready-Ausgang ist für die 
1-Clock-Version immer HIGH.
Verstehen muss ich das nicht. Ich werde es einfach so tun, wie es in 
vielen anderen Forenbeiträgen beschrieben ist:
"schreibe den divider selbst"

ABER:
Wenn Du, Gerald, einen funktionierenden Divider am Laufen hast, dann 
würde mich schon eine kleine Testbench (Modelsim) interessieren.
Kannst Du eine posten?
Welche Versionen (ISE, Modelsim, Divider, Anzahl Clocks für Divider) 
hattest Du im Einsatz?

Viele Grüße,

Andreas

von Markus F. (Gast)


Lesenswert?

Ich hätte ein am Laufen, wenn Du magst und es noch brauchst. Allerding 
ISE 14.4. Mit 13 arbeite ich nicht mehr, zu viele bugs!

von Andreas N. (poolspieler)


Lesenswert?

Hallo frimark,
danke für Deine Antwort.
Den Core habe ich nicht zum Laufen bekommen...
Ich habe es mit reinem VHDL-Code gelöst.

Deine Lösung würde mich aber trotzdem (zur Info) interessieren - vor 
allem die Testbench dazu.

Viele Grüße,

Andreas

von J. S. (engineer) Benutzerseite


Lesenswert?

Andreas N. schrieb:
> Hallo frimark,
> danke für Deine Antwort.
> Den Core habe ich nicht zum Laufen bekommen...
Was genau ging den daran nicht? Welchen Divider hast Du genommen?

von Andreas N. (poolspieler)


Lesenswert?

Hallo Jürgen,
es ist schon einige Zeit her (und ich habe das Problem verdrängt :-)).

Problem war:
Wenn ich den Divider mit dem Modelsim (oder auch dem ISim) mit Daten 
geladen habe, dann kam als Ergebnis immer 0 raus.
Egal was ich gemacht/verändert habe.

Den Divider Core habe ich mit dem "Divider Generator 3.0" unter ISE 13.3 
erzeugt.

Wie oben schon geschrieben, bin ich mit der getakteten Version zur Zeit 
(noch) zufrieden.

Interessieren würde mich natürlich schon, ob sich der Core bei Euch 
simulieren lässt... Und wenn ja: was mache ich falsch...

Wenn ich mich recht erinnere, dann hat der Core im realen FPGA 
funktioniert. Aber ohne Simulation wollte/konnte ich ihn trotzdem nicht 
einsetzen.

Viele Grüße,

Andreas

von J. S. (engineer) Benutzerseite


Lesenswert?

Bei dem divider braucht man eigentlich nicht viel zu tun. Einfach beide 
Werte anlegen und die Latenz an Takten warten. Im ModelSim sieht man da 
irgendwann die Änderung des Ausgangwertes.

von Andreas N. (poolspieler)


Lesenswert?

Juergen S. schrieb:
> Bei dem divider braucht man eigentlich nicht viel zu tun. Einfach beide
> Werte anlegen und die Latenz an Takten warten. Im ModelSim sieht man da
> irgendwann die Änderung des Ausgangwertes.

Hallo Jürgen,
genau hier liegt das Problem.
Ich habe die Werte (damals) angelegt - und seeeeehr laaaange gewartet - 
trotzdem blieb der Ausgang des dividers "0".
Ich hatte damals auch Kontakt zum Xilinx Support - ohne ein 
befriedigendes Ergebnis.

Viele Grüße,

Andreas

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.