Warum wird dieser Decoder nicht als LUT abgeleitet?

Ich versuche, einen Stapel zu modellieren, der Push- und Pop-Operationen hat.

entity stack_256x16 is
    Port (
        push : in std_ulogic;
        pop : in std_ulogic;
        dout : out std_ulogic_vector (15 downto 0);
        din : in std_ulogic_vector (15 downto 0);
        clk : in std_ulogic);
end stack_256x16;

Im Architekturkopf:

type operation is (OpNone, OpPush, OpPop);
signal op : operation;

Im Architekturbüro:

op <= OpPush when (push = '1' and pop = '0') else
      OpPop when (push = '0' and pop = '1') else
      OpNone;

Ich möchte nur die Push- und Pop-Eingaben in eine Operation dekodieren. Der eine oder der andere kann so eingestellt werden, dass er die erwartete Operation ausführt. Wenn keine oder beide festgelegt sind, tun Sie nichts.

Ich würde erwarten, dass etwas so Einfaches als LUT implementiert wird. Stattdessen bekomme ich, wenn ich das ausgearbeitete Design (schematische RTL-Ansicht) öffne, dieses Durcheinander von Muxes und Logik. Warum passiert das?Durcheinander von Muxen und Logik

Ich verwende Xilinx PlanAhead 14.7 und einen Spartan 6. Der Wert von opwird als Selektor in einigen Muxen verwendet, die verschiedene Adressen und Steuersignale auswählen und registrieren.

Was lässt Sie glauben, dass das Einpassen dieser bestimmten Aussage in eine LUT zur effizientesten Implementierung der gesamten Schaltung führt?
Gutes Argument. Ich glaube, ich habe falsche Annahmen darüber getroffen, welches Optimierungsniveau durchgeführt und wie der Schaltplan dargestellt werden würde. Das Post-Synthese-Schema ist näher an dem, was ich mir vorgestellt habe.
RTL /= LUTs. Die Technologieansicht kann zeigen, dass mehrere der "RTL-Ansicht"-Gatter in einer LUT zusammengefasst sind.

Antworten (1)

Das RTL-Schema zeigt Ihnen, wie es Ihren Code interpretiert hat. Wie Sie sehen können, hat es genau die Kombination aus ANDGates und Multiplexern, die Ihr Code beschreibt. Wenn Sie wissen möchten, wie es dies in den FPGA-Ressourcen abgebildet hat, müssen Sie sich das „Technologieschema“ ansehen.

Beachten Sie, dass das Technologieschema schwer zu navigieren ist, es sei denn, Sie setzen die Syntheseoption „Netzlistenhierarchie“ auf „neu aufgebaut“. Beachten Sie auch, dass die Tools Ihren Code wahrscheinlich auf eine Weise optimieren, die beim Betrachten des Technologieschemas schwer verständlich sein kann. Möglicherweise können Sie die LUT nicht leicht finden, die nur einer bestimmten Zeile des VHDL-Codes entspricht, im Gegensatz zu dieser Zeile in Kombination mit vorherigen und nachfolgenden (in Bezug auf den Logikfluss) Zeilen.

Ich habe die Synthese ausgeführt und den Schaltplan für das synthetisierte Design geöffnet. Das ist eher so, wie ich es erwartet hatte (nun, ich hatte etwas zwischen diesen beiden Ebenen erwartet, aber egal). Zumindest verstehe ich jetzt ein bisschen mehr darüber, was die Tools tun.
@FusterCluck Wenn die Antwort Ihr Problem löst, würden Sie sie normalerweise als richtig markieren, indem Sie auf das Häkchen links klicken.
Noch weiter: In einem optimierten Design kann eine VHDL-Zeile mehreren LUTs an verschiedenen Orten zugeordnet werden, und mehrere VHDL-Zeilen an verschiedenen Stellen können derselben LUT zugeordnet werden.