www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Process bei zweitem Takt starten


Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
.
m1 : process (clk) is
if rising_edge (clk) then 
begin
c <= a+b;
end if;
end process m1;

m2 : process (clk) is  -- m2 : process (c) is ??
begin
if rising_edge (clk) then 
begin
d <= c;
end if;
end process m2;
.
   --      --
__|  |____|  |___
   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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.
signal state : std_logic :='0';
:
process (clk) begin
   if rising_edge (clk) then 
   if (state = '1') then
      c <= a+b;
      state <= '0';
   else
      d <= c;
      state <= '1';
   end if;
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.
signal start : std_logic :='0'; -- irgendein Start-Signal
signal dom1 : std_logic :='0';  -- enable Signale für m1 und m2
signal dom2 : std_logic :='0';
:

verwaltung: process (clk) begin
 if rising_edge (clk) then 
   dom1 <='0';
   dom2 <='0';
   if (start='1') then
      dom1 <='1';
   end if;
   if (dom1='1') then
      dom2 <='1';
   end if;
 end if;
end process;

m1 : process (clk) begin
   if rising_edge (clk) then 
      if (dom1='1') then
         c <= a+b;
      end if;
   end if;
end process m1;

m2 : process (clk) begin
   if rising_edge (clk) then 
      if (dom2='1') then
         d <= c;
      end if;
   end if;
end process m2;

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für den Hinweis mit dem dritten Process.
Genau so was habe ich gebraucht.
Danke.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.