Was ist die richtige Methodik, um portable FPGA-Designs zu erstellen?

FPGA-Designs können RTL zusammen mit IP-Blöcken enthalten. Diese IP-Blöcke stammen höchstwahrscheinlich vom Anbieter des FPGA. Beispiele für solche IP-Blöcke sind die Instanziierung von Dual-Clock-FIFOs, Gleitkomma- und Festkomma-Mathematikblöcken, damit wir die Latenz usw. präzise einstellen können, Primitive auf niedriger Ebene, z. B. Geräte-E/A-Puffer usw. Solche Dinge können nicht aus dem RTL-Code abgeleitet werden.

Es kann vorkommen, dass die Entwicklung normalerweise auf einer bestimmten Plattform durchgeführt wird, z. B. Altera Quartus, die auf Cyclone V abzielt. Es kann jedoch sein, dass das endgültige Design aus irgendeinem Grund in einem völlig anderen Gerät implementiert werden muss, z. B. Microsemi Igloo 2.

Was ist in diesem Fall die richtige Methode, um tragbare Designs zu erstellen?

Theoretisch erfordert die richtige Methode:

  1. Ein Design, bei dem Dateien für die beiden Versionen von IP-Blöcken von den beiden Anbietern vorhanden sind. Ein Wrapper kann verwendet werden, um einen der beiden IP-Blöcke während der Simulation und Synthese zu instanziieren.

  2. Das Synthesetool, um zu bestimmen, welche Dateien verwendet und welche ausgeschlossen werden sollen, während es das Design synthetisiert. Daher verwendet Quartus nur die für ihn relevanten Dateien und Libero verwendet nur die für ihn relevanten Dateien.

  3. Das Simulationstool kann so eingestellt werden, dass das Design unter Verwendung der IP eines der beiden Anbieter kompiliert und simuliert wird.

Eine hier getroffene Annahme ist, dass IP-Blöcke mit ähnlichen Funktionen von beiden Anbietern existieren.

Sie wären überrascht, wie viel in HDL gefolgert werden kann. Zum Beispiel: intel.com/content/www/us/en/programmable/quartushelp/14.1/…
Ihr TAG sagt VHDL, aber Ihre Frage erwähnt dies nicht. Gilt das nur für VHDL oder auch für Verilog?
Sie haben Recht, ich habe es in HDL geändert, damit es sowohl für VHDL als auch für Verilog gilt.
Ich stimme zu, dass man viel von VHDL ableiten kann. Es ist jedoch möglicherweise nicht möglich, alles, was wir wollen, in das Design einzubeziehen.
Es gibt eine wichtige Unterscheidung, die gemacht werden muss. Wenn Sie eine Allzweck-Hardware mit wenigen Einschränkungen in Bezug auf Timing und Geschwindigkeit entwerfen, ist jede RTL-Form portierbar. Wenn Sie jedoch FPGA am Rande seiner Leistungsfähigkeit (DDRx oder schnelle serielle Kommunikation) verwenden, hängen diese Funktionen stark von dedizierten Hardwareblöcken ab, und verschiedene Anbieter werden verschiedene Hinweise und spezifische Einschränkungen festlegen, um ihre Compiler dazu zu bringen, diese IP-Blöcke abzuleiten effizient. Die Portabilität wird also offensichtlich darunter leiden.

Antworten (1)

HDL-Portabilität ist wie die Portabilität von Software ein unerreichbares Ideal. Jeder Synthesizer hat unterschiedliche Strategien und unterschiedliche Fehler, und herstellerspezifische Bibliotheken kommen ins Spiel. Es lohnt sich jedoch, danach zu streben, da die tatsächliche Portabilität wie die tatsächliche Unsterblichkeit ist ... Sie werden es nie erreichen, aber näher ist immer besser.

Synthesizer können Latches ableiten, und sie tun es normalerweise auf die gleiche Weise – ausgelöst durch einen Block mit einer Empfindlichkeitsliste. Die primäre Regel von portabler RTL besteht darin, Prozesse zu schreiben, die von gemeinsamen Uhren getriggert werden. Wenn aus Ihrer RTL klar hervorgeht, wo sich die Latches befinden, sollte es dem Synthesizer klar sein.

Kombinatorische Logik kann in Ihre Latch-Prozesse aufgenommen werden, um dem Synthesizer die Freiheit zu geben, sie am Eingang oder Ausgang zu verwenden. Halten Sie es außerhalb des Latch-Prozesses, wenn Sie sicherstellen möchten, dass ein bestimmter interner Wert gelatcht wird.

Partitionieren Sie im Allgemeinen keine kombinatorischen Blöcke, wenn Sie nicht müssen ... der Compiler findet möglicherweise Optimierungen, die Sie nicht finden. Wenn es jedoch eine klare und offensichtliche architektonische Wahl gibt (z. B. einen hochoptimierten Algorithmus), möchten Sie diese Struktur möglicherweise implizit auferlegen. Darüber hinaus können ungewöhnlich große Blöcke kombinatorischer Logik einige Synthesizer in ein Kaninchenloch schicken; Eine Neupartitionierung könnte ihm Orientierung geben.