Fehler im VHDL-Code (Anfängerfrage)

#1146338
Lesenswert?

Versuche mich gerade in VHDL einzuarbeiten.
Habe dafür zunächst einmal das Tutorial von ISE 10.1 durch gearbeitet 
und Versuche nun mich mit ISE und ein Paar Simulationen erst mal so mit 
den Grundprinzipien vertraut zu machen.

Aktuelles Problem liegt darin, das mir der Compiler die Syntax im 
folgenden Code mit einem "parse error, unexpected IF" als Falsch 
ankreidet.
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use IEEE.STD_LOGIC_ARITH.ALL;
4
use IEEE.STD_LOGIC_UNSIGNED.ALL;
5

6
---- Uncomment the following library declaration if instantiating
7
---- any Xilinx primitives in this code.
8
--library UNISIM;
9
--use UNISIM.VComponents.all;
10

11
entity DFF is  
12

13
port (
14
      CLK : in STD_LOGIC;
15
      D : in  STD_LOGIC;
16
      RST : in  STD_LOGIC;
17
      Q : out  STD_LOGIC
18
     );
19

20
end DFF;
21

22
architecture Behavioral of dff is
23

24
begin 
25
 process (CLK)               
26
  if RST='1'then    -- !!Hier wird der Fehler gemeldet
27
    Q <='0';
28
   else if RISING_EDGE(CLK) THEN
29
     Q <= D;
30
   end if;
31
  end if;
32
 end process;
33

34
end Behavioral;

Leider finde ich keine Begrüdung warum die if-Abfrage so nicht möglich 
sein soll. Wäre nett mir da jemand einen Hinweis geben könnte.

Gruß,

Stefan

P.S.: Hoffe mal ich hab bei meiner Suche im Forum nichts übersehen.
#1146390
Lesenswert?

das eine
1
 end if;
 hab ich nun auch raus genommen, bringt aber leider ebenso keine 
Abhilfe. Stellt es ein Problem dar, das der Prozess mit dieser 
If-Anweisung quasi abhängig von RST wird?

Hab grade folgendes probiert:
1
architecture Behavioral of dff is
2

3
begin 
4
 process (CLK,RST)               
5
  if RST='1'then    -- !!Hier wird der Fehler gemeldet
6
    Q <='0';
7
   else if RISING_EDGE(CLK) THEN
8
     Q <= D;
9
   end if;
10
  end if;
11
 end process;
12

13
end Behavioral;

bringt aber auch keine Änderung.

In einem Tutorial hab ich folgendes gefunden:
1
process (clk;rst; ...;)

Aber dabei meckert er mir die Semikola in der Liste an. Daher hab ich 
sie durch Kommata ersetzt.
Moderator (Firma: Titel) Persönliche Seite #1146408
Lesenswert?

> Dann müßte ich also auch D mit einbringen, oder?
Nein, D wird nur abgefragt, wenn sich CLK ändert,
und dann wird der Prozess eh' schon wegen der Änderung von CLK 
durchgerechnet.
1
 process (CLK,RST)   BEGIN  ---<<<<<<<<< beginnen wir den Prozess mal
2
  if RST='1'then    -- !!Hier wird der Fehler gemeldet
3
    Q <='0';
4
  elsif RISING_EDGE(CLK) THEN  ---<<< ELSIF nicht ELSEIF oder ELSE IF
5
     Q <= D;
6
--  end if;  -----<<<< zuviel! schöner einrücken, dann sieht man das  :-/
7
  end if;            
8
 end process;
#1146822
Lesenswert?

Lothar Miller wrote:
1
> --  end if;  -----<<<< zuviel! schöner einrücken, dann sieht man das
2
>   end if;
Nicht unbedingt zu viel, aber die Codierung ist eher ungewöhnlich, denn 
es fehlte wirklich nur das begin und die unvollständige 
Senitivity-Liste. Denn:
1
process (CLK,RST)
2
begin
3
   if RST='1'then
4
      Q <='0';
5
   else if rising_edge(CLK) then -- hier stehen zwei Statements: "else"
6
                                 -- und "if .. then"
7
         Q <= D;
8
      end if;
9
   end if;            
10
end process;
Gleichbedeutend mit folgendem Code, nur besser lesbar:
1
process (CLK,RST)
2
begin
3
   if RST='1'then
4
      Q <='0';
5
   else
6
      if rising_edge(CLK) then
7
         Q <= D;
8
      end if;
9
   end if;            
10
end process;
Synthetisiert habe ich so was allerdings noch nicht!
#1148624
Lesenswert?

Moin zusammen!

>> Synthetisiert habe ich so was allerdings noch nicht!
> Habe es mal schnell ausprobiert: geht problemlos.
> Trotzdem ab damit in die Kuriositätensammlung ;-)

Ist ja auch nur ein Programmierbeispiel aus einem Howto gewesen, mit dem 
ich versucht hab die Quelltext-Struktur und dieses ISE Dingen ein wenig 
besser kennenzulernen :) ...

Größere Sachen kommen dann später... dann pack ich vllt. noch ein ANd 
dazu ;-) ...

Thx and cu

Stefan

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