Hallo,
untenstehendes Programm ist die Musterlösung zu einer Übungsaufgabe. Das
Programm soll einen 3:1 Taktteiler darstellen. Mein Frage dazu ist:
weder "state" noch "nextstate" sind initialisiert. Ich nehme an, sie
bekommen einen der Werte die für diesen Datentyp definiert sind
zugewiesen. Wenn beide Signale den selben Werte zugewiesen bekommen,
wird sich "state" nie ändern und das Ding läuft nie an es sei denn
irgendwann wird ein Reset ausgeführt. Stimmt das oder übersehe ich
irgendwas?
1 | library IEEE;
|
2 | use IEEE.std_logic_1164.all;
|
3 | use IEEE.std_logic_unsigned.all;
|
4 | entity divideby3 is
|
5 | port ( reset : in std_logic;
|
6 | clk : in std_logic;
|
7 | q : out std_logic
|
8 | );
|
9 | end divideby3;
|
10 |
|
11 | architecture behav of divideby3 is
|
12 | type statetype is (S0, S1, S2);
|
13 | signal state, nextstate : statetype;
|
14 | begin
|
15 | process (reset, clk)
|
16 | begin
|
17 | if reset = '1' then
|
18 | state <= S0;
|
19 | elsif clk'event and clk = '1' then
|
20 | state <= nextstate;
|
21 | end if;
|
22 | end process;
|
23 |
|
24 | -- Überführungsschaltnetz u. Ausgangsschaltnetz
|
25 | process (state) begin
|
26 | case state is
|
27 | when S0=> nextstate <= S1; q<='0';
|
28 | when S1=> nextstate <= S2; q<='1';
|
29 | when S2=> nextstate <= S0; q<='0';
|
30 | end case;
|
31 | end process;
|
32 | end behav;
|