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 ...)
quelle
arch
und 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. Allerdingsbehavioural
impliziert 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 derrtl
Name 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.)Hier sind die Architekturtypen:
Verhalten:
Allgemeine Hinweise:
Xilinx-spezifische Hinweise
Strukturell:
Allgemeine Definition
Xilinx xspezifische Notizen
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.
quelle
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.
quelle