Process bei zweitem Takt starten

Gast #1316140
Lesenswert?

Hallo ich habe eine frage zum Process ablauf in VHDL.
Ich möchte, das der Process m2, einen Takt später ausgeführt wird als 
der Process m1. Das heißt, wenn c einen Wert hat, soll der Process m2 
beim nächsten Takt ausgeführt werden.
1
.
2
m1 : process (clk) is
3
if rising_edge (clk) then 
4
begin
5
c <= a+b;
6
end if;
7
end process m1;
8

9
m2 : process (clk) is  -- m2 : process (c) is ??
10
begin
11
if rising_edge (clk) then 
12
begin
13
d <= c;
14
end if;
15
end process m2;
16
.
   --      --
__|  |____|  |___
   m1      m1
           m2

Ich habe versucht den zweiten Process abhängig zu machen vom ersten,
aber das scheint mir der falsche weg zu sein.

Gruß Timo
Moderator (Firma: Titel) Persönliche Seite #1316166
Lesenswert?

> 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;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren