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


von Stefan H. (stefanhanke)


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

von Xenu (Gast)


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.

von Klaus F. (kfalser)


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

von Stefan H. (stefanhanke)


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

von Joerg W. (joergwolfram)


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

von Klaus F. (kfalser)


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.

von Xenu (Gast)


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.

von Ed. (Gast)


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.

von Stefan H. (stefanhanke)


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

von Axel (Gast)


Lesenswert?

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

von Stefan H. (stefanhanke)


Angehängte Dateien:

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

von Stefan H. (stefanhanke)


Angehängte Dateien:

Lesenswert?

Hier noch mal as JPEG.
 -- stefan

von Stefan H. (stefanhanke)


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":

1
MULT_AND is an AND component used exclusively for building fast and
2
smaller multipliers. The I1 and I0 inputs must be connected to the I1 and I0
3
inputs of the associated LUT. The LO output must be connected to the DI
4
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

von Axel (Gast)


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.

von Stefan H. (stefanhanke)


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

von Axel (Gast)


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.

von Stefan H. (stefanhanke)


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

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.