> Ich möchte, das der Process m2, einen Takt später ausgeführt wird als
> der Process m1.
Du hast also zwei Zustände m1 und m2.
Sowas verwaltet man mit einer State-Machine.
1 | signal state : std_logic :='0';
|
2 | :
|
3 | process (clk) begin
|
4 | if rising_edge (clk) then
|
5 | if (state = '1') then
|
6 | c <= a+b;
|
7 | state <= '0';
|
8 | else
|
9 | d <= c;
|
10 | state <= '1';
|
11 | end if;
|
12 | end process;
|
Hier gibt es zwei Zustände, die abwechselnd ausgeführt werden.
> Ich habe versucht den zweiten Process abhängig zu machen vom ersten,
> aber das scheint mir der falsche weg zu sein.
Was du eigentlich brauchst, ist ein dritter Prozess, der die beiden
anderen verwaltet.
1 | signal start : std_logic :='0'; -- irgendein Start-Signal
|
2 | signal dom1 : std_logic :='0'; -- enable Signale für m1 und m2
|
3 | signal dom2 : std_logic :='0';
|
4 | :
|
5 |
|
6 | verwaltung: process (clk) begin
|
7 | if rising_edge (clk) then
|
8 | dom1 <='0';
|
9 | dom2 <='0';
|
10 | if (start='1') then
|
11 | dom1 <='1';
|
12 | end if;
|
13 | if (dom1='1') then
|
14 | dom2 <='1';
|
15 | end if;
|
16 | end if;
|
17 | end process;
|
18 |
|
19 | m1 : process (clk) begin
|
20 | if rising_edge (clk) then
|
21 | if (dom1='1') then
|
22 | c <= a+b;
|
23 | end if;
|
24 | end if;
|
25 | end process m1;
|
26 |
|
27 | m2 : process (clk) begin
|
28 | if rising_edge (clk) then
|
29 | if (dom2='1') then
|
30 | d <= c;
|
31 | end if;
|
32 | end if;
|
33 | end process m2;
|