Forum: FPGA, VHDL & Co. wait until synthetisierbar


von frage (Gast)


Lesenswert?

Hallo,
kurz und knapp:

Sind
[vhdl]
wait until condition;
[\vhdl]
statements immer synthetisierbar?
Also auch mehrere, hintereinander kommende Statements?

von kurze Antwort (Gast)


Lesenswert?

Nein.

von Fpgakuechle K. (Gast)


Lesenswert?

frage schrieb:

> Sind
> [vhdl]
> wait until condition;
> [\vhdl]
> statements immer synthetisierbar?

"Immer" ist immer falsch.

Welche VHDL Konstrukte synthetisierbar sind beschreibt der "synthesis 
style guide" des jeweiligen Synthesetools. Pauschal gültige Antworten 
gibt es dazu nicht.

Relativ oft wird "wait" im zusammenhang mit der Taktflanke zur 
synthesegerechten Beschreibung getakter FF genutzt. Das kann es aber 
auch schon mit den synthesefähigen "wait"-Konstrukten gewesen sein.

MfG,

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?


von Weltbester FPGA Pongo (Gast)


Lesenswert?

Ich frage mich immer noch, was es für einen Sinn macht, solche 
Konstrukte zu verwenden, wenn man synthestisierbaren Code braucht.

Mag sein, dass Xilinx das nimmt, andere tun es gfs nicht.

Der Begriff "wait" macht bei realer Hardware auch keinen Sinn, weil 
Hardware keine wirkliche zeitliche Abhängigkeit kennt. Die müsste man 
erst auch Umwegen hineininterpretieren.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Weltbester FPGA Pongo schrieb im Beitrag #4308475:
> Der Begriff "wait" macht bei realer Hardware auch keinen Sinn, weil
> Hardware keine wirkliche zeitliche Abhängigkeit kennt.
Es fällt zumindest mir nicht arg schwer, "wait until rising_edge(CLK)" 
als "warte auf nächste steigende Taktflanke" zu interpretieren.
Das ist allemal intuitiver als den Takt in die implizite "Warteliste" 
(=Sensitivliste) aufzunehmen und danach nur die steigende Flanke 
abzufragen.

von Ale (Gast)


Lesenswert?

Vielleicht hat er ein sondern Thread gelesen...
"wait until ist bei Lothar Miller synthetisierbar" ;-)
/joke

von fluuppu (Gast)


Lesenswert?

ich frage mich, ob diese Schreibweise einer Statemachine überhaupt guter 
Stil ist?! Oder anders: warum sollte man diese Schreibweise überhaupt 
verwenden? Gibt es da Anwendungen für?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

fluuppu schrieb:
> ob diese Schreibweise einer Statemachine überhaupt guter Stil ist?!
Welche Schreibweise?

Ein "wait until" in der FSM?
Tadelloser Stil, garantiert synchrones Design.
http://www.lothar-miller.de/s9y/archives/16-Takt-im-Prozess.html
http://www.lothar-miller.de/s9y/archives/43-Ein-oder-Zwei-Prozess-Schreibweise-fuer-FSM.html

von fluuppu (Gast)


Lesenswert?

Lothar M. schrieb:
> fluuppu schrieb:
>> ob diese Schreibweise einer Statemachine überhaupt guter Stil ist?!
> Welche Schreibweise?
>
> Ein "wait until" in der FSM?
> Tadelloser Stil, garantiert synchrones Design.
> http://www.lothar-miller.de/s9y/archives/16-Takt-i...
> http://www.lothar-miller.de/s9y/archives/43-Ein-od...

ich bezog mich auf das Beispiel wo Du ganz viele "Wait until" im Prozess 
hattest. Da hast du ja beides gegenübergestellt:
1
architecture Behavioral of wait_im_process is
2
signal cnt : integer range 0 to 6;
3
begin
4
5
  process begin
6
    wait until rising_edge(clk100MHz);
7
    case cnt is
8
      when 0 => dout <= '0';
9
      when 1 => clk <= '1';
10
      when 2 => clk <= '0';
11
                dout <= '0';
12
      when 3 => clk <= '1';
13
      when 4 => clk <= '0';
14
                dout <= din;
15
      when 5 => dout <= '1';
16
      when 6 => clk <= '0';
17
                dout <= '1';
18
    end case;
19
    if (cnt<6) then cnt <= cnt+1;
20
    else            cnt <= 0;
21
    end if;
22
  end process;
23
24
end Behavioral;


Versus
1
entity wait_im_process is
2
    Port ( clk10ns : in  STD_LOGIC;
3
           din  : in   STD_LOGIC;
4
           dout : out  STD_LOGIC := '0';
5
           clk  : out  STD_LOGIC := '0');
6
end wait_im_process;
7
8
architecture Behavioral of wait_im_process is
9
begin
10
11
  process begin
12
    dout <= '0';
13
    wait until rising_edge(clk10ns);
14
    clk <= '1';
15
    wait until rising_edge(clk10ns);
16
    clk <= '0';
17
    dout <= '0';
18
    wait until rising_edge(clk10ns);
19
    clk <= '1';
20
    wait until rising_edge(clk10ns);
21
    clk <= '0';
22
    dout <= din;
23
    wait until rising_edge(clk10ns);
24
    dout <= '1';
25
    wait until rising_edge(clk10ns);
26
    clk <= '0';
27
    dout <= '1';
28
    wait until rising_edge(clk10ns);
29
  end process;
30
31
end Behavioral;

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

fluuppu schrieb:
> ich bezog mich auf das Beispiel wo Du ganz viele "Wait until" im Prozess
> hattest.
Das war nur ein Beispiel, was Synthesizer schon können. Ich würde das 
auch niemals (oder bestenfalls in homöopathischen Mengen) in 
produktivem Code einsetzen...

von berndl (Gast)


Lesenswert?

fluuppu schrieb:
> ich frage mich, ob diese Schreibweise einer Statemachine überhaupt guter
> Stil ist?! Oder anders: warum sollte man diese Schreibweise überhaupt
> verwenden? Gibt es da Anwendungen für?

* Keine Sensitivitaetsliste notwendig
* Eine Einrueckungstiefe im Source weniger -> mehr Platz auf dem 
Bildschirm bzw. kann man den Tabulator auch groesser stellen, was der 
Uebersichtlichkeit enorm dient
* Sofort erkennbar, dass da kein asynchrones Zeugs im Prozess steht

Also ich sehe da nur Vorteile und damit ist es fuer mich "guter Stil"

von Olga (Gast)


Lesenswert?

berndl schrieb:
> * Keine Sensitivitaetsliste notwendig
> * Eine Einrueckungstiefe im Source weniger -> mehr Platz auf dem
> Bildschirm bzw. kann man den Tabulator auch groesser stellen, was der
> Uebersichtlichkeit enorm dient
> * Sofort erkennbar, dass da kein asynchrones Zeugs im Prozess steht
>
> Also ich sehe da nur Vorteile und damit ist es fuer mich "guter Stil"

Und weiter:
* sofort erkennbar, dass der Zustandsgraph der Statemaschine einfach nur 
ein großer Kreis ist.
* sofort erkennbar, dass der Zustand nicht noch andere Prozesse 
beeinflusst, da es kein explizites Zustandssignal gibt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Hoppla, da sind jetzt 2 Beschreibungsarten zugleich bewertet worden:
a) die 1-Prozess-Schreibweise mit einem wait until ganz am Anfang
und
b) der "dauerlaufende" Prozess mit mehreren wait, der eigentlich nur ein 
Bitmuster ausgeben kann.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.