VHDL-Simulation Volladdierer, Timing-Frage

Nehmen wir an, ich habe zum Beispiel dieses Design:

library ieee;
use ieee.std_logic_1164.all;

entity adder is
port(x : in std_logic_vector(3 downto 0);
     y : in std_logic_vector(3 downto 0);
     z : out std_logic_vector(4 downto 0));
end entity adder;

architecture rtl of adder is
    signal c : std_logic_vector(3 downto 0);
begin
    adder_gen : for i in 0 to 4 generate
        half_adder_gen : if i = 0 generate
            z(i) <= x(i) xor y(i);
         c(i) <= (x(i) and y(i));
   end generate half_adder_gen;
        full_adder_gen : if 0 < i and i < 4 generate
            z(i) <= x(i) xor y(i) xor c(i-1);
         c(i) <= (x(i) and y(i)) or ((x(i) or y(i)) and c(i-1));
        end generate full_adder_gen;
        overflow_gen : if i = 4 generate
            z(i) <= c(i-1);
        end generate overflow_gen;
    end generate; 
end architecture rtl;

Wenn ich ein Design wie dieses ausführe, sehe ich normalerweise in der Wellenform, dass sich ALLE Bits des Ausgangs sofort ändern, sobald sich auch die Eingangsbits ändern. Dieses Verhalten ist jedoch nicht das, was ich in diesem Fall erwarte. Ich würde erwarten, dass sich die Ausgabebits y(4) ... y(0)ändern, wenn der Wert von c(i)bekannt ist, aber ein solches Bit hängt von ab c(i-1)und so weiter ... Gibt es etwas, das ich nicht verstehe?

Für eine passende Definition von "unmittelbar". Verfolgen Sie einzelne Delta-Zyklen, um zu sehen, was wirklich vor sich geht. Während die Antwort auf die Gate-Level-Simulation richtig ist, benötigen Sie in der Praxis selten bis nie Gate-Level-Simulationen - zumindest in synchronen Designs in FPGA.

Antworten (1)

Das würden Sie erwarten, wenn Sie die sogenannte RTL-Simulation ausführen. Ihre Toolkette sollte über eine Simulation auf Gate-Ebene verfügen, die das synthetisierte Design für Ihr Zielgerät übernimmt und dem Simulator die spezifischen Verzögerungen gibt. Hier sind sie in Quartus:Simulation

Okay, vielleicht habe ich es verstanden. Die RTL ist die Logiksimulation, während die Gate-Ebene die physikalischen Eigenschaften der in der Netzliste angegebenen Gates ausnutzt, habe ich recht?
Ja. Es ist jedoch nicht die Netzliste, sondern das synthetisierte Design. Außerdem ist die RTL-Simulation schneller. Normalerweise mache ich RTL -> Timing Closure. Die Gate-Ebene ist nützlich, wenn Sie etwas pipen möchten. Sie können sehen, was die Verzögerungen für jeden Abschnitt sind
Ist die Ausgabe der Synthese nicht die Netzliste?
Die Netzliste ist wie ein Schaltplan der Gatter. Das synthetisierte Design platziert tatsächlich die Gates und gibt Ihnen die Verbindungsverzögerungen.
Ich dachte, die Netzliste sei eine Art Diagramm, in dem jeder Knoten physikalische Eigenschaften wie Widerstand, Kapazität, Ausbreitungsverzögerung hat, von denen ich annahm, dass es möglich sei, die Informationen über die gesamte Ausbreitung abzurufen.
Im Allgemeinen hat eine Netzliste keine Hardware-Eigenschaften. Selbst wenn dies der Fall wäre, ist eine Hauptquelle von Verzögerungen die Verbindung zwischen Gattern. Es gibt auch andere Komplikationen. Möglicherweise kann ein bestimmtes Tor aufgrund von Einschränkungen usw. nicht in der Nähe angebracht werden. Diese Dinge können zu erheblichen Schwankungen in den Zeitabläufen führen.
Können Sie mir bitte ein Tutorial zeigen, wie man eine Gate-Level-Simulation richtig einrichtet? Wenn ich es versuche, wie Sie es mir gezeigt haben, startet es den ModelSim mit einem Fehler.
Dazu müssen Sie die Dokumentation der Tools konsultieren. Es kommt darauf an, was der Fehler ist. Mein Rat: Versuchen Sie zuerst ein einfaches Not-Gate, dh Y <= not A. Auf diese Weise wissen Sie, dass das Problem bei der Konfiguration und nicht bei Ihrem Code liegt, wenn Fehler auftreten.
Neue Frage mit mehr Informationen gestartet: electronic.stackexchange.com/questions/249238/…