VHDL: Benennung und Interpretation der Architektur

14

Hinweis: Ich verwende Xilinx ISE und besitze eine FPGA-Karte (mit Schaltern und Lichtern usw.). Bisher habe ich einige einfache Projekte zusammen gehackt. Gleichzeitig lese ich mehrere Tutorials, um eine Grundlage für das zu schaffen, was ich tue.

Ich habe verschiedene Entitäten und ihre Architekturen gesehen, die in den Referenzmaterialien erwähnt wurden, die ich durchlaufen habe, aber die Benennung ist oft verwirrend. Oft anstelle von „Architektur rtl von ..“ oder „Architektur Struktur von ...“ Ich werde „Architektur sieht foo von ...“ oder sogar „Architektur Bogen von ...“

Ich stelle (verspätet) fest, dass der Architekturname genauso willkürlich ist wie die Benennung von Entitäten, obwohl es Stilrichtlinien gibt, die darauf hinweisen, dass konsistentere Benennungskonventionen verwendet werden können, um dieses Problem zu vermeiden. Dies führt mich zu ein paar Fragen:

  • Wie kann man bei Betrachtung einer Entität das tatsächlich verwendete Architekturmodell ohne Hinweise auf den Architekturnamen bestimmen? RTL, Verhalten, Struktur ... sie scheinen dem Auge meines Schülers ziemlich ähnlich zu sein (vorausgesetzt, die Beispiele, die ich gesehen habe, wurden tatsächlich richtig benannt). Ein einfaches, aber naheliegendes Beispiel wäre hier hilfreich (oder ein Zeiger auf eins).

  • Wenn Sie mehrere Architekturen für eine einzelne Entität angeben (was meines Erachtens möglich ist), geben Sie den Architekturen einfach unterschiedliche Namen in derselben Datei oder ...?

  • Sind die Architekturnamen auf eine bestimmte Entität beschränkt (dh, gibt es ein Problem mit "Namespaces", wenn derselbe Architekturname für mehrere Entitäten verwendet wird)?

Bearbeiten: und noch eines:

  • Es scheint, dass es einen Unterschied zwischen RTL und Verhalten gibt, aber wie oben erwähnt, sehe ich das nicht wirklich in den Beispielen, die ich gesehen habe (oft sehe ich nur eine definierte Architektur). Ist eine Architektur häufiger als die anderen?

Was ich gesucht habe, ist ein umfassendes, aber einfaches Projekt mit mehreren Komponenten (kleine Komponenten), das mit Best Practices (korrekte Benennung, nicht alle in eine Datei gepackt usw.) geschrieben wurde, aber noch keine gefunden hat. Ich finde gut ausgearbeitete Beispielprojekte sehr nützlich, um grundlegende Prinzipien und Best Practices zu erläutern. Wenn Sie ein solches Beispielprojekt kennen, wäre ich auch für einen Hinweis darauf dankbar. (Wenn nichts anderes, kann ich vielleicht eines meiner eigenen teilen, wenn ich es herausgefunden habe ...)

MartyMacGyver
quelle

Antworten:

6

Wie kann man bei Betrachtung einer Entität das tatsächlich verwendete Architekturmodell ohne Hinweise auf den Architekturnamen bestimmen?

Sie können nicht - wenn es instanziiert oder konfiguriert ist die Architektur angegeben werden (wenn mehr als eine zur Auswahl steht), oder es wird ein Standard für Sie ausgewählt.

Wenn Sie mehrere Architekturen für eine einzelne Entität angeben (was meines Erachtens möglich ist), geben Sie den Architekturen einfach unterschiedliche Namen in derselben Datei oder ...?

Sie geben ihnen verschiedene Namen. Es muss sich nicht in derselben Datei befinden (in der Tat kümmert sich VHDL viel weniger, als Sie vielleicht darüber nachdenken, was in welcher Datei enthalten ist)

Sind die Architekturnamen auf eine bestimmte Entität beschränkt (dh, gibt es ein Problem mit "Namespaces", wenn derselbe Architekturname für mehrere Entitäten verwendet wird)?

Sie sind einer Entität "zugeordnet" und können daher wiederverwendet werden.

Ich benutze oft a1als meine Architektur für alles Synthetisierbare

  • rtl impliziert eine niedrigere Ebene (für viele Leser) als ich schreibe.
  • behavioural impliziert oft nichtsynthetisierbar (für manche Leser)
  • synth wird vom Synthesizer für sein Modell verwendet (sonst hätte ich das verwendet)

a1 war bisher konfliktfrei und sorgt nicht für Verwirrung;)

Wenn ich tatsächlich mehr als eine Architektur habe, neige ich dazu, sie wörtlich zu benennen (zum Beispiel hard_multipliersund lut_multipliersfür einen Filter, der MUL18-Blöcke instanziiert oder nicht).

Sehr oft haben Sie nur eine Architektur, also spielt es keine Rolle. Gute Entitätsnamen sind viel wichtiger.

Es scheint, dass es einen Unterschied zwischen RTL und Verhalten gibt, aber wie oben erwähnt, sehe ich das nicht wirklich in den Beispielen, die ich gesehen habe (oft sehe ich nur eine definierte Architektur). Ist eine Architektur häufiger als die anderen?

Es ist historisch - Sie waren früher nicht in der Lage, "Verhaltens" -Code zu synthetisieren (was zu einem bestimmten Zeitpunkt Dinge wie das Hinzufügen beinhaltete!) -, also haben Sie eine RTL-Version erstellt, die Addierer und dergleichen instanziierte. (So ​​wie ich es verstehe, schreibe ich Verhaltenscode (und trotzdem noch synthetisierbaren Code), seit ich ungefähr 1999 mit VHDLing angefangen habe!)

Martin Thompson
quelle
Ich schätze die Punkt-für-Punkt-Antwort!
MartyMacGyver
Ich mache ungefähr das Gleiche - ich benenne alle meine Architekturen archund konzentriere mich stattdessen darauf, den Entitäten vernünftige Namen zu geben. In den seltensten Fällen habe ich mehr als eine Architektur für eine Entität, ich gebe ihnen nur andere Namen. Allerdings behaviouralimpliziert das für mich tatsächlich Code, der nicht möglich ist oder nicht synthetisiert werden soll. Außerdem hatte ich immer die Idee, dass der rtlName für alle zur Synthese bestimmten HDL geeignet ist, unabhängig von der Abstraktionsebene. (Ich könnte, wie immer, in jedem dieser Punkte falsch liegen, aber das war mein Verständnis für die Verwendung dieser Wörter.)
Carl
8

Hier sind die Architekturtypen:

Verhalten:

Allgemeine Hinweise:

  • Traditionell keine Hierarchie (nur eine Datei, keine instanziierten Komponenten), obwohl dies von Tool zu Tool unterschiedlich ist.
  • Sehr schnell zu simulieren.
  • Signalverhalten ist definiert.
  • Wenn das Verhalten nur für die Simulation verwendet wird, kann es nicht synthetisierbaren Code enthalten. Für die Synthese bestimmtes Verhalten muss natürlich synthetisierbar sein.

Xilinx-spezifische Hinweise

  • Im Allgemeinen sind Kerngeneratormodelle VHD-Dateien vor der Synthese

Strukturell:

Allgemeine Definition

  • Instanziiert nur Komponenten und verdrahtet sie (hierarchisch).
  • Langsamer zu simulieren als Verhalten.
  • Keine Definition des realen Signalverhaltens auf oberster Ebene.
  • Nur synthetisierbarer Code.

Xilinx xspezifische Notizen

  • Kerngeneratormodelle berücksichtigen das Timing nicht.
  • Im Allgemeinen instanziieren Kerngeneratormodelle Netzlisten nach der Synthese

Das Obige sind im Grunde die beiden traditionellen Haupttiere der Architektur. Sehr häufig wird eine "gemischte" Definition verwendet, die Eigenschaften von beiden enthält.

RTL:

RTL was am Ende des Tages eigentlich auf dem FPGA steht. Dies ist also ein synthetisierbarer Code, der das Verhalten des Systems definiert und aus einer Codehierarchie besteht:
Die unteren Schichten sind synthetisierbar, wobei der Kern des Signalverhaltens definiert wird und die oberen Ebenen strukturell sind, wobei die Verhaltenskomponenten werden zusammengebunden, um ein "Blockdiagramm" der obersten Ebene zu erstellen, wenn Sie so wollen.

Auf zu mehreren Architekturen:

Architekturen können alle in einer Datei oder in mehreren Dateien sein. Wichtig ist nur, dass die Entität zuerst kompiliert und die zu verwendende Architektur festgelegt wird.

Dieses Buch ist sehr praktisch und beschreibt solche Dinge sehr gut.

Es gibt keine feste Regel, wie Dinge in Bezug auf unterschiedliche Verhaltens- und Strukturmodelle oder nur deren Vermischung zu tun sind. Normalerweise ist es in großen Firmware-Designs (oder in großen Unternehmen, in denen Code gemeinsam genutzt und wiederverwendet wird) nützlich, zwischen beiden zu unterscheiden, um die Dinge zu vereinfachen. Letztendlich kommt es jedoch darauf an, was für Sie funktioniert.

Stanri
quelle
Vielen Dank für die Antwort und den Tipp auf dem Buch (obwohl es offensichtlich schwer zu beschaffen ist).
MartyMacGyver
@MartyMacGyver: Ja, ich habe gerade gelesen , in der Regel die Google Text & Tabellen Version: P
stanri
Ich würde, aber es ist absichtlich fehlende Seiten ...
MartyMacGyver
1

Erstens können Architekturentwürfe der realen Welt nicht so streng kategorisiert werden. Warum beschränken Sie sich? Möglicherweise möchten Sie andere Entitäten instanziieren und sie "strukturell" verbinden, aber hier und da einen Prozess oder eine gleichzeitige Zuweisung hinzufügen, um eine "RTL" -Logik hinzuzufügen, und möglicherweise einige "Verhaltens" -Codierungsmuster verwenden, damit der Synthesizer einige der Details, die Sie nicht interessieren (z. B. das Hinzufügen, ohne einen Addierer mit den Parametern area / pipelining / performance speziell zu instanziieren), alle in derselben Architektur.

Noch wichtiger ist, dass Sie verstehen, was in aktuellen asic / fpga-Technologien synthetisierbar ist und was nicht, und dies unabhängig vom Architekturmodell.

Eine Entität kann auf verschiedene Arten implementiert werden, auch wenn sie geringfügig unterschiedliche Verhaltensweisen zulässt, sodass Sie möglicherweise mehrere Architekturen für dieselbe Entität haben. Darüber hinaus verfügen Sie möglicherweise nur über eine Architektur für die Simulation (normalerweise nicht synthetisierbar), die möglicherweise schneller als die "echte" Version simuliert. Dies ist hilfreich, wenn Sie große Designs als Ganzes testen möchten. Sie würden diesen Architekturen Namen geben, die Ihnen helfen, sich daran zu erinnern, was sie von den anderen unterscheidet, und einfach bhv / str / rtl ist in der Regel nicht ausreichend oder genau, da es sich um hybride Konstruktionen aus der realen Welt handelt.

In Bezug auf Ihre spezifischen Fragen ist die Architekturdeklaration an einen Entitätsnamen gebunden, sodass bei gleichnamigen Architekturen für verschiedene Entitäten keine Namespace-Probleme auftreten. Verwenden Sie einfach unterschiedliche Namen für Architekturen für dieselbe Entität.

Architekturen können sich in verschiedenen Dateien befinden. Sie müssen lediglich sicherstellen, dass die Entitätsdeklaration zuerst kompiliert wird.

Sie können auswählen, welche Architektur beim Instanziieren der Entität oder mithilfe von Konfigurationsanweisungen verwendet werden soll. Andernfalls ist der Standardwert "normalerweise" die letzte Architektur, die der Compiler für eine bestimmte Entitätsdeklaration erkannt hat.

Apalopohapa
quelle
1
Danke für deine Antwort! Das gemeinsame Thema scheint zu sein, dass Designs im Allgemeinen nicht genau in die architektonischen Schubladen passen, über die ich gelesen habe. Hoffentlich kann ich ein kanonisches Beispiel finden, um meine (eher pedantische) Neugierde in dieser Angelegenheit zu befriedigen ... Wenn ich von einem "Ideal" abweichen werde, würde ich gerne zumindest wissen, wie ein Ideal aussieht.
MartyMacGyver