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:
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.
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.
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.
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.
Benutzer110971
Alter Furz
quanten231
quanten231
Ale..chenski