mehrmaliges Setzen eines Signales in einem Process
mehrmaliges Setzen eines Signales in einem Process
Hallo,
ich vermute, dass man in einem Process ein Signal nicht mehrmals setzen kann. (zumindest bei synthetisiertem Code) Als Beispiel:
SIGNAL counter : std_logic_vector(3 DOWNTO 0) = "1000";
PROCESS (clk) BEGIN IF(rising_edge(clk)) THEN counter = "0000"; counter = counter + 1; END IF; END PROCESS;
Dann ist nach dem ersten Abarbeiten des Processes Counter bei mir "1001" und nicht "0001".
Ist meine Annahme korrekt oder hab ich irgendwas nicht beachtet? (nutze Quartus 6.0 von Altera mit MAX II -CPLD)
Vielen Dank fuer die Hilfe schon mal.
Re: mehrmaliges Setzen eines Signales in einem Process
Hi!
Das liegt daran, weil nur immer bei der Steigenden Flanke die Werte upgedated werden. In deinem Fall macht das daher keinen sinn zuerst 0 zuzweisen und dann 1 dazu zu zählen. Denn der Counterwert wird nur bei der steigenden flanke übernommen, was er übernimmt (zuweist) liegt am letzten Befehl den er ausführt. -> daher ist die erste Zuweisung sinnlos (verstehe sowieso ned ganz was der Code bringen soll). Ich glaube außerdem auch das Quartus diese Zeile sowieso wegoptimiert, bin mir da aber nicht ganz sicher. Daher kannst du jetzt hoffentlich auch verstehen warum du 1001 raus bekommst. wenn man getaktete Sachen hat mus man eben aufpassen.
SIGNAL counter : std_logic_vector(3 DOWNTO 0) = "1000";
PROCESS (clk) BEGIN IF(rising_edge(clk)) THEN counter = "0000"; counter = counter + 1; END IF; END PROCESS;