hallo,
ich möchte in VHDL eine SM basteln.
Die SM soll Daten in ein DOP Ram schreiben.
Ich habe eine 3 Prozess Struktur:
1 | process(CKL,RESET)
|
2 | begin
|
3 | if RESET ='1' then
|
4 | STATE <= IDLE ;
|
5 | elsif rising_edge(CLK) then
|
6 | STATE <= STATE_next;
|
7 | end if;
|
8 | end process;
|
9 |
|
10 | process(STATE, RESET)
|
11 | begin
|
12 |
|
13 | if RESET ='1' then
|
14 | STATE_next <= IDLE;
|
15 | else
|
16 |
|
17 | case STATE is
|
18 | when IDLE => STATE_next <= DATA_WRITE;
|
19 | when DATA_WRITE => if DATA_COUNTER = X"10" then STATE_next<=IDLE;
|
20 | else STATE_next <= DATA_WRITE;
|
21 | end case;
|
22 | end if;
|
23 |
|
24 | process(STATE, RESET)
|
25 | begin
|
26 |
|
27 | if RESET ='1' then
|
28 | ADDR<= (others => '0') ;
|
29 | DATA<= (others => '0') ;
|
30 | else
|
31 |
|
32 | case STATE is
|
33 | when IDLE => ADDR<= (others => '0') ;
|
34 | DATA<= (others => '0') ;
|
35 | when DATA_WRITE => ADDR<= ADDRESS;
|
36 | DATA<= DATA_WR;
|
37 | ADDRESS <= ADDRESS + '1';
|
38 | DATA_WR <= DATAWR+'1';
|
39 | DATA_COUNTER <= DATA_COUNTER +'1';
|
40 | end case;
|
41 | end if;
|
der Wert von DATA_COUNTER wird beim initialisieren des Siganls
eingegeben
signal DATA_COUNTER : std_logic_vector (7 downto 0) := X"10";
-- es sollen 16 Bytes geschrieben werden
signal DATA : std_logic_vector (7 downto 0) := X"00";
-- die Daten soll bei 0 beginnen aufsteigend bis 15
signal ADDR : : std_logic_vector (7 downto 0) := X"00";
-- es soll ab der Adresse 0 beginnend geschrieben werden
-- auf Adresse 0 wird Data = 0 geschrieben
-- auf Adresse 1 wird Data = 1 geschrieben
-- auf Adresse 2 wird Data = 2 geschrieben
usw.
dh. State DATA_WRITE soll 16 mal aufgerufen werden ( jeweils mit
anderen Daten )
leider funktioniert das nicht5 so wie ich mir das vorgestellt habe,
muss ich im dritten process mit rising_edge(CLK) arbeiten ?
vielen danke
chris