Forum: FPGA, VHDL & Co. Schaltungssimulation mit XNetSim


von Alexander S. (0x6c657861_le)


Lesenswert?

Hallo,

ich würde euch gerne XNetSim vorstellen.
Dabei handelt es sich um einen HDL-Simulator, welchen ich entwickelt 
habe.  Anders als GHDL oder iverilog enthält er keinen Parser. 
Stattdessen werden Xilinx Netzlisten simuliert. Man erzeugt sich mit 
Xilinx utilities eine Netzliste im EDIF format und kann diese dann mit 
XNetSim in eine cpp-Datei umwandeln.  Diese kann dann mit gcc kompiliert 
werden und mit einer in C++ geschriebenen Testbench gelinkt werden.
XNetSim ist im allgemeinen deutlich performanter als GHDL in der 
Ausführung, allerdings langsamer bei der Kompilierung.  Ein Vorteil 
gegenüber GHDL die "Bug-kompatibilität" zum Xilinx synthesizer. 
Außerdem ist das erstellen von Testbenches C++ komfortabler, 
beispielsweise lässt sich bequem eine Binärdatei schreiben oder lesen.
Leider bietet XNetSim zur Zeit keinen Support zum Ausgeben von 
.vcd-Dateien und damit kann auch kein GtkWave zur Visualisierung 
verwendet werden.

Projektseite: http://xnetsim.sourceforge.net/

von Ottmar (Gast)


Lesenswert?

Ich hab mir das mal angeschaut. Es gibt einfach viel zu viele 
funktionale beschränkungen.

Warum keine umsetzung EDIF->SystemC netzliste mit darunterliegender 
library für die primitives? Fertig.

* alles drin (asynchrone set's, beliebige anzahl von clock's ...)
* simulations kernel dabei, inclusive ausgabe von waves
* Standardisiert!!!

Wenn du zeit hast, wäre der weg über die backannotierte vhdl/verilog 
netzliste mit SDF timing sogar noch besser. Damit könnte man sogar das 
Zeitverhalten mit reinbringen.

von Klaus F. (kfalser)


Lesenswert?

Ottmar schrieb:
> Wenn du zeit hast, wäre der weg über die backannotierte vhdl/verilog
> netzliste mit SDF timing sogar noch besser. Damit könnte man sogar das
> Zeitverhalten mit reinbringen.

Warum sollte man das nochmal ausprogrammieren?
Das macht doch ein VHDL Simulator?

von Ottmar (Gast)


Lesenswert?

Ziel des TO ist ein C++ netzlistensimulator!

von Alexander S. (0x6c657861_le)


Lesenswert?

Primäres Ziel von XNetSim ist Performance.
Ich habe zwar noch nie mit SystemC gearbeitet, deswegen kann ich jetzt 
falsch liegen - aber ich vermute, dass die Benutzung einer 
Primitivlibrary für SystemC um Größenordnungen langsamer wäre 
(vermutlich langsamer als GHDL).
Die Performance des Simulators kann entscheidend sein wenn man größere 
Systeme über längere Zeit simulieren muss (beispielsweise einen 
Hardwareraytracer).

von Klaus F. (kfalser)


Lesenswert?

Ich möchte deine Arbeit nicht schlecht machen, weil Du sicher viel Zeit 
hineingesteckt hast, aber meiner Meinung nach fehlt wahrscheinlich der 
Nutzen.

Das Szenario ist doch eigentlich folgendes :
1) Man entwickelt ein VHDL oder Verilog Programm und debuggt/verifiziert 
es mittels VHDL (Verilog) Testbenches.
Dabei kann man verschieden Ebenen der Abstraktion verwenden, am Ende hat 
man RTL Modelle, welche die Synthese ersteht.

2) Man synthetisiert die Modelle und bekommt eine Netzliste. Will man 
diese Netzliste verifizieren um die Synthese zu kontrollieren, dann ist 
es doch einfacher, die bestehenden Testbenches wiederzuverwenden, welche 
man im Schritt 1) ohnehin entwickelt hat. Die Testbenches neu zu 
schreiben ist aufwendig und fehleranfällig, weil man nicht weiß, ob sie 
mit den Originalen übereinstimmen.
Ein Debuggen auf dieser Ebene ist komplex und aufwändig, deshalb macht 
man eines Simulation an dieser Stelle in der FPGA-Welt eh nur, wenn man 
irgendwelche unerklärbaren Probleme hat. Das ist wie beim normalen 
Programmieren, zuerst ist immer der Compiler schuld, aber am Ende findet 
sich meistens eine andere Erklärung.

3) Man routet das Design und bekommt wieder eine Netzliste, diesmal mit 
den Timinginformationen.
Es gelten wiederum alle Argumente aus Schritt 2).

Etwas anderes wäre es, wenn man direkt in System C entwickelt und die C 
Testbenches schon hat, aber darüber kenne ich mich überhaupt nicht aus.

von Alexander S. (0x6c657861_le)


Lesenswert?

Die Idee an XNetSim ist, dass man die Testbenches eben nicht in VHDL 
schreibt. Man überspringt also deinen "Schritt 1" und muss daher auch 
keine bestehenden Testbenches neu entwickeln.
Das Debuggen der Netzliste ist nicht zwingend komplizierter als das 
Debuggen von VHDL-Code. Natürlich hat man beim Debuggen von VHDL-Code 
mehr Möglichkeiten interne Signale anzuzeigen, da zu diesem Zeitpunkt 
noch genügend semantische Information (Signalname/-typ, 
Designhierarchie) vorhanden ist. Dies lässt sich allerdings lösen indem 
man zum Debuggen mit XNetSim eine spezielle Netzliste synthetisiert, 
welche interne Signale nach aussen leitet. Eine Möglichkeit ist die 
Verwendung des C-Präprozessors (#ifdef XNETSIM_DEBUG ...).
Ich finde dass C++ eine wesentlich mächtigere und komfortablere Sprache 
zur erstellung von Testbenches ist als VHDL.  Alternativ zu XNetSim 
könnte man natürlich auch Verilog/C++ oder SystemC einsetzen.
Ich möchte nochmals betonen dass es bei XNetSim vor allem Performance, 
Bug-kompatibilität zum Xilinx synthesizer und Benutzbarkeit geht. Diese 
drei Punkte konnte mir bisher keine Simulationsumgebung bieten. SystemC 
finde ich persönlich unbenutzbar - es stellt für mich keine Alternative 
dar.

von Klaus F. (kfalser)


Lesenswert?

Alexander Schade schrieb:
> Das Debuggen der Netzliste ist nicht zwingend komplizierter als das
> Debuggen von VHDL-Code

Das ist ein bischen als ob man sagen würde:
Das Debuggen von Assemblerprogrammen ist nicht komplizierter als das 
Debuggen von C/C++ Programmen.

> Natürlich hat man beim Debuggen von VHDL-Code
> mehr Möglichkeiten interne Signale anzuzeigen, da zu diesem Zeitpunkt
> noch genügend semantische Information (Signalname/-typ,
> Designhierarchie) vorhanden ist.

Es geht nicht nur um die Darstellung interner Signale, es geht um die 
Korrektheit des Designs selbst. Man kenn in VHDL nicht initialisierte 
Signale oder Konflikte finden (std_logic unterscheidet zwischen mehr als 
0 und 1), man kann Bereichsüberläufe finden, usw.
In der Netzliste hast Du nur mehr 1 oder 0.
Deshalb kann man auf Schritt 1) (siehe oben) eben nicht verzichten.

> Ich finde dass C++ eine wesentlich mächtigere und komfortablere Sprache
> zur erstellung von Testbenches ist als VHDL.
Darf ich fragen, wieviel Erfahrung Du mit VHDL und FPGA Entwurf hast?

> Ich möchte nochmals betonen dass es bei XNetSim vor allem Performance,
> Bug-kompatibilität zum Xilinx synthesizer und Benutzbarkeit geht.

Performance kann sein, das kann ich nicht beurteilen. Diese geht aber 
eben zu Lasten der Information, die man aus so einer Simulation 
herausbekommt.
Wie gesagt, ich möchte Dein Programm nicht schlecht machen, aber Du hast 
es hier vorgestellt und damit zur Diskussion gestellt und ich sehe die 
Benutzbarkeit eben nicht.

von Alexander S. (0x6c657861_le)


Lesenswert?

> Wie gesagt, ich möchte Dein Programm nicht schlecht machen, aber Du hast
> es hier vorgestellt und damit zur Diskussion gestellt und ich sehe die
> Benutzbarkeit eben nicht.

Das ist richtig, ich habe mein Projekt hier zur Diskussion gestellt. Ich 
habe gegen Ihre Meinung auch überhaupt nichts einzuwenden. Viel mehr 
bedanke ich mich für Ihr Feedback und würde mich freuen, wenn sich auch 
noch andere zu diesem Thema äußern.

von René D. (Firma: www.dossmatik.de) (dose)


Lesenswert?

habe gegen Ihre Meinung auch überhaupt nichts einzuwenden. Viel mehr
> bedanke ich mich für Ihr Feedback und würde mich freuen, wenn sich auch
> noch andere zu diesem Thema äußern.

Komentar:
Als Ausgabefile eignet sich das Format ghw für VHDL besser.


Eine C++ Simulator als Ziel.

Dazu muss ich jein sagen.
SystemC ist eine Verrecker geworden. Das hast du selber schon so 
eingesehen. Wie der Simulator intern läuft ist eine Frage die fast 
uninteressant ist. Wichtig ist das Simulierte muss mit dem was gefittet 
wird übereinstimmen.



Ich komme mit GHDL gut zurecht.
GHDL hat auch eine C Schnittstelle.
http://www.myhdl.org/doku.php/dev:vhdl_cosim
Diese kann nicht alles und ist auch nicht sonderlich dokumentiert.


Ich würde mich freuen, wenn es eine Ergänzung zu GHDL wäre. Gerade die 
UNISIM lässt sich bescheiden simulieren. Da hat Xilinx bei 
Herstellerspezifischen Komponenten den VHDL Code nicht ganz sauber.
Als Intergation mit GHDL gäbe es eine Kampftwertsteigerung.
Dann hättes du einen Teil beigetragen und kannst bereits wichtige 
Komponenten mit nutzen, als wieder ein Simulator unter den Simulatoren 
die nicht wieder alles können. Auch die Entwickler der "Freien Tools" 
müssen sich organisieren und zusammenarbeiten.

Generell:
Eine Schnittstelle zu C finde ich ganz gut.
Die Hohheit muss VHDL haben.So kann man am Anfang Komponenten ich C 
schreiben und Simuliern und nach und nach die in C geschriebenen 
Komponenten durch VHDL ersetzen.
Schön wäre es, wenn es noch ein ordentliche Dokumentationstool wie UML 
oder ähnliches gebe.

von Alexander Tietzel (Gast)


Lesenswert?

Da ja hier viele den Nutzen nicht gesehen haben, ich habe da womöglich 
einen:
In der Firma haben wir ein System, dass zu einem Teil aus FPGA besteht 
zum anderen einen Prozessor einsetzt. Ich glaube ich werde mir XNetSim 
aus genau einem Grund genauer ansehen: er eignet sich vermutlich dazu 
das Zusammenspiel zwischen unserem Prozessor und dem FPGA zu debuggen. 
Hauptsächlich um unsere Software zu debuggen haben wir die 
Funktionalität, die im FPGA abläuft noch einmal in C nachgeschrieben 
(mit all dem Aufwand und der Fehlerträchtigkeit). Dies ließe sich durch 
XNetSim vermeiden, wenn ich die Netzlisten dazu nutzen kann ein 
Softwaremodell des FPGAs zu erstellen.
Also danke für die Arbeit, ich bin mal gespannt, wann ich dazu komme. Es 
könnte ein Baustein sein, den ich schon lange gesucht habe! Zum Thema 
Verifizierung des Designs schließe ich mich den Gedanken der anderen 
Teilnehmer hier an. Wir haben begonnen mit Typen in VHDL sehr penibel zu 
arbeiten, da dies häufig auch schon Hinweise auf Designfehler liefern 
kann.

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.