problem: Syntax error near "if"

Gast #2247747
Lesenswert?

hallo,

sorry für den schwammigen titel. ich vermute aber das der fehler eher in 
meinem verständnis für vhdl liegt.

ich habe 2 syntax fehler im code, Syntax error near "if" & Syntax error 
near "generate" - sind im code gekennzeichnet.

hat jmd hinweise für mich?

1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use common.all;
4

5
entity KoggeStoneAdder is
6
  port (  
7
    P: in std_logic_vector;
8

9
    G: in std_logic_vector;
10
    cin: in std_logic;
11
    cout: out std_logic
12
  );
13
end KoggeStoneAdder;
14

15
architecture Behavioral of KoggeStoneAdder is
16
  --variable dist: integer;
17

18

19
  signal len: natural := log2(P'length + 1);
20
  signal dist: integer;
21
  
22
  type tmpArr is array(len - 1 to 0) of std_logic_vector((P'high - P'low + 1) downto 0);
23
  signal tP: tmpArr;
24
  signal tG: tmpArr;
25
  
26
begin
27
        --P, G, Cin in tmp Feld laden
28
        tG(0)(0) <= cin;
29
        tP(0)(0) <= '1';
30
forGen:    for i in tG'high to 1 generate
31
          tG(0)(i) <= G(i + G'low);
32
          tP(0)(i) <= P(i + P'low);
33
        end generate;
34

35

36

37
stGen0:    for i in 1 to (len - 1) generate
38
stGen1:      for j in 0 to tG'high generate
39
  
40
            --dist <= j - i ** 2;
41
            
42
            if (j < 2 ** i) then --Line 41: Syntax error near "if".
43
              tG(i)(j) <= tG(i - 1)(j);
44
              tP(i)(j) <= tP(i - 1)(j);
45
            end if;      
46
            
47
            
48
ifGen:        if (j >= 2 ** i) generate
49
prfxInst:        Prefix port map(tG(i - 1)(j), tP(i - 1)(j),  
50
                              tG(i - 1)(j - dist), tP(i - 1)(j - dist),
51
                               tG(i)(j), tP(i)(j));  
52
            end generate;
53
                      
54
          end generate;
55
        end generate; --Line 54: Syntax error near "generate".
56
  
57

58

59
end Behavioral;
Gast #2253054
Lesenswert?

ja, if .. generate war die lösung.
das "generate" parallele hw beschreibt, ist mir hoffentlich bewusst. ob 
ichs dadurch richtig einsetzte, ist dann noch was andres.

jedenfalls läuft der code jetzt zumindest ohne fehler durch, das 
ergebnis ist aber noch net das was ich möchte.

es scheint so, als ob die beiden for generate schleifen nicht bearbeitet 
werden, in der simulations seh ich für tG(1) .. tG(len - 1) nur 'U's

hat jmd dazu noch nen hinweis für mich?
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use work.common.all;
4

5
entity KoggeStoneAdder is
6
  port (  
7
    P: in std_logic_vector;
8

9
    G: in std_logic_vector;
10
    cin: in std_logic;
11
    sum: out std_logic_vector;
12
    cout: out std_logic
13
  );
14
end KoggeStoneAdder;
15

16
architecture Behavioral of KoggeStoneAdder is
17
  signal len: natural := log2(P'length + 1);
18
  --signal dist: integer;
19
  
20
  type tmpArr is array(len - 1 downto 0) of std_logic_vector((P'high - P'low + 1) downto 0);
21
  signal tP: tmpArr;
22
  signal tG: tmpArr;
23
  
24
begin
25
        --P, G, Cin in tmp Feld laden
26
        tG(0)(0) <= cin;
27
        tP(0)(0) <= '1';
28
        
29
        tG(0)(G'Length downto 1) <= G;
30
        tP(0)(G'Length downto 1) <= P;
31

32

33
stGen0:    for i in 1 to (len - 1) generate
34
stGen1:      for j in 0 to G'Length generate
35
  
36
          
37
g1:          if (j < 2 ** i) generate
38
              tG(i)(j) <= tG(i - 1)(j);
39
              tP(i)(j) <= tP(i - 1)(j);
40
            end generate;      
41
            
42
            
43
ifGen:        if (j >= 2 ** i) generate
44
prfxInst:        Prefix port map(tG(i - 1)(j), tP(i - 1)(j),  
45
                              tG(i - 1)(j - 2 ** i), tP(i - 1)(j - 2 ** i),
46
                               tG(i)(j), tP(i)(j));  
47
            end generate;
48
                      
49
          end generate;
50
        end generate;
51
        
52
        sum <= tG(0)(G'Length - 1 downto 0);
53
        cout <= tG(0)(G'Length);
54

55

56
end Behavioral;

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