Momentan versuche ich meine VHDL Fähigkeiten zu entwickeln und deshalb benutze ich das Sigasi Plugin für Eclipse um VHDL Code zu schreiben. Sigasi ist ein großartiges Werkzeug, aber es gibt eine Sache, die mich jedoch stört. Ständig weckt Sigasi Warnungen über unvollständige Sensitivitätslisten in Prozessdefinitionen, die aus meiner Sicht nicht gerechtfertigt sind. Ein Beispiel ist die folgende Entität mit der entsprechenden Architektur. Es ist die Beschreibung eines RingschiebeUnvollständige Sensitivitätsliste in VHDL mit Sigasi Editor
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity RingShiftReg is
generic(
WIDTH : integer := 8
);
port(
clock : in std_ulogic;
reset : in std_ulogic;
set : in std_ulogic;
initValue : in std_ulogic_vector(WIDTH - 1 downto 0);
value : out std_ulogic_vector(WIDTH - 1 downto 0)
);
end;
architecture ringShiftRegArch of RingShiftReg is
signal innerValue : std_ulogic_vector(WIDTH - 1 downto 0);
begin
P1: process(clock, reset)
begin
if reset = '1' then
innerValue <= (others => '0');
elsif rising_edge(clock) then
if set = '1' then
innerValue <= initValue;
end if;
else
innerValue <= innerValue(WIDTH - 2 downto 0) & innerValue(WIDTH - 1);
end if;
end process;
value <= innerValue;
end ringShiftRegArch;
Die Sigasi Linter behauptet registrieren, dass die Empfindlichkeit der Prozessliste P1
unvollständig ist, da das Signal innerValue
fehlt. Aber meiner Meinung nach ist es nicht notwendig, innerValue
in die Empfindlichkeitsliste zu setzen, denn es ist völlig abhängig von clock
und reset
.
Was ist jetzt richtig?
Sigasi. Und nicht unbedingt aus dem Grund, den Sie vielleicht denken. innerValue wird nicht aktualisiert, solange ein ausstehender Prozess noch nicht fortgesetzt oder angehalten wurde. Du implizierst eine Verzögerung bei der letzten Aufgabe. Das Setzen von innerValue in die Empfindlichkeitsliste ist ebenfalls ein Fehler, der dazu führen würde, dass innerValue in aufeinanderfolgenden Delta-Zyklen fortlaufend aktualisiert wird (bis Sie ein Limit erreichen, wenn es implementiert ist). Die Zuweisung ist eine kombinatorische Schleife. Warum sollte innerValue nicht auf den Ausdruck der rechten Hand in der letzten Zuweisung in der if-Anweisung gesetzt werden, die von initValue aus zuweist? Oder deklarieren Sie innerValue als Variable im Prozess. – user1155120
Ihr Prozess modelliert nicht die Art von digitaler Hardware, die in den meisten Technologien (ASIC oder FPGA) implementiert werden kann. Ich schlage vor, die Antwort, die ich vor ein paar Stunden für die sehr ähnliche Frage geschrieben habe, sorgfältig zu lesen (Match-Simulation und Post-Synthese-Verhalten in VHDL) (http://stackoverflow.com/questions/38778965/match-simulation-and-post) -synthesis-Verhalten-in-vhdl/38783500 # 38783500)? –