mikrocontroller.net

Forum: FPGA, VHDL & Co. Synthese vs Map und Simulation


Autor: Stefan Hanke (stefanhanke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

diesemal sind es zwei Fragen:

1. Die Synthese erzeugt doch eine Gatterliste mit den Primitiven und 
ihrer Konnektivität. Aber was macht dann Map? Kann es sein, dass die 
Synthese die HDL-Beschreibung auf eine Art "Zwischenformat" 
herunterbricht und Map dann das eigentliche "Technology Mapping" 
durchführt?

2. Wie macht man eine Timing-Simulation eines Designs, das eine 
nicht-synthetisierbare Komponente enthält? In diesem Fall ist es ein 
SDRAM-Modell von Micron. Wenn ich die rausschmeiße, dann müssten meine 
Testbenches auch noch den Stimulus vom SDRAM erzeugen -- das will ich 
eher nicht.

Oder: ich schmeiße es raus, gehe damit auf die Hardware und bete, dass 
es funktioniert. Ich denke, dass hier ChipScope vorhanden ist.

 -- stefan

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zu 2.:

Ich verstehe Dein Problem nicht. Du kannst doch bei einer Simulation
nichtsynthetisierbare Komponenten (SDRAM-Modell) mit dem eigentlichen 
synthetisierbaren Design verbinden und simulieren.

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1) Kann man so sagen
2) Ein SDRAM ist extern, nicht nur nicht synthetisierbar.
Du mußt eine Testbench erzeugen, welche eine Art Modell deiner 
Leiterplatte darstellt. Dieses Modell enthält dann unter anderem das 
FPGA (Modell), das SDRAM und mindestens einen Oszillator, der den Takt 
erzeugt.
Diese Module sind mit Signalleitungen verbunden, wie die richtige 
Leiterplatte.
Außerdem bracht es wahrscheinlich Test-Stimuli, also Signale an den Pins 
des FPGAs, damit die Simulation etwas sinnvolles tut.

Je nachdem was Du nun für eine Architecture an die Entity FPGA bindest, 
bekommst Du eine funktionale oder eine Timing-Simulation.

Klaus

Autor: Stefan Hanke (stefanhanke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Xenu wrote:
> Ich verstehe Dein Problem nicht. Du kannst doch bei einer Simulation
> nichtsynthetisierbare Komponenten (SDRAM-Modell) mit dem eigentlichen
> synthetisierbaren Design verbinden und simulieren.
Ja, das ist aber eine funktionale Simulation, und keine 
Timing-Simulation.

Das SDRAM-Modell enthält schon Transport-Delay Parameter, meine eigene 
Logik aber nicht.

kfalser wrote:
> 2) Ein SDRAM ist extern, nicht nur nicht synthetisierbar.
> Du mußt eine Testbench erzeugen, welche eine Art Modell deiner
> Leiterplatte darstellt. Dieses Modell enthält dann unter anderem das
> FPGA (Modell), das SDRAM und mindestens einen Oszillator, der den Takt
> erzeugt.
> Diese Module sind mit Signalleitungen verbunden, wie die richtige
> Leiterplatte.
Also trenne ich meine Logik vom SDRAM und verbinde die Teile erst wieder 
in der Testbench. Damit kann ich meinen Teil synthetisieren. Hmm, 
genauer überlegt, das muss ich quasi sowieso machen. :) Denn die 
Top-Entity wird ja später an die Pins gebunden.

> Außerdem bracht es wahrscheinlich Test-Stimuli, also Signale an den Pins
> des FPGAs, damit die Simulation etwas sinnvolles tut.
Das soll mal kein Problem sein.

> Je nachdem was Du nun für eine Architecture an die Entity FPGA bindest,
> bekommst Du eine funktionale oder eine Timing-Simulation.
Hmm. Meinst du eine mit Delay-Parametern, die andere ohne?

In diesem Zusammenhang passt eventuell der Begriff "Back Annotation"?
Kann ich nicht meine Logik synthetisieren und dann die Delay-Parameter 
zurück in mein Modell fließen lassen?

 -- stefan

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der letzte Punkt, das aus der Synthese resultierende Timing wieder in 
das Modell zurückfließen zu lassen, würde mich auch interessieren. 
Ansonsten kann ich mit GHDL immer nur eine funktionale Simulation machen 
oder muß die Werte mühsam aus dem Timing-Report abschreiben. 
Normalerweise habe ich mir immer eine Testbench zusammengebastelt, alles 
mit 1GHz (1ns Auflösung) laufen lassen und den Takt für das eigentliche 
Design mit Teiler oder DDS erzeugt. Aber das ist vielleicht auch nicht 
die optimalste Lösung.

Jörg

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn man sich ein Post-Fit Simulationsmodell erzeugt, dann werden 2 
Dateien erstellt.
Eine Datei ist das VHDL-Modell selbst, welches dann nur mehr aus 
SIMPRIM-Elementen aufgebaut ist, als Modelle von LUT, Registern usw.
Diese Datei wird compiliert und enthält eine neue Architecture für das 
FPGA-Design. Wenn alles korrekt gelaufen ist, und der Fitter keine 
Ein/Ausgänge wegoptimiert hat, dann sind die Ports identisch mit dem 
ursprünglichen Modell.
Man kann also über die Testbench (oder über eine Configuration) 
auswählen, welche Implementierung für das FPGA bei der Simulation 
verwendet wird.

Zusätzlich wird eine SDF-Datei erstellt. Diese enthält das die 
Verzögerungen für alle SIMPRIM-Elemente und zwar 3 mal, minimal,typisch 
un maximal.

Wenn man dem VHDL-Simulator die SDF-Datei angibt, dann verwendet er für 
die Simulation die Verzögerungen aus der Datei, ansonsten simuliert man 
ohne Delay oder mit den Default-Werten des Elements.

Der ISE-Simulator macht diese Dinge automatisch und versteckt den ganzen 
Mechanismus.

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> Ich verstehe Dein Problem nicht. Du kannst doch bei einer Simulation
>> nichtsynthetisierbare Komponenten (SDRAM-Modell) mit dem eigentlichen
>> synthetisierbaren Design verbinden und simulieren.

>Ja, das ist aber eine funktionale Simulation, und keine
>Timing-Simulation.

>Das SDRAM-Modell enthält schon Transport-Delay Parameter, meine eigene
>Logik aber nicht.

Wenn Du von Deinem Design ein Post-Fit-Simulationsmodell erzeugen lässt,
sind da freilich Verögerungszeiten mit drin, also ist das eine 
Timingsimulation.

Autor: Ed. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau gesagt, erzeugt doch die Synthese eine Netzlise auf RTL-Ebene, 
also eine Abbildung auf Register, Multiplexer, Addierer, ALU's usw..

Die die Übersetzung in die Gatterebene (Flipflops, logische Grundgatter) 
erfolgt anschließend mit dem Translate-Prozess. Oder habe ich die Doku 
falsch gelesen/interpretiert? ;)

Gruß Ed.

Autor: Stefan Hanke (stefanhanke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ed. wrote:
> Genau gesagt, erzeugt doch die Synthese eine Netzlise auf RTL-Ebene,
> also eine Abbildung auf Register, Multiplexer, Addierer, ALU's usw..
>
> Die die Übersetzung in die Gatterebene (Flipflops, logische Grundgatter)
> erfolgt anschließend mit dem Translate-Prozess. Oder habe ich die Doku
> falsch gelesen/interpretiert? ;)

Synthese an sich ist der Prozess von einer Verhaltensbeschreibung auf 
eine Strukturbeschreibung. Auf welcher Ebene das geschieht, ist erstmal 
egal. Das Endergebnis ist dann eine Netzliste, die Instanziierungen und 
deren Konnektivität enthält. Die Entities stammen aus der UNISIM 
Bibliothek (Xilinx). Da gibts keine Addierer, auch keine Register. 
Register sind einfach ein Haufen DFF's.

Translate (bei Xilinx "ngdbuild") nimmt die Netzliste und übersetzt 
diese in ein Modell, dass SIMPRIM-Primitiven benutzt. Das ist ziemlich 
schwammig in der "Development System Reference Guide", da sprechen die 
von "NGD Primitives"...

Map schließlich nimmt die "translated" Netzliste und wählt dann 
Komponenten des gewünschten FPGAs aus, die diese implementieren.

@kfalser:
Also nachdem ich meine ganzen Testbenches angepasst habe, war der 
Nachmittag vorbei. Vielen Dank für den Hinweis, dass das SDRAM 
(natürlich...) separat ist und nicht im Design eingebettet.

> Der ISE-Simulator macht diese Dinge automatisch und versteckt den ganzen
> Mechanismus.
Das Design wird jetzt implementiert, und ich habe eine SDF-Datei, nur 
leider findet die der ISE nicht (flascher Name...). Das schaue ich mir 
morgen an.

Wie kann ich sicher feststellen, ob tatsächlich Timinginformationen 
benutzt werden? Nach einer Taktflanke hätte ich erwartet, dass 
wenigstens eine klitzekleine Verzögerung bei den Ausgängen auftritt -- 
da war aber nix.

 -- stefan

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... und dem ist nicht so? Ist die Auflösung groß genu gewählt?

Autor: Stefan Hanke (stefanhanke)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Axel wrote:
> ... und dem ist nicht so? Ist die Auflösung groß genu gewählt?

Eigentlich schon.

Im ModelSim kann ich wenigstens simulieren, der ISE Simulator (Fuse) 
findet angeblich ein eigenes Package nicht.

 -- stefan

Autor: Stefan Hanke (stefanhanke)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch mal as JPEG.
 -- stefan

Autor: Stefan Hanke (stefanhanke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich revidiere meine Sicht der Synthese. Erstens, xst bekommt mittels der 
"-p" Kommandozeilenoption den FPGA-Typ nebst Packaging und Speedgrade 
mitgeteilt. Zweitens, die Synthese hat die Möglichkeit, Entscheidungen 
des Mappers vorneweg zu treffen, indem ganz bestimmte Instanzen von 
Primitiven benutzt werden. Ein synthetisierter 18-Bit Addierer z.B. ist 
aus Instanzen der "MULT_AND", "XORCY", "MUXCY" etc. aufgebaut. In der 
"Libraries Guide" steht dann bei "MULT_AND":

MULT_AND is an AND component used exclusively for building fast and
smaller multipliers. The I1 and I0 inputs must be connected to the I1 and I0
inputs of the associated LUT. The LO output must be connected to the DI
input of the associated MUXCY, MUXCY_D, or MUXCY_L.

Das "MULT_AND" ist in der funktionalen Kategorie "Logic Primitive" als 
"Primitive" eingestuft. Allerdings steht dann woanders, dass gewisse 
Primitiven nicht einfach so vewendet werden können -- darunter alle 
reservierten ("dedicated") Primitiven wie "MULT_AND".

Synthese an sich würde ich eher Technologie-unabhängig (aber immer noch 
Hersteller-abhängig) sehen, aber irgendwann muss das Ganze auf die 
verfügbare Hardware runtergebrochen werden. Mapping ist wohl zu blöd, 
für Teile der Logik die Carry-Chains der CLB-Slices zu benutzen, oder es 
ist einfach einfacher, die Synthese die Entscheidungen treffen zu 
lassen.

Irgendwie scheint hier auch ein Bruch zwischen ASIC-Synthese und 
FPGA-Synthese zu sein. FPGA-Synthese muß zielgerichtet auf die 
entsprechende Hardware sein, bei ASICs gibt es prinzipiell keine 
Einschränkungen -- lies: ich hab keine Ahnung ;-) Da habe ich mir wohl 
mit dem Lesen von ASIC-Büchern einen Bärendienst erwiesen.

Das ist hier natürlich der Spezialfall des Addierers, bei Logik, der die 
Synthese keine spezielle Bedeutung zumessen kann, sieht das bestimmt 
anders aus. Hier wird die Synthese wohl auf irgendwelche 
UNISIM-Primitiven zurückgreifen, die nicht direkt an Hardware gekoppelt 
sind -- also "normale" Primitiven oder Makros.

Zur Timing-Simulation komme ich wahrscheinlich erst wieder am Dienstag 
:-/

 -- stefan

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HM, ich verstehe nicht genau, was Du sagen willst: Eine FPGA-Hardware 
ist eben nur nur auf der logischen Ebenen universell. Auf der 
Gatterebene ist eben jeder anders. Denke mal an den Virtex mit PowerPC 
sowie schon die unterschiedlichen LUT-Breiten oder was weiss ich. Ich 
bin eigentlich ganz froh, daß man FPGAs mittlerweile auf der 
abstrahierten Ebene entwerfen kann, statt wie früher, auf Gatterebene zu 
designen.

Ach: Nebenbei gesagt wurden früher manche ASICs auch auf fixen 
Logizellen / Gattern gemacht und nur die letzten Metallisierungsmaske 
war frei nutzbar.

Autor: Stefan Hanke (stefanhanke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Axel wrote:
> HM, ich verstehe nicht genau, was Du sagen willst:
Sorry. Mein Ausdruck ist halt unter aller Sau. :-/

> Eine FPGA-Hardware
> ist eben nur nur auf der logischen Ebenen universell. Auf der
> Gatterebene ist eben jeder anders. Denke mal an den Virtex mit PowerPC
> sowie schon die unterschiedlichen LUT-Breiten oder was weiss ich. Ich
> bin eigentlich ganz froh, daß man FPGAs mittlerweile auf der
> abstrahierten Ebene entwerfen kann, statt wie früher, auf Gatterebene zu
> designen.
Ja, das stimmt. Was mir nicht ganz klar war, dass natürlich auch andere 
Hersteller als Xilinx ordentliche Synthesewerkzeuge für ihre 
FPGA-Bausteine herstellen können. Die Application Note 215
http://direct.xilinx.com/bvdocs/appnotes/xapp215.pdf
enthält diesbezüglich Vergleiche zwischen drei versch. 
Synthesewerkzeugen.

Der Punkt ist: Technology Mapping wird nicht vollständig durch den 
Prozess des Mappings durchgeführt. Die Synthese nimmt die wirklich 
wichtigen Entscheidungen vorneweg. Danach gibt es weniger 
Freiheitsgrade, weil das Modell strukturorientiert vorliegt und nicht 
mehr verhaltensorientiert.

Apropos Mapping: Kann man komplett auf die Toolchain von Xilinx 
verzichten und alles mit Tools von Drittherstellern durchführen? Z.B. 
kann man eine Evaluation Version der Suite "Synplify" herunterladen. 
Lohnt da ein Blick rein?

> Ach: Nebenbei gesagt wurden früher manche ASICs auch auf fixen
> Logizellen / Gattern gemacht und nur die letzten Metallisierungsmaske
> war frei nutzbar.
Meinst du den sog. "Standardzellen-Entwurf"?

 -- stefan

Autor: Axel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin mir nicht mehr sicher, ob das der Standardzellentwurf war, bzw 
die Bezeichnung so das beschreibt, was ich meine - ist schon recht lange 
her.

Autor: Stefan Hanke (stefanhanke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Falser wrote:
> Man kann also über die Testbench (oder über eine Configuration)
> auswählen, welche Implementierung für das FPGA bei der Simulation
> verwendet wird.
>
> Zusätzlich wird eine SDF-Datei erstellt. Diese enthält das die
> Verzögerungen für alle SIMPRIM-Elemente und zwar 3 mal, minimal,typisch
> un maximal.
>
> Wenn man dem VHDL-Simulator die SDF-Datei angibt, dann verwendet er für
> die Simulation die Verzögerungen aus der Datei, ansonsten simuliert man
> ohne Delay oder mit den Default-Werten des Elements.

Yupp. Es ist genauso, wie du es beschreibst. :)
Vielen Dank.

 -- stefan

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.