Wie definiert man eine VHDL-Entität mit zwei Architekturen?

Derzeit habe ich eine „Adder“-Entität mit zwei Architekturen: (1) RippleCarryAdder (2) CarryLookAheadAdder.

Ich habe alle Definitionen wie folgt in einer einzigen VHDL-Datei abgelegt:

entity adder is
generic (N: integer := 16);
  Port ( Cin : in  STD_LOGIC;
      x : in  std_logic_vector (N - 1 downto 0);
      y : in  std_logic_vector (N - 1 downto 0);
      s : out  std_logic_vector (N - 1 downto 0);
      Cout : out  STD_LOGIC);
end adder;

architecture RippleCarryAdder of adder is
begin
  ...
end RippleCarryAdder;

architecture CarryLookAheadAdder of adder is
begin
  ...
end CarryLookAheadAdder 

Unter Verwendung von ISE 14.7 Xilinx kann ich sehen, dass das Tool Schwierigkeiten hat, zwei Architekturen, die der Entität „Adder“ zugeordnet sind, richtig zu unterscheiden. Es erkennt nur die letzte in der Datei angegebene Architektur (in diesem Fall 'CarryLookAheadAdder').

Ich denke, es gibt etwas mit der Dateidomäne oder vielleicht einige Regeln, die die Architekturdeklaration regeln, die mir nicht bekannt sind. Seltsam, dass die VHDL-Dokumentation nicht über mehrere Architekturen und Dateistrukturen gesprochen hat. Sollte ich zwei Dateien verwenden und die Entity-Deklaration in beide kopieren? Können Sie auf eine Seite verweisen, auf der mehrere von Xilinx ISE unterstützte Architekturformate richtig beschrieben werden? (Zum Beispiel wird das Konfigurationsschlüsselwort nicht unterstützt und ich muss auf ein anderes Format für gebundene Architekturen zurückgreifen.)

Dies kann durchaus eine Einschränkung von Xilinx sein. Ein Ansatz, der funktionieren sollte (aber Xilinx hatte in der Vergangenheit Probleme, etwas so Grundlegendes wie die VHDL-Bibliotheken zu unterstützen, also möglicherweise nicht), besteht darin, Entitäten und Architekturen in separaten Dateien (3 Dateien) abzulegen. Dann können Sie direkt wie folgt instanziieren Adder1 : entity work.my_ent(my_arch1) generic map () port map ();. Andernfalls ist es möglicherweise an der Zeit, Konfigurationen zu lernen.
Was ist das alternative Xilinx? Kann ich einen anderen VHDL-Compiler verwenden und trotzdem Xilinx-FPGAs programmieren?
Finden Sie zuerst heraus, ob es ein Problem ist. Abhängig von den FPGAs bietet Xilinx sowohl Vivado als auch ISE an, und für einige FPGA-Familien können Sie innerhalb von ISE zwischen dem alten (fehlerhaften) und neuen (verschiedene Fehler) Parser wählen (über die Option "neuen Parser verwenden"). Wenn alles andere fehlschlägt, verkauft Synplicity eine Version, die auf Xilinx abzielt, sodass Sie eine andere Reihe von Fehlern ausprobieren können.
"Versuchen Sie verschiedene Arten von Fehlern". Bringt mich zum Lachen. lol Danke.
Haben Sie versucht, Konfigurationen zu verwenden?
Die Konfigurationseinheit in Xilinix ISE wird nicht unterstützt, funktioniert zumindest bei mir nicht. Aber ich habe es geschafft, zumindest die Architekturen an die Entität gebunden zu bekommen, indem ich Folgendes verwendet habe: "für AdderNormal: adder use entity basic.adder(RippleCarryAdder); for AdderLookAHead: adder use entity basic.adder(CarryLookAheadAdder);" Aber dann wird die GUI sehr chaotisch: In ISE 8.1i aktualisiert die GUI den Architekturnamen nicht korrekt. Dies wurde in IDE 14.7 behoben, aber dann sperrt es die erste Architektur und ich kann nicht darauf doppelklicken, um die zugehörige VHDL-Datei zu öffnen. Ich vermute, beide haben Fehler. Vivado habe ich noch nicht ausprobiert.
Ich wünschte, ich wäre zynisch, als ich das sagte! ISE8 ist VIEL zu alt für diese Art von Arbeit. Es dauerte bis ISE12 oder 13, bis ISE VHDL-Bibliotheken richtig unterstützte, und selbst dann brauchte die GUI noch ein paar Releases, um aufzuholen. In der guten alten Zeit konnten Sie minimale Testfälle über das Webcase-System einreichen, und Xilinx akzeptierte sie. Mein Rekord war 8 gleichzeitig geöffnete Webcases, 5 davon führten zu Fehlern, die in späteren Revisionen behoben wurden (hauptsächlich in ISIM, aber ein oder zwei in ISE). Als akademischer Benutzer haben Sie möglicherweise immer noch einen Kanal, um dies zu tun.

Antworten (2)

  1. Um mehrere Architekturen in einer einzigen Entität zu verwenden, ist die Struktur, nach der Sie suchen (glaube ich), configurations . Ich könnte nie Kopf oder Zahl von Konfigurationen machen, und die Verwendung ist geheimnisvoll, soweit ich das beurteilen kann. Viel Glück, wenn Sie es versuchen.
  2. Der halbherzige Weg, dies zu tun, wäre die Verwendung einer if generate- Anweisung mit einem generischen Parameter, der auswählt, welche Instanziierung verwendet werden soll. Dies erfordert separate Entitäten für jede Architektur und eine dritte Entität, die als Wrapper um die Generate-Anweisung fungiert.
  3. Der wirklich faule Weg wäre, Ihren HalfAdder und RippleCarryAdder einfach direkt als separate Module zu instanziieren und die Kopfschmerzen insgesamt zu ignorieren.

Ich habe noch nie etwas davon versucht, und ich habe ISE seit Jahren nicht mehr verwendet. Ich weiß nicht, ob es funky Konfigurationen unterstützt, und es würde mich ehrlich gesagt nicht überraschen, wenn dies nicht der Fall wäre. Wie alle anderen schon sagten, würde ich vorschlagen, auf Vivado umzusteigen

Ok ich glaube ich habe die richtige Antwort bekommen:

Wir können „entity“ in eine separate Datei und „architecture1“ in eine andere Datei und „architecture2“ wieder in eine andere Datei einfügen. Wir werden also 3 separate Dateien haben. Hier spielt die Reihenfolge der Zusammenstellung eine Rolle. Zuerst muss die Datei kompiliert werden, die die 'Entity'-Definition enthält, und dann die Architekturen. Xilinx ISE verfügt über eine Option, mit der Sie die Reihenfolge der Kompilierung manuell festlegen können. Wir können auch alle drei in einer einzigen Datei zusammenfassen, Entität kommt zuerst und Architekturen folgen.

ISE 8.1i bis 14.7 unterstützt mehrere Architekturen und Konfigurationen nicht RICHTIG. Die einzigen Setups, die ich richtig hinbekommen habe, sind:

  1. Vivado v2015.4 64-Bit (Komischerweise brauchten sie 10 Jahre, um grundlegende VHDL-Funktionen zu unterstützen)
  2. GHDL mit GTKWave: Dieses Setup unterstützt auch perfekt mehrere Architekturen, noch besser als Xilinx-Tools! Der einzige Nachteil war, dass ich in Windows den Fehler „begrenzte Stapelgröße“ bekam. Ich bin auf die Linux-Version umgestiegen und es hat gut funktioniert.
Welche ghdl-Version? ghdl hatte früher eine --stack-size=nnnnOption, die jetzt veraltet ist. Wenn Sie bereits ghdl-0.34dev verwenden, sollten Sie dies mit testcase unter github.com/tgingold/ghdl/issues melden (stellen Sie klar, dass es sich um ein Problem mit der Windows-Version handelt).
Für GHDL habe ich ein Installationsprogramm namens "ghdl-installer-0.29.1.exe" verwendet, also schätze ich, dass meine Version alt war und immer noch diesen Stack-Size-Bug hatte. Mein GHDL unter Linux hat die Version 0.33 und hat dieses Problem mit der Stapelgröße nicht.