Nach dem Tip von T.M. habe ich einfach mal versucht GHDL und GTKWave zum
Laufen zu bekommen.
Leider gibt es ja kein freies ModelSim für Linux!
Nun habe ich mich mal von Thomas Seite orientiert:
http://editthis.info/freefpga/Simulation
jedoch folgende Schritt funktioniert nicht:
ghdl -m -g --workdir=libs/work --warn-default-binding --warn-binding
--warn-library --warn-body --warn-specs --warn-unused ${TB_DESIGN}
/usr/lib/ghdl/bin/ghdl: command '-m' required an unit name
die Dokumentation von ghdl ist ja unter aller Sau. Wofür steht -m bzw.
welche Optionen gibt es dafuer?
badhorst@123: /tmp/led/sim$ ghdl -v
GHDL 0.24 (20060625) [Sokcho edition]
Compiled with GNAT Version: 4.1.220060630prerelease (Debian
GCC back-end code generator
Written by Tristan Gingold.
Copyright (C) 2003, 2004, 2005, 2006 Tristan Gingold.
GHDL is free software, covered by the GNU General Public License. There
is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.
Hallo,
wenn du für ${TB_DESIGN} deinen konkreten Namen der Top-Entity benutzt
müsste es eigentlich funktionieren. Ich hab es mit der 0.25'er Version
benutzt.
@T.M
${TB_Design} habe ich für eine von meinen Dateien geändert. Unter
ModelSim bekomme ich es auch simuliert.
Es ist eigentlich nur folgende Zeile, die ärger macht:
ghdl -m -g --workdir=libs/work --warn-default-binding --warn-binding
--warn-library --warn-body --warn-specs --warn-unused ${TB_DESIGN}
Wofür steht dieses ghdl -m -g??
ghdl --help
ist nicht so wirklich aussagekräftig:
usage: /usr/lib/ghdl/bin/ghdl COMMAND [OPTIONS] ...
[...]
-m [OPTS] UNIT [ARCH] Make UNIT
IVI ist nur nen graphischer Frontend für Icarus und GHDL soweit ich
weiss.
Zu der Option m:
http://ghdl.free.fr/ghdl/Make-command.html#Make-command
"...The purpose of this command is to be able to compile a design
without prior knowledge of file order. In the VHDL model, some units
must be analyzed before others (e.g. an entity before its architecture).
It might be a nightmare to analyze a full design of several files, if
you don't have the ordered list of file. This command computes an
analysis order..."
Die Hilfe ( http://ghdl.free.fr/ghdl/index.html ) ist sowieso ganz
nützlich, man sieht, die Doku ist nicht so schlecht, wie du meinst ;-)
Hat jemand schon mal eine post-fit Simulation unter Linux auf diese
Weise gemacht? Die simprim-Bilbliothek lässt sich zwar importieren,
benutzt aber selbst wiederum vital2000 die ich nirgendswo finde. Bis zum
vhd und sdf File erzeugen bin ich schon gekommen, importieren klappt
auch aber beim ghdl -m wird abgebrochen, da vital2000 nicht gefunden
wird (in simprim_SMODEL_mti.vhd).
Gruß Jörg
> benutzt aber selbst wiederum vital2000 die ich nirgendswo finde. Bis zum> vhd und sdf File erzeugen bin ich schon gekommen, importieren klappt> auch aber beim ghdl -m wird abgebrochen, da vital2000 nicht gefunden
Hat jemand schon die Erfolge bei der post fit simulation ?
Tools: ghdl und Xilinx
Ich habe es noch nicht heraus, wie ich das sdf File und die simprim
verarbeite. Nützliche Hinweise willkommen. Leider ist ghdl für die
Spezialfälle schlecht dokumentiert.
ghdl -i *.vhd
ghdl -i --work=simprim
/opt/Xilinx/13.1/ISE_DS/ISE/vhdl/src/simprims/*.vhd
ghdl -i --work=simprim
/opt/Xilinx/13.1/ISE_DS/ISE/vhdl/src/simprims/primitive/mti/*.vhd
ghdl -i --work=simprim
/opt/Xilinx/13.1/ISE_DS/ISE/vhdl/src/simprims/primitive/other/*.vhd
ghdl -m -g -Psimprim -Wa,--32 -Wl,-m32 --warn-no-vital-generic
--ieee=synopsys -fexplicit --sdf=/.=lm_cpu_map.sdf tb_lm_cpu
ghdl: unknown option '--sdf=/.=lm_cpu_map.sdf' for command '-m'
make: *** [all] Error 1
Den Modelsim habe ich mir schon die Tage als Alternative herunter
gezogen.
Funktionale Simulation bekomme ich schon hin.
Hat jemand schon postfit Simulation mit Xilinx libs mit der Altera
Modelsim geschafft?
Die GHDL Lösung würde mich trotzdem auch noch brennend interessieren.
René D. schrieb:> Hat jemand schon postfit Simulation mit Xilinx libs mit der Altera> Modelsim geschafft?
Wofür brauchst Du überhaupt eine postfit (bzw. posttranslate)
Simulation?
Duke
>> Hat jemand schon postfit Simulation mit Xilinx libs mit der Altera>> Modelsim geschafft?> Wofür brauchst Du überhaupt eine postfit (bzw. posttranslate)> Simulation?
Bei mir unterscheidet sich die Funktionale Simulation mit dem was in der
Hardware passiert.
ich habe das Problem in einem Softcore
Assembler Variante A:
-lade Konstante in Register A
-hole aus Memory(latch) in Register B
-Springe wenn Register A und B ungleich
läuft in der Simulation und auf dem FPGA
Assembler Variante A:
-hole aus Memory(latch) in Register B
-lade Konstante in Register A
-Springe wenn Register A und B ungleich
läuft in der Simulation aber nicht auf dem FPGA
Die Sache muss ich jetzt nachgehen, da beide Varianten laufen müssen. Um
den Hebel an der richtigen Stelle und sicher anzusetzen, wollte ich mit
den Verzögerungszeiten es mal simulieren.
René D. schrieb:> Um> den Hebel an der richtigen Stelle und sicher anzusetzen, wollte ich mit> den Verzögerungszeiten es mal simulieren.
Hm, und wie stellst du dir das vor? Bei einer Timing-Simulation nach dem
Routen siehst du auch erst mal nur das Design von außen als Black-Box.
Innerhalb des FPGA gibt es dann keine Strukturen mehr, wie du sie
beschrieben hast, auch keine Signal-Namen. Da siehst du nur noch LUTs,
BRAMs usw.
Da einen Fehler zu finden ist nahezu ausgeschlossen. Sowas kann man
höchstens mal machen, wenn man an den I/Os ein problem hat, was man mit
Constraints nicht festzurren kann.
Christian R. schrieb:> René D. schrieb:>> Um>> den Hebel an der richtigen Stelle und sicher anzusetzen, wollte ich mit>> den Verzögerungszeiten es mal simulieren.>> Hm, und wie stellst du dir das vor?
Das weiss ich auch noch nicht.
Es gibt ein Signal Branch was mir den Sprung anzeigt und die
Statmaschine steuert. Da wäre wichtig was auf dem Signal abgeht. Ob die
State Maschine falsch ist oder das Signal selbst nicht korrekt ist.
Christian R. schrieb:> René D. schrieb:>> Um>> den Hebel an der richtigen Stelle und sicher anzusetzen, wollte ich mit>> den Verzögerungszeiten es mal simulieren.>> Hm, und wie stellst du dir das vor?
Das weiss ich auch noch nicht.
Es gibt ein Signal Branch was mir den Sprung anzeigt und die
Statmaschine steuert. Da wäre wichtig was auf dem Signal abgeht. Ob die
State Maschine falsch ist oder das Signal selbst nicht korrekt ist.
> Da einen Fehler zu finden ist nahezu ausgeschlossen. Sowas kann man> höchstens mal machen, wenn man an den I/Os ein problem hat, was man mit
Ich habe es zumindest bis zur postsynthese Simulation geschafft. Da
brauche ich die SDF Files noch nicht. Mit etwas Geschick habe ich schon
was im Signalspiel gefunden.
So habe ich den Programmcounter gefunden und weiss, dass mein Programm
richtig abgearbeitet wird. Das ist schon mal viel wert.
Das aktuelle Problem an meinem Uart fehlt in der ASCII Folge $#N$ das
N.
Bei der Suche ist mir aufgefallen, dass der Schreibimpuls fehlt.
Den eigentlichen Fehler habe ich noch nicht gefunden. Jetzt weiss ich
jedoch wo ich suchen muss.
Hi Rene,
>> Assembler Variante A:> -hole aus Memory(latch) in Register B> -lade Konstante in Register A>> -Springe wenn Register A und B ungleich>>> läuft in der Simulation aber nicht auf dem FPGA
verstehe ich das richtig, dass sich die beiden Fälle nur in der
Reihenfolge der Assembler-Kommandos unterscheiden?
Hast Du mal den Clock testweise verlangsamt? Meistens habe ich solche
fiesen Sachen nur dann gesehen, wenn ich:
- 'Verbotene' non-synchrone Logik benutzt habe
- Clock-Skew-Warnings missachtet habe
also kurz, irgendwelche Sachen, die Laufzeitunterschiede nicht sauber
berücksichtigen (-> Glitches, die gewisse conditions triggern).
Bei einer mehrstufigen Pipeline kann man sich u.U. damit gut ins Knie
schiessen..
Gruss,
- Strubi
> verstehe ich das richtig, dass sich die beiden Fälle nur in der> Reihenfolge der Assembler-Kommandos unterscheiden?
Ja, das hast du richtig verstanden
> Hast Du mal den Clock testweise verlangsamt? Meistens habe ich solche> fiesen Sachen nur dann gesehen, wenn ich:
Nein das habe ich nicht. Das bringt mir auch nicht viel.
>> - 'Verbotene' non-synchrone Logik benutzt habe> - Clock-Skew-Warnings missachtet habe
Die Logik ist synchron aufgebaut.
Die Warnungen muss ich nochmal durchgehen ob da so etwas dabei war.
> also kurz, irgendwelche Sachen, die Laufzeitunterschiede nicht sauber> berücksichtigen (-> Glitches, die gewisse conditions triggern).> Bei einer mehrstufigen Pipeline kann man sich u.U. damit gut ins Knie> schiessen..
So was habe ich eigentlich nicht dabei. Da ist ein doofer Bug. Ich habe
auch kein CHipscope um die internen Signal in Hardware zu "fischen".
Das ist erst dumm.
ChipScope ist bei sowas auch nur bedingt einsetzbar. Klar, man kann viel
sehen, allerdings verändert jede ChipScope Instanziierung das komplette
Design, und gerade bei solch blöden Fehlern, die wahrscheinlich irgendwo
durch blödes Routing/Timing entstehen, kann man mit ChipScope auch viel
Augenwischerei betreiben. Ansonsten nehm ich dann schon auch gerne...
> durch blödes Routing/Timing entstehen, kann man mit ChipScope auch viel> Augenwischerei betreiben. Ansonsten nehm ich dann schon auch gerne...
Bitte sprechen Sie im vollständigen Satz.
René D. schrieb:> Ich habe> auch kein CHipscope um die internen Signal in Hardware zu "fischen".
Hier [1] gibt es ein Chipscope 'lite'. Scheint zwar nicht mehr gepflegt
zu werden, ist aber recht brauchbar.
Duke
[1] http://www.sump.org/projects/analyzer/
Duke Scarring schrieb:> René D. schrieb:>> Ich habe>> auch kein CHipscope um die internen Signal in Hardware zu "fischen".> Hier [1] gibt es ein Chipscope 'lite'. Scheint zwar nicht mehr gepflegt> zu werden, ist aber recht brauchbar.>> Duke>> [1] http://www.sump.org/projects/analyzer/
Mein aktueller Ansatz ist dergleiche. Die Daten über das Ethernet
versenden. Alles statische Pakete. Informationen aus dem Organismus.
Das werde ich mir mal rein ziehen. Das sieht gut aus.
Gefällt mir. Sogar eine GUI. Leider habe ich gerade keinen UART mehr
ON-Board. Zwei Leitungen werden sich finden.
Christian R. schrieb:> ChipScope ist bei sowas auch nur bedingt einsetzbar. Klar, man kann viel> sehen, allerdings verändert jede ChipScope Instanziierung das komplette> Design, und gerade bei solch blöden Fehlern, die wahrscheinlich irgendwo> durch blödes Routing/Timing entstehen, kann man mit ChipScope auch viel> Augenwischerei betreiben. Ansonsten nehm ich dann schon auch gerne...
Ja, das firmiert hier (bei mir und Kollegen) als 'Quantenmechanik'.
Wennde hinguckst, tut's, sonst nicht.
Womit ich bei komplexeren Sachen gute Erfahrungen gemacht habe: Gleich
nen JTAG TAP mit reinbauen. Das ist perfekt für coverage (abdeckung so
hoffentlich aller test cases), 'nen FT2232JTAG hat zudem fast jeder
rumliegen. Damit kreist man allerdings die Probleme nur relativ schnell
ein, Timing-Böcke sind leider jenseits.
René D. schrieb:>> Hast Du mal den Clock testweise verlangsamt? Meistens habe ich solche>> fiesen Sachen nur dann gesehen, wenn ich:> Nein das habe ich nicht. Das bringt mir auch nicht viel.
Wieso? Du wüsstest dann wenigstens, obs eine Timing-Sache (Clock Skew
o.ae.) ist. Allerdings sollten dich die Tools dazu deutlich mit
Warnungen bescheren.
Ansich sollte auch asynchrone Logik (z.B. für nen komplexeren
state-machine encoder) davon erfasst werden. Was ich allerdings auch
schon geschafft habe: Signal in der sensititivy-List vergessen,
Simulation tat, FPGA natürlich nicht (meistens ist es ja dann
andersrum). Also komplett falsch gedacht...
Viel Erfolg,
- Strubi
René D. schrieb:> Ansonsten nehm ich dann schon auch gerne...>>> Bitte sprechen Sie im vollständigen Satz.
Argh. Das sollte heißen: "Ansonsten nehm ich den schon auch gerne..."
>>> Hast Du mal den Clock testweise verlangsamt? Meistens habe ich solche>>> fiesen Sachen nur dann gesehen, wenn ich:>> Nein das habe ich nicht. Das bringt mir auch nicht viel.>> Wieso? Du wüsstest dann wenigstens, obs eine Timing-Sache (Clock Skew> o.ae.) ist. Allerdings sollten dich die Tools dazu deutlich mit> Warnungen bescheren.
Das Fitting tool sagt ich kann 130MHz die Sache betreiben und Das Board
läuft aber mit 27MHz. Sofern habe ich den Clock schon langsamer.
Timing Warungen habe ich keine.
berndl schrieb:> Wie oben schon mal angefragt: Vlt. eine unvollstaendige sensitivity> Liste? Daraus resultierend ein Latch?
Meist läuft es in der Hardware, doch für den Simulator sind die sensitiv
Listen ganz wichtig. Doch hier ist es anders herum im Simulator läuft es
aber nicht in der Hardware. Die Sensitivlisten habe ich schon überprüft.
Duke zu SUMP Leider bekomme ich das java programm nicht zum Laufen. ;-<
Caused by: java.lang.ClassNotFoundException: org.sump.analyzer.Loader
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: org.sump.analyzer.Loader. Program will
exit.
nnde hinguckst, tut's, sonst nicht.
>> Womit ich bei komplexeren Sachen gute Erfahrungen gemacht habe: Gleich> nen JTAG TAP mit reinbauen. Das ist perfekt für coverage (abdeckung so> hoffentlich aller test cases), 'nen FT2232JTAG hat zudem fast jeder> rumliegen. Damit kreist man allerdings die Probleme nur relativ schnell> ein, Timing-Böcke sind leider jenseits.
Hast du zu der Variante ein paar weiterführende Infos?
Wie geht es hinter dem Tap im FPGA weiter?
Das klingt nach einer interessanten Lösung.