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
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.
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
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
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
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.
>> 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.
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.
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
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
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
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.