Forum: FPGA, VHDL & Co. Error: wait statem must contain condition clause with until


von G. B. (geri)


Lesenswert?

Hallo zusammen

Inzischen habe ich es geschaft ein erstes Programm, welches in VHDL 
geschrieben ist, zum Laufen zu bringen. Den Code und ein paar Tipps 
werde ich dann gelegentlich auf meiner Webseite platzieren.

Nun stehe ich aber wieder vor einem Problemchen: Der Titel sagt es 
schon. Ich habe folgenden Code:
1
library IEEE;
2
use IEEE.std_logic_1164.all;
3
4
entity clkstim is
5
  port (
6
    phi1: out STD_LOGIC;
7
    phi2: out STD_LOGIC;
8
    reset: out STD_LOGIC);
9
end clkstim;
10
11
architecture clkstim_arch of clkstim is
12
begin
13
  reset_process: reset <= '1', '0' after 10 ns;
14
  clock_process: process
15
  begin
16
    phi1 <= '1','0' after 10 ns;
17
    phi2 <= '0', '1' after 12 ns, '0' after 18 ns;
18
    wait for 20ns;
19
  end process clock_process;
20
end clkstim_arch;

und erhalte die Meldung:
"wait statement must contain condition clause with until"
Der Fehler tritt in der Zeile mit der Anweisung "wait for 20ns" auf.



Habt ihr vielleicht eine Ahnung, wie man dieses Problem lösen kann? Ich 
arbeitet mit Quartus II

Beste Grüsse und vielen Dank im Voraus
Geri

von Rick Dangerus (Gast)


Lesenswert?

Mach mal ein Leerzeichen zwischen "20" und "ns".

Rick

von G. B. (geri)


Lesenswert?

Hallo Rick

nutzt auch nichts...

Geri

von +++ (Gast)


Lesenswert?

Ein Prozess braucht entweder eine Sensitivity-Liste oder er muß eine 
wait-until-Abfrage haben. Ist beides nur für den Simulator, aber es ist 
eben gefordert.

von fpgaküchle (Gast)


Lesenswert?

Ich habe den source mit modelsim compiliert, funzt bestens. Entweder 
Quartus hat hier nen bug, oder er versucht den Code zu synthetisieren. 
Letzteres kann ja nicht klappen wegen der absoluten Verzögerungen. 
Synthese-VHDL ist nicht standarddisiert, da kocht jeder hersteller sein 
eigenes Süppchen. Da ist es gut möglich das ein "wait until " 
synthetisierbar ist.

von G. B. (geri)


Lesenswert?

Hallo zusammen

In diesem Fall wird es wohl an Quartus liegen. Ich habe diese 
Deklaration aus meinen Beispielunterlagen.


Beste Grüsss und vielen Dank
Geri

von Klaus F. (kfalser)


Lesenswert?

Dein VHDL Programm ist typisch für einen VHDL Simulator, Quartus ist 
aber ein Synthese Tool.
Bei der Synthese kannst Du keine Verzögerung angeben, dann müßte das 
FPGA ja einen  Oszillator, oder zumindest eine programmierbare 
Verzögerung enthalten.
Bei der Synthese kannst Du nur auf eine Takt-Flanke warten, also

wait until clock'event and clock = '1';

oder

wait until clock = '1';

Grüße
Klaus

von G. B. (geri)


Lesenswert?

Hallo Klaus

Vielen Dank für Deine Info. Das kann ich nachvollziehen.

Mit obigem Programm wollte ich eigentlich auch nur einen Stimulus für 
den Simualtor erzeugen. Ich war bisher der Annahme, man könne einen 
Stimulus in VHDL codieren, ein weiteres Modul (z.B. die Archtiktur eines 
Zählers) einbinden, die Signale miteinander verknüfen und die 
Funktionalität (des Zählers) testen.

Beste Grüsse

Geri

von Rick Dangerus (Gast)


Lesenswert?

@Gerhard

Das ist prinzipiell richtig. Ich kenne Quartus nicht. ISE von Xilinx 
bietet eine Funktion die Testbench automatisch in VHDL zu erzeugen. Aber 
die Testbenchs sind, wie schon gesagt wurde, nur für die Simulation, 
nicht für die Synthese.

Eventuell kannst Du Deinem Quartus irgenwo mitteilen, das Du Simulation 
machen möchtest (ISE bietet auch beides an.)? Oder Du verwendest 
ModelSim für die Simulation.

Rick

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.