FPGA-Systeme architekturneutral entwerfen

Programmierbare Logik in heutigen FPGAs bietet mehr als nur die Verbindung elementarer Logikblöcke. Spezielle Bausteinmerkmale bieten Flexibilität für die Designverifikation und Fehlersuche. Sind etwa Bausteine von zwei verschiedenen Herstellern für DSP-Anwendungen optimiert, so können kleine Details zu unterschiedlicher Leistungsfähigkeit und Flächennutzung der DSP-Funktion führen. Ein von der Zielarchitektur unabhängiger Designansatz bringt viele Vorteile.

Programmierbare Logik in heutigen FPGAs bietet mehr als nur die Verbindung elementarer Logikblöcke. Spezielle Bausteinmerkmale bieten Flexibilität für die Designverifikation und Fehlersuche. Sind etwa Bausteine von zwei verschiedenen Herstellern für DSP-Anwendungen optimiert, so können kleine Details zu unterschiedlicher Leistungsfähigkeit und Flächennutzung der DSP-Funktion führen. Ein von der Zielarchitektur unabhängiger Designansatz bringt viele Vorteile.

Mit einem anbieterunabhängigen Designansatz lässt sich HDL-Code schreiben, der mehrere FPGA-Architekturen ohne Code-Modifizierung und erneute Simulation adressieren kann.

Dieses Konzept erlaubt es, die Entscheidung für eine FPGA-Architektur erst in der Implementierungsphase zu treffen. Damit ist das Design auch einfacher zu warten und auf eine andere Architektur zu portieren. Außerdem ermöglicht ein derartiges Konzept die Wiederverwendung von Funktionsblöcken in anderen Projekten, da der Quellcode unabhängig von der Architektur ist. Moderne Syntheseverfahren können komplexe Funktionen eines Designs einfach implementieren, indem sie diese automatisch erkennen oder ableiten und so korrekt auf die verfügbaren Ressourcen des jeweiligen FPGAs abbilden.

Seit längerem unterstützen FPGAs Single- und Dual- Port-RAMs. Inzwischen sind auch komplexere Logikkomponenten wie FIFOs, Multiportkonfigurationen und Schieberegister möglich.

Wenn das Synthesewerkzeug diese Strukturen der HDL-Beschreibung entnehmen kann, dann erleichtert dies das Finden der »optimalen « Architektur. Dabei ist zu beachten, dass, obwohl die meisten FPGA-Anbieter allgemeine RAMFunktionen unterstützen, diese nicht alle identische Strukturen haben. Aus diesem Grund kann ein Code, der effizient für eine Architektur arbeitet, für eine andere ungeeignet sein. Synthesetools können Speicherstrukturen einfach erkennen, wenn die Vektor-Datentypen im RTL-Code deklariert worden sind. In VHDL wird ein Vektor-Datentyp wie folgt beschrieben:

TYPE mem_type is ARRAY (256 downto 0) of STD_LOGIC_VECTOR(3 downto 0); SIGNAL mem: mem_type;

In Verilog sieht das so aus:

reg [256:0] mem [3:0];

Anschließend werden die benötigten Speichereigenschaften codiert, beispielsweise die Anzahl der Anschlüsse, die Zahl der Taktsignale und das Speicherverhalten. Das Beispiel im Kasten »Zweitakt- RAM« ist eine Beschreibung für ein synchrones Dual- Port-Read-First-RAM mit zwei Taktsignalen.