Frage:
Womit kompilieren / synthetisieren HDLs?
Jake
2020-05-05 03:59:03 UTC
view on stackexchange narkive permalink

Ich bin Softwareentwickler. Als Programmierer habe ich ein Verständnis dafür, was mein Compiler für mich tut, da ich manuell eine genaue Textdarstellung dessen geschrieben habe, was er ausgibt (z. B. Assembly). Für genaue Details der Ausgabe kann ich mir die ELF / COFF / MachO-Spezifikationen ansehen (z. B. den Dateityp, in den mein Code übersetzt wird, die Ergebnisse können je nach Sprache variieren). Um herauszufinden, wie die Codierungen der Anweisungen lauten, kann ich in der Bedienungsanleitung meines Prozessors nachsehen. Das gibt mir genug Informationen, um die Art der Daten zu verstehen, die der Compiler ausgibt. Es gibt mir auch das Vokabular, Fragen wie "Wie überprüfe ich Details einer ELF-Datei?" Zu stellen, und diese Frage ist relativ gut formuliert. Ich könnte auch fragen: "Wie sehe ich die von meinem Compiler generierte Assembly aus?", Und diese Frage wäre wohlgeformt. Schließlich werden die in der ELF-Datei angegebenen Bytes in den Speicher gestellt, und der Prozessor führt jeden Befehl der Reihe nach aus, und ich verstehe die Semantik jedes Befehls.

Die entsprechenden Schritte / Fragen sind mir für ein FPGA völlig unklar. Ich weiß nicht, wohin Verilog oder VHDL übersetzt werden. Ich weiß nicht, mit welchen zugrunde liegenden Grundelementen das FPGA arbeitet. Ich weiß nicht, wie ich Fragen wie die beiden oben formulierten Fragen stellen soll, weil mir nur die Worte fehlen, die ich stellen kann. Es mag sein, dass gleichwertige Fragen in diesem Zusammenhang keinen Sinn ergeben, aber ich habe derzeit keine Möglichkeit, dies zu wissen. Ich weiß nur, dass ich Verilog schreiben kann und es dann auf einem Simulator oder einem FPGA ausgeführt wird.

Ich schreibe Verilog, das dann zu ... etwas synthetisiert wird? Was ist das für etwas? Ist es eine Datei, die ich einsehen kann? Gibt es ein Standardformat, das ich nachschlagen kann? Wenn ich beispielsweise selbst einen Simulator schreiben wollte, welches Format würde mein Simulator verwenden?

Danach wird der synthetisierte Ausgang auf ein FPGA programmiert.Welche Grundelemente verwendet das FPGA?Wenn dies ein eingebettetes Gerät wäre, würden Bytes im Allgemeinen roh in Flash oder eine Art Speicher geschrieben.Gibt es ein Äquivalent für FPGAs?Vielleicht wäre eine abstraktere und beantwortbarere Frage: "Welche Bytes gehen über den Schreibvorgang, wenn ein FPGA programmiert wird?"

Ich wollte eine lange Antwort schreiben, aber ich fand diese, die die Dinge viel besser erklärt, als ich konnte.Beachten Sie, dass dieser Prozessablauf speziell für Xilins-FPGAs gilt, jedoch für alle großen FPGA-Anbieter ähnlich ist.Die 3 Hauptschritte sind 1) Designeintrag (Schreiben des VHDL / Verilog-Codes), 2) Synthese und 3) Implementierung.Die anderen beiden Schritte sind funktionale (logische) und Timing-Simulationen.Die Timing-Simulation ist normalerweise der letzte Schritt.https://www.xilinx.com/support/documentation/sw_manuals/xilinx10/isehelp/ise_c_fpga_design_flow_overview.htm
Im Allgemeinen ist die tatsächliche Bedeutung eines FPGA-Bitstroms für den FPGA-Hersteller proprietär und geheim. Ein Ingenieur verfügt lediglich über Werkzeuge, um diese aus verschiedenen Ebenen der Entwurfseingabe zu erstellen, die Ausgabe bestimmter Teile eines Werkzeugflusses im frühen bis mittleren Stadium zu überprüfen und zu dokumentierenwie man den Bitstrom in den Chip bekommt.Wenn Sie auf einer niedrigeren Ebene spielen möchten, ist eine der wenigen moderat modernen Optionen das Gitter iCE40, für das die Bitstream-Bedeutung so detailliert bekannt ist, dass eine Open-Source-Toolchain existiert.
Beachten Sie, dass Sie einen Simulator schreiben können, indem Sie den Verilog in ein anderes Backend kompilieren.Schauen Sie sich "Verilator" an, der es zu C kompiliert.
Sieben antworten:
#1
+23
The Photon
2020-05-05 04:28:39 UTC
view on stackexchange narkive permalink

Genau wie eine prozedurale Programmiersprache mehrere Schritte (Kompilieren, Zusammenstellen, Verknüpfen) durchläuft, um eine ausführbare Datei zu erstellen, müssen HDLs mehrere Prozesse durchlaufen, bevor eine verwendbare Konfigurationsdatei für das FPGA generiert wird. Dazu gehören

  • Synthese --- Konvertieren Sie den HDL-Code in eine Netzliste, die Verbindungen zwischen logischen Elementen beschreibt.

  • Mapping --- Konvertieren Sie die Netzliste in eine verfeinerte Netzliste, die Ressourcen verwendet, die tatsächlich auf Ihrem FPGA-Gerät verfügbar sind.

  • Ort und Route --- Wählen Sie aus, welche der tatsächlichen Ressourcen auf dem Gerät für jedes der erforderlichen Elemente in der Mapper-Ausgabe verwendet werden sollen, und wählen Sie aus, welche Routing-Ressourcen verwendet werden, um sie miteinander zu verbinden.

  • Bitdatei-Generierung --- Konvertieren Sie die Ausgabe von Ort und Route in das Format, das tatsächlich zum Programmieren des Geräts verwendet wird.

Wenn Sie also fragen, was die Ausgabe der Synthese ist, meinen Sie, was die Ausgabe des ersten Schritts dieses Prozesses ist, dann ist es eine Zwischendatei, die als Eingabe für den Mapper verwendet wird. Wenn Sie meinen, was die Ausgabe des gesamten Prozesses ist, ist es eine Bitdatei , mit der das FPGA alle seine Logik- und Routing-Ressourcen konfigurieren kann.

Gibt es eine Erklärung für die irgendwo verwendeten Bitefile-Formate?Woher weiß ich, wenn ich eine Karte habe, welche Bits im Bitdateiformat vorliegen sollen?
Irgendwo muss das Engineering-Team des FPGA-Herstellers über ein solches Dokument verfügen.Aber AFAIK wird nicht häufig mit Kunden geteilt.Wenn Sie es rückentwickeln möchten, können Sie einen einfachen Entwurfseditor (Xilinx, der zumindest zur Bereitstellung eines solchen Tools verwendet wird) verwenden und eine kleine Änderung an einem Entwurf vornehmen, um dann zu sehen, wie sich dies auf die Bitdatei auswirkt.
Ich habe die Bitdateidefinition für einige der frühen Xilinx-Geräte (2000, 3000-Serie) irgendwo in meinen Archiven.Aber es ist wahrscheinlich auf einer 5-1 / 4-Zoll-Diskette.
@SteveSh, IIRC selbst in den Tagen der ursprünglichen Virtex-Teile waren die Informationen verfügbar, oder zumindest die Dokumentation enthielt genügend Details zu den verfügbaren Ressourcen, sodass Sie eine gute Vorstellung davon bekommen konnten, wie sie aussehen würden.
Was sind die Hoffnungen für einen Spartan-6 oder einen de10?
@Jake, Wenn Sie versuchen, einen Simulator zu schreiben, sollten Sie sich lieber den Ort und die Routenausgabedatei als die Bitdatei ansehen.
Für die xilinx 7-Serie ist dies im Detail in Kapitel 5 eines der Anwendungshandbücher angegeben: https://www.xilinx.com/support/documentation/user_guides/ug470_7Series_Config.pdf Es sieht so aus, als wäre die Bitdatei nur eine Folge von Schreibvorgängenwelche Register für den FPGAs-Konfigurationsschreibcontroller zu steuern sind.
Dazu gehört Spartan 7, das entsprechende Dokument für Spartan 6 lautet: https://www.xilinx.com/support/documentation/user_guides/ug380.pdf
Dies entspricht jedoch der ELF-Spezifikation.Hier erfahren Sie, wie Sie Dinge in den Speicher laden, aber nicht, welche Bedeutung die von Ihnen geladenen Daten haben.
Es gibt ein Standard-Bitdateiformat (JEDEC) (Dateierweiterung .jed), das für kleine (normalerweise auf EEPROM / Flash basierende) programmierbare Geräte (wie Power Sequencer) immer noch gebräuchlich ist, obwohl es erstmals in den 80er Jahren unter http: // www erscheint.pldtool.com / pdf / jesd3c_jedecfmt.pdf
Tolle Informationen an alle!Das hat die Dinge für mich wirklich geklärt.Ich komme aus der Open-Source-Natur der Software, die ich verwendet habe, bevor ich hier das Gleiche erwartet habe.Was für eine andere Welt!
@Jake Es gibt mehrere laufende Bemühungen für das Reverse Engineering von Bitstream-Formaten, zum Beispiel http://www.clifford.at/icestorm/ (enthält Links zu anderen Projekten im unteren Bereich).Insbesondere icestorm verfügt über eine gut lesbare Dokumentation und ist eine der „einfacheren“ FPGA-Familien, sodass es relativ einfach zu verstehen ist.
Danke, das ist hilfreich für mein Verständnis!Dies erinnert mich an XOrg und den Versuch, Dinge für NVidia-GPUs zurückzuentwickeln lol.
#2
+16
MarkU
2020-05-05 07:34:06 UTC
view on stackexchange narkive permalink

Register Transfer Logic (RTL) ist das Ergebnis der ersten Übersetzungsphase, bevor es den herstellerspezifischen Ressourcen zugeordnet wird, die nicht zwischen Anbietern oder sogar zwischen verschiedenen FPGAs desselben Anbieters portierbar sind. Im Wesentlichen zeigt RTL sowohl die kombinatorische Logik als auch die synchronen Register (D-Flip-Flops), so dass Zustandsmaschinen erkennbar sind. RTL ist zwischen Altera und Xilinx ziemlich konsistent und wahrscheinlich die interessanteste und nützlichste Phase für die Inspektion. Syntheseprobleme werden erst in der RTL-Phase sichtbar, und das Design ist immer noch erkennbar. Sobald es sich um ein herstellerspezifisches Mapping handelt, wird es zerlegt und verschlüsselt. Der Versuch, einen chipspezifischen Bitstrom zu dekodieren, ist kostenintensiv, kostengünstig und nutzlos, wenn Sie zu einem anderen Anbieter oder sogar zu einem FPGA anderer Größe in derselben Familie wechseln. Sie können sehen, was Sie auf RTL-Ebene sehen müssen.

Es ist immer empfehlenswert, Ihren neu entwickelten Verilog- oder VHDL-Code zu testen, indem Sie ihn in einem Prüfstand oder einem einfachen Modul auf oberster Ebene instanziieren und den RTL-Code überprüfen. Xilinx ISE eignet sich sehr gut zur Überprüfung von RTL als Schaltplan (obwohl manchmal Dinge übersehen werden). Die häufigsten Probleme sind:

  • 1-Bit-Netze, in denen ein Bus vorgesehen war
  • Logikblöcke, die vom Optimierer unerwartet entfernt werden ... ähnlich wie eine einfache Spinlock-Verzögerungsschleife durch Codeoptimierung stillschweigend gelöscht wird.
  • Ausgaben, die aufgrund des prozeduralen Ansatzes anstelle des Wahrheitstabellenansatzes nicht vollständig spezifiziert sind. Wenn das Tool glaubt, dass die Ausgabe immer 0 oder immer 1 endet, wird die gesamte Logik gelöscht, die dieses Ergebnis generiert.
  • Die Modullogik wird abgeschnitten, weil eines der Untermodule auf immer 0 oder immer 1 optimiert wurde. Dies kann bis zur obersten Ebene kaskadieren

    Diese RTL-Prüfung wird sehr unhandlich, es sei denn, Sie halten Ihre Module klein und einfach. Die Verwendung einer Testbench ist ein wichtiges Werkzeug.

    Auch ich kam zuerst von der Programmierung eingebetteter Systeme und dann von Verilog. Die größte Gefahr für Menschen wie uns beim Erlernen der HDL-Codierung besteht darin, dass sie wie eine prozedurale Programmiersprache aussieht und sich anfühlt wie eine prozedurale Programmiersprache (während der Simulation), aber dann explodiert alles, wenn Sie versuchen, Arbeitscode zu synthetisieren. Sie müssen wirklich darüber nachdenken, wie die Hardware aussehen muss, und sicherstellen, dass der RTL-Code die gesamte erwartete Hardware enthält.

    Abgesehen von der Tatsache, dass Verilog / VHDL das Eingeben von Quellcode in eine Computerdatei beinhaltet, gibt es nicht wirklich viel Ähnlichkeit mit herkömmlichem C / C ++ / etc. Sehr wenig von Ihrer Programmiererfahrung wird übertragen. Konzentrieren Sie sich darauf, große Probleme in kleine Probleme zu unterteilen, alles detailliert zu dokumentieren und Prüfstände zu schreiben. Investieren Sie auch in ein gutes digitales Abtastoszilloskop, falls Sie noch keines haben. Schauen Sie sich einige der auf opencores.org veröffentlichten Beispielcodes an, da Sie mit C / C ++ eine Menge Techniken (sowohl gute als auch schlechte) durch das Lesen des Codes anderer Leute lernen können.

    Eine Sache, die mich bei der FPGA-Entwicklung verrückt macht, ist, dass die Quellcodeverwaltung von den Toolchain-Anbietern nicht als wichtig angesehen wird. Xilinx Vivado ist in dieser Hinsicht besonders schlecht. Es wird empfohlen, die Projektdateien beim erneuten Auschecken von Grund auf neu zu generieren. Der Versuch, eine Projektübergabe mit ZIP-Dateien mit mehr als 100 MB durchzuführen, ist entmutigend.

    Die andere Sache, die mich an der FPGA-Entwicklung verrückt macht, ist, dass Quartus / ISE / Vivado-Tools die Flut von Warnmeldungen nicht wirklich zufriedenstellend unterdrücken können. Wenn ich C / C ++ - Programme schreibe, erwarte ich, dass ich jede Warnmeldung einzeln adressieren und entweder korrigieren oder sanktionieren kann, damit ich schließlich eine saubere Kompilierung ohne Warnungen erhalten kann. Ich habe noch nie jemanden gesehen, der dies in der FPGA-Entwicklung erreicht hat. Andere FPGA-Entwickler (die schlauer sind als ich) scheinen einfach zu akzeptieren, dass ein normales Projekt viele Diagnosemeldungen enthält, die sie oft einfach ignorieren, sodass sie nur noch Laborarbeit leisten und auf echter Hardware überprüfen müssen.

    Wenn Sie jemals eine eigene FPGA-Karte entwickeln (was ich nicht empfehle), stellen Sie sicher, dass nicht verwendete E / A-Pins irgendwo in einem Header vorhanden sind - so viele wie möglich -, da dies der Fall sein wird Ihre Lebensader, wenn Sie den FPGA-Code debuggen oder einen Patch für die elfte Stunde implementieren müssen.

    Sie haben die Programmierung in Assemblersprache erwähnt, um eine genaue Kontrolle über die Arbeit des Computers zu erlangen, und es ist möglich, eine ähnlich genaue Kontrolle über FPGA-Code durch Verwendung nicht portabler, herstellerspezifischer Grundelemente auszuüben. Dies ist für jeden Anbieter und jedes FPGA unterschiedlich, ebenso wie die Assemblersprache für verschiedene CPUs unterschiedlich ist. Für Xilinx würden Sie eine Einschränkungsdatei schreiben (anders für ISE-Toolchain oder Vivado-Toolchain). Die Einschränkungsdatei ruft bestimmte Instanzen oder bestimmte Netze auf und legt Zeitanforderungen fest. In der Regel sind die CLBs / LUTs / WhateverUnits auf niedriger Ebene in einem Raster angeordnet, sodass Sie ein bestimmtes Grundelement auf niedriger Ebene festlegen können, um an einem bestimmten X-, Y-Rasterstandort zu leben. Schauen Sie sich den alten Xilinx "FPGA Editor" für die Spartan 3-Serie an. Sie haben die Leute dazu ermutigt, ihn so zu verwenden. Ich denke, die neueren Chips der Serie 7 und Zynq werden nicht unterstützt. Wie die Montage ist sie sehr spezifisch für die Technologie und daher eine Art flüchtige Fähigkeit.

    Ähnlich wie beim Zusammenbau möchten Sie für alles andere als eine triviale „Hausaufgabe“ wirklich minimieren, wie viel Zusammenbau Sie schreiben.Verwenden Sie C / C ++ für 98% -99% und schreiben Sie Assemblys nur für 1%, die leistungsabhängig sind.Wenn Sie beispielsweise ein FPGA-Design haben, bei dem ein Teilprozess mit 200 MHz ausgeführt werden muss, sollten Sie in die Low-Level-Zuordnung eintauchen, um zu sehen, was die Tools tun.Die beste Auszahlung für die Optimierung ist, wenn Sie unnötige Arbeitsschritte vermeiden können.Erst wenn Sie die Hot-Elemente auf das Nötigste reduziert haben, lohnt es sich, manuell zu routen, welche IOBs zu welchen Grid-Standorten gehören.Lassen Sie die Maschine den Großteil der Arbeit erledigen, damit Sie sich auf Ihre Bemühungen konzentrieren können.

  • #3
    +11
    DKNguyen
    2020-05-05 04:16:09 UTC
    view on stackexchange narkive permalink

    Das physikalische Grundelement eines FPGA ist ein konfigurierbarer Logikblock (CLB).

    Jeder Logikblock erhält einen dedizierten Speicherort, den sogenannten Konfigurationsspeicher, der bestimmt, wie er konfiguriert ist und wo er eine Verbindung herstellt.

    HDL endet letztendlich als eine Reihe von Einsen und Nullen, ein sogenannter Bitstrom, der in diesem Konfigurationsspeicher abgelegt wird.

    Die meisten FPGAs verfügen nicht über einen integrierten nichtflüchtigen Konfigurationsspeicher. Stattdessen wird der Konfigurationsbitstrom in einem externen Konfigurations-FLASH-ROM gespeichert, und beim Einschalten lädt das FPGA diesen Bitstrom aus dem externen nichtflüchtigen Speicher in seinen internen Konfigurations-SRAM, der direkt mit den CLBs verbunden ist und diese steuert.

    Im Gegensatz zu Software wird dieser Bitstream nicht "ausgeführt". Es wird nur geladen und danach einfach "ist". Es ähnelt weniger der Ausführung von Anweisungen als vielmehr von Registern, die Einstellungen enthalten.

    Es ist eine Datei wie ein * .bit. Es gibt kein Standardformat. Ich bin mir nicht sicher, warum Sie selbst einen Simulator schreiben möchten, wenn FPGA-Entwicklungstools mit einem Simulator geliefert werden. Es wird viel Aufwand betrieben und sie kennen ihre Geräte besser als alle anderen, da im Gegensatz zu Software jedes im Bitstream angegebene Grundelement physisch irgendwo auf dem FPGA-Chip lokalisiert sein muss und der Grundriss einige Designs erstellen oder beschädigen kann. P. >

    Ich glaube, der Begriff CLB ist spezifisch für Xilinx-Produkte.Microsemi (ehemals Actel) verwendet Begriffe wie Registerzellen (r-Zellen) und kombinatorische Zellen (c-Zellen).
    @SteveSh Ja, überall verschiedene Begriffe.Wenn sie nicht einmal zustimmen können, wie sie genannt werden, können sie sich nicht auf das Standard-Bistream-Format einigen.
    Ich meine, sie verwenden unterschiedliche Begriffe, weil sie unterschiedliche Architekturen verwenden.Ich denke, eine Nachschlagetabelle wäre ein besseres Beispiel für das physikalische Grundelement (und warum die großen Marken normalerweise LUT-Äquivalente auflisten), obwohl die Elemente komplexer sind als eine Standard-4-LUT.
    #4
    +5
    Graham
    2020-05-05 15:07:06 UTC
    view on stackexchange narkive permalink

    Welche Bytes gehen über den Schreibvorgang, wenn ein FPGA programmiert wird?

    Dies ist im Allgemeinen weniger verantwortlich, da es zu 100% herstellerspezifisch und gerätespezifisch ist. Einige Hersteller veröffentlichen hierzu Datenblätter. Andere Hersteller betrachten dies als "Geschäftsgeheimnis" und Sie müssten eine NDA unterzeichnen, um dies herauszufinden.

    Bei einem C-Compiler (oder einer anderen Sprache) sind die Rohbytes ohnehin nicht der grundlegendste Teil. Der grundlegendste Teil ist die Reihe von Prozessoranweisungen, die Ihr Programm implementieren, und die Rohbytes geben einfach an, wie Sie dem Prozessor mitteilen, was diese Anweisungen sind. Diese Anweisungen veranlassen den Prozessor, Operationen unter Verwendung seiner verschiedenen Hardwareeinrichtungen wie Addierer, Multiplikatoren und dergleichen auszuführen und Daten in Registern und Speichern zu speichern oder abzurufen.

    Dies ist in einem FPGA sehr ähnlich, außer dass Sie auf einer niedrigeren Ebene beginnen. Anstatt eine Liste mit auszuführenden Anweisungen zu haben, haben Sie eine Liste, wie jedes Gate im FPGA miteinander verbunden werden sollte. Die meisten FPGAs enthalten auch spezielle Abschnitte für RAM und andere Funktionen, und Ihr Programm enthält auch Informationen darüber, wie diese angeschlossen werden.

    Am Ende erhalten Sie eine Netzliste , so als würden Sie eine Leiterplatte mit einer Million Logikchips entwerfen. Dies ist konzeptionell die grundlegendste Ausgabe Ihres FPGA-Compilers, um Ihnen zu sagen, was er tut, genauso wie eine Assembler-Liste konzeptionell die grundlegendste Ausgabe Ihres C-Compilers ist, um Ihnen zu sagen, was der Prozessor tut.

    Natürlich erstellt der Compiler dann weiterhin eine Binärdatei, die das FPGA mit dieser Netzliste programmiert, genauso wie ein C-Compiler weiterhin eine Binärdatei erstellt, die Ihr Mikro mit diesem Assembler programmiert.

    #5
    +2
    SteveSh
    2020-05-05 04:27:30 UTC
    view on stackexchange narkive permalink

    "Welche Bytes gehen über den Schreibvorgang, wenn ein FPGA programmiert wird?"

    Vereinfacht gesagt enthalten diese Bytes die Informationen für:

    1) Konfigurieren der FPGA-Logik &-E / A-Blöcke (soll dieser Block ein Register, ein Multiplexer, eine Allzweck-Nachschlagetabelle sein) und

    2) Konfigurieren der Verbindung auf dem FPGA, um die Logikblöcke miteinander zu verbinden und dann mit der Außenwelt zu verbinden.

    #6
    +2
    old_timer
    2020-05-05 20:41:56 UTC
    view on stackexchange narkive permalink

    So viele Antworten, dass ich nicht alle gelesen habe, weil ich jemand bin, der auf beiden Seiten des Zauns sitzt, Hardware und Software ...

    Während es sich also in jeder Hinsicht um eine Programmiersprache handelt, die in andere Sprachen kompiliert wird, idealerweise auf einer niedrigeren Ebene (C zu ASM oder Maschinencode, JAVA zu Bytecode oder einer anderen Sprache oder Baugruppe oder Maschinencode usw.). Es gibt viel mehr Schritte und die Ziele sind viel vielfältiger als isa, die ebenso häufig wie unterschiedlich sind: Hinzufügen, Bewegen, Jne, Drücken, Pop usw.

    Der Maschinencode für fpgas oder asics besteht nicht nur aus diskreten Transistoren, sondern aus einer Bibliothek von Dingen. Für Asics für eine bestimmte Gießerei und einen bestimmten Prozess stehen eine oder mehrere Zellbibliotheken zur Verfügung. Sie verfügen über einfache und / oder Gates, aber auch über größere und kompliziertere Dinge. Warum sollte ein Latch aus diskreten Komponenten erstellt werden, wenn die Bibliotheksautoren eine gemeinsame Größe festlegen können? diejenigen und packen es auf effiziente (Immobilien-) Weise. Wie bei jedem Compiler oder hochrangigen Autor gehen Sie die Liste der Optionen durch und wählen einige aus. einschließlich einer langen Liste von Srams verschiedener Breiten und Tiefen. Für ein FPGA sind es LUTs oder irgendwie feste generische Module, die als verschiedene Module fungieren können, die komplizierter sind als ein einfaches und / oder xor-Gate.

    Die FPGA-Welt mag es, die Dinge nah an ihrer Brust zu halten, und sie versuchen, viel günstiger zu sein als asic-Tools, Zehntausende von Dollar pro Jahr statt Millionen. Und wie in jeder anderen integrierten Umgebung gibt es manchmal verschiedene Anbieter, die gekauft oder lizenziert und die Tools zusammengeklebt wurden (oft nicht sehr hübsch).

    Also sind alle Schritte passiert, die andere Leute erwähnt haben. Das ist mehr als Software und die Dateiformate sind sehr proprietär und es wird nicht erwartet, dass sie dokumentiert oder unterstützt werden. Jede Version kann sich ändern. Wieder scheinen diese Leute wettbewerbsfähig und geheim zu sein (wenn sie sich öffnen würden, könnten wir deutlich bessere Tools haben und sie könnten mehr Produkt-IMO verkaufen, aber sie könnten das Support-Geld reduzieren, wovon sie vielleicht mit ihren beschissenen Tools leben) .

    Wenn Leute Netlist sagen, wird der Verilog zu einer Netlist zusammengestellt. Diejenigen, die ich gesehen habe, sind auch in Verilog oder Vhdl, da diese Sprachen dies abdecken. Letztendlich zielen Sie dann auf das spezifische was auch immer, fpga, cpld, asic usw. Da das fpga ein bereits verdrahtetes / festes Ziel ist, erhalten Sie letztendlich eine Liste von Sicherungen oder Schaltern, wenn Sie so wollen, nehmen Sie eine generische Lut und verbinden Sie diesen Eingang mit das und das, was dazu beiträgt, indem Verbindungen in dem massiven Netz von Dingen geöffnet und geschlossen werden. Das ist eine ziemlich einfache Liste von Ein- und Ausfahrten. Und ich denke, es gibt möglicherweise einen jedec-Standard, der oft als Bitstream bezeichnet wird, und zumindest verwenden wir zum Laden einen Bitstream-Player.

    CPLDs Im Allgemeinen programmieren Sie diese Informationen im Teil selbst, sei es ein Flash an Bord, der beim Einschalten Dinge öffnet / schließt und / oder der nichtflüchtige Speicher im Inneren schaltet sich mit den verdrahteten Elementen ein.

    FPGAs haben normalerweise einen externen Flash und beim Einschalten werden die Informationen zum Verbinden von Dingen daraus geladen. Der Rest des Teils wird mit diesem Setup aufgerufen. Diejenigen, die ich über Sie kenne, können diese Informationen im eingeschalteten Zustand auch in das Teil laden und alle Verbindungen herstellen. Diese Informationen gehen jedoch verloren, wenn das Teil ausgeschaltet wird. Abhängig von Ihrem Design haben Sie möglicherweise eine andere Lösung und verwenden den Blitz nicht. Das Flash-Format ist wahrscheinlich prioprietär, ich habe nicht persönlich nachgesehen, wenn Sie über die Programmierschnittstelle, die über die fpga zum Flash geht, hereinkommen, damit es so bleibt, wie es ist, oder es könnte auf dem Weg in etwas anderes konvertiert werden. P. >

    Mit Software, besonders diesmal und an diesem Ort, sind wir es gewohnt, meistens Dinge zu öffnen, etwas gute kostenlose Tools, die viele Leute benutzen. Dies bedeutet auch, dass die Dateiformate dokumentiert und etwas verbreitet sind. Einige hatten vor dieser Zeit einen Verlauf von .com und .exes, andere für andere Betriebssysteme des Tages. Aber auch hier ist die Software-Welt häufiger als die andere, die Sie idealerweise für Maschinencode oder Bytecode anstreben. Mit Logik wechseln Sie von einer höheren zu einer niedrigeren Ebene, verwenden jedoch bis zu einem gewissen Punkt dieselbe Sprache. Dann zielen Sie möglicherweise auf einen Simulator ab, der eine eigene Bibliothek von Modulen oder fpga n mit seiner Bibliothek oder fpga m mit seiner Bibliothek usw. hat. Und diese Leute schützen Informationen sehr.

    Clifford und das Projekt IceStorm IMO ist der richtige Weg. Es ist bis jetzt das einzige Mal, dass ich etwas für eine fpga erstellt habe, das einfach ist, funktioniert, keine Warnungen oder Fehler, die Software-Leute oft mögen.Ich habe unzählige Nächte damit verbracht, von allen großen Anbietern ohne Vorwarnung das Einfachste für ein Fpga zu bauen ... und würde immer aufgeben.Vom Verilog bis zum programmierten Teil sind es mindestens drei separate Projekte, was bedeutet, dass es Zwischendateien gibt, die beide Seiten unterstützen müssen, damit die Dateiformate vorhanden sind.Es wird jedoch erwartet, dass es projektspezifisch ist und nicht unbedingt einer Elf-Datei ähnelt, die häufig für mehr als einen Anwendungsfall verwendet wird.

    Verstehen Sie, dass die Chip-Welt einschließlich fpgas wahnsinnig teuer ist und daher geldgetrieben ist, was häufig den Verkauf von Werkzeugen und vor allem jährliche Supportverträge bedeutet.Dies bedeutet geschlossene Quelle, geschlossene Informationen, nicht öffentlich dokumentierte Dateiformate.

    #7
    +1
    Brian Drummond
    2020-05-06 18:59:28 UTC
    view on stackexchange narkive permalink

    Bevor Sie zur Synthese kommen, können Sie das Design in der Simulation überprüfen.In diesem Fall wird Ihr Design als Software behandelt - und für mindestens einen Simulator (Open Source GHDL, nicht überraschend für VHDL) kann der Compiler entweder gcc- oder LLVM-Backends verwenden, um eine normale ausführbare Datei zu generieren.

    Im Allgemeinen binden Sie Ihr tatsächliches Design in eine "Testbench" (ebenfalls in VHDL geschrieben) ein, die Eingangssignale generiert und über die Richtigkeit der Ausgaben berichtet - entweder an die Konsole (über Assert / Report-Anweisungen) oder mithilfe von Überprüfungs- und Protokollierungswerkzeugenwie OSVVM unter einem Unit Testing Framework (VUnit).

    Wenn alles andere fehlschlägt, können Sie Wellenformen in einer GUI sichern und untersuchen.

    Wenn alles funktioniert, fahren Sie mit der Synthese fort, wie in den anderen Antworten beschrieben.



    Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
    Loading...