Ich verwende einen Spartan 3A. (XC3S50A)
Im meiner Logik habe ich am Anfang so eine Art Power Up Reset eingebaut.
Ich habe ein Reset-Signal, und während dieses auf 1 ist, wird kein
Prozess ausgeführt. Ein Counter zählt auf 0 hinab und wenn er auf 0 ist,
geht das Reset-Sigal auf 0. Nun werden die Prozesse auf die Flanke des
Clocks ausgeführt:
1 | power_up_reset: process(s_reset, CLK_25M)
|
2 | begin
|
3 | if s_reset = '1' then
|
4 | if rising_edge(CLK_25M) then
|
5 | if sv_pur_cnt > x"00000" then
|
6 | sv_pur_cnt <= sv_pur_cnt - 1;
|
7 | s_reset = '1';
|
8 | else
|
9 | s_reset = '0';
|
10 | end if;
|
11 | end if;
|
12 | end if;
|
13 | end process power_up_reset;
|
Die anderen Prozesse fangen nun folgendermassen an:
1 | other_process: process(s_reset, CLK_50M)
|
2 | begin
|
3 | if s_reset = '1' then
|
4 | -- soll ich hier nun die Signale, die für diesen Prozess deklariert wurden, reseten/initialisieren?
|
5 | elsif rising_edge(CLK_50M) then
|
6 | --...
|
7 | --...
|
8 | end if;
|
9 | end process other_process;
|
Wenn ich die Signale vor dem Begin der Behavioral bereits definiert und
mit einem initialen Wert versehen habe, ist es dann noch erforderlich,
sie z.B. während dem Power Up Reset noch extra zu initialisieren, damit
sie 100% sicher den Wert haben, den ich will?
Oder behalten sie auf jeden Fall den Wert, der ich ihnen bei der
Definition mitgegeben habe?
1 | signal s_counter : STD_LOGIC_VECTOR(7 downto 0) := x"FF";
|
Also in diesem Fall den Wert 255?